aboutsummaryrefslogtreecommitdiffstats
path: root/net/9p
diff options
context:
space:
mode:
authorAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>2010-07-02 02:51:20 -0400
committerEric Van Hensbergen <ericvh@gmail.com>2010-08-02 15:28:36 -0400
commit0b1208b1aa7a555d5ae4246bab4cd76ba3f32b2d (patch)
tree9149834d1e86df4d5d42abbfc10e92245946a851 /net/9p
parenta534c8d15b1f1d0f861fc2bb9e0529bd8486ec3f (diff)
fs/9p: destroy fid on failed remove
9P spec says: "It is correct to consider remove to be a clunk with the side effect of removing the file if permissions allow. " So even if remove fails we need to destroy the fid. Without this patch an rmdir on a directory with contents leave the new cloned directory fid fid attached to fidlist. On umount we dump the fids on the fidlist ~# rmdir /mnt2/test4/ rmdir: failed to remove `/mnt2/test4/': Directory not empty ~# umount /mnt2/ ~# dmesg [ 228.474323] Found fid 3 not clunked Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com> Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
Diffstat (limited to 'net/9p')
-rw-r--r--net/9p/client.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/net/9p/client.c b/net/9p/client.c
index 43396acd714a..dc6f2f26d023 100644
--- a/net/9p/client.c
+++ b/net/9p/client.c
@@ -1240,9 +1240,8 @@ int p9_client_remove(struct p9_fid *fid)
1240 P9_DPRINTK(P9_DEBUG_9P, "<<< RREMOVE fid %d\n", fid->fid); 1240 P9_DPRINTK(P9_DEBUG_9P, "<<< RREMOVE fid %d\n", fid->fid);
1241 1241
1242 p9_free_req(clnt, req); 1242 p9_free_req(clnt, req);
1243 p9_fid_destroy(fid);
1244
1245error: 1243error:
1244 p9_fid_destroy(fid);
1246 return err; 1245 return err;
1247} 1246}
1248EXPORT_SYMBOL(p9_client_remove); 1247EXPORT_SYMBOL(p9_client_remove);