diff options
author | Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> | 2010-07-02 02:51:20 -0400 |
---|---|---|
committer | Eric Van Hensbergen <ericvh@gmail.com> | 2010-08-02 15:28:36 -0400 |
commit | 0b1208b1aa7a555d5ae4246bab4cd76ba3f32b2d (patch) | |
tree | 9149834d1e86df4d5d42abbfc10e92245946a851 /net/9p | |
parent | a534c8d15b1f1d0f861fc2bb9e0529bd8486ec3f (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.c | 3 |
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 | |||
1245 | error: | 1243 | error: |
1244 | p9_fid_destroy(fid); | ||
1246 | return err; | 1245 | return err; |
1247 | } | 1246 | } |
1248 | EXPORT_SYMBOL(p9_client_remove); | 1247 | EXPORT_SYMBOL(p9_client_remove); |