aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSripathi Kodi <sripathik@in.ibm.com>2010-06-09 14:33:22 +0530
committerAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>2010-09-08 22:56:39 +0530
commit926487b70be7cfd0303168a68a092bc6faf122ca (patch)
tree35949e47058804214fac912e6ede267a3ef1ddf8
parentbe940c8716d4d7783b1649f5f286b4c0187f9f6d (diff)
downloadqemu-926487b70be7cfd0303168a68a092bc6faf122ca.zip
qemu-926487b70be7cfd0303168a68a092bc6faf122ca.tar.gz
qemu-926487b70be7cfd0303168a68a092bc6faf122ca.tar.bz2
virtio-9p: Return correct error from v9fs_remove
Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com> In v9fs_remove_post_remove() we currently ignore the error returned by the previous call to remove() and return an error only if freeing the fid fails. However, the client expects to see the error from remove(). Currently the client falsely thinks that the remove call has always succeeded. For example, doing rmdir on a non-empty directory does not return ENOTEMPTY. With this patch we ignore the error from free_fid(). The client cannot use this error value anyway. Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com> Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
-rw-r--r--hw/virtio-9p.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/hw/virtio-9p.c b/hw/virtio-9p.c
index f385183..cea3935 100644
--- a/hw/virtio-9p.c
+++ b/hw/virtio-9p.c
@@ -1877,14 +1877,15 @@ static void v9fs_flush(V9fsState *s, V9fsPDU *pdu)
static void v9fs_remove_post_remove(V9fsState *s, V9fsRemoveState *vs,
int err)
{
- /* For TREMOVE we need to clunk the fid even on failed remove */
- err = free_fid(s, vs->fidp->fid);
if (err < 0) {
- goto out;
+ err = -errno;
+ } else {
+ err = vs->offset;
}
- err = vs->offset;
-out:
+ /* For TREMOVE we need to clunk the fid even on failed remove */
+ free_fid(s, vs->fidp->fid);
+
complete_pdu(s, vs->pdu, err);
qemu_free(vs);
}