summaryrefslogtreecommitdiff
path: root/fs/9p
diff options
context:
space:
mode:
authorLatchesar Ionkov <lucho@ionkov.net>2007-04-23 14:41:11 -0700
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-04-24 08:23:08 -0700
commitc959df9f01cfb2f43b4d1f58631ee1e9c50541b6 (patch)
tree79d8d52914ed1f8a96f124f267ebe44c1630e3b4 /fs/9p
parentf51a5a9de86a948b9a30daab90fb003f51446dcd (diff)
downloadlinux-riscv-c959df9f01cfb2f43b4d1f58631ee1e9c50541b6.tar.gz
linux-riscv-c959df9f01cfb2f43b4d1f58631ee1e9c50541b6.tar.bz2
linux-riscv-c959df9f01cfb2f43b4d1f58631ee1e9c50541b6.zip
v9fs: don't use primary fid when removing file
v9fs_insert uses v9fs_fid_lookup (which also locks the fid) to get the primary fid associated with the dentry and destroys the v9fs_fid struct after removing the file. If another process called v9fs_fid_lookup on the same dentry, it may wait undefinitely for the fid's lock (as the struct is freed). This patch changes v9fs_remove to use a cloned fid, so the primary fid is not locked and freed. Signed-off-by: Latchesar Ionkov <lucho@ionkov.net> Cc: Eric Van Hensbergen <ericvh@hera.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/9p')
-rw-r--r--fs/9p/vfs_inode.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
index 124a085d1f2e..b01b0a457932 100644
--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -415,7 +415,7 @@ static int v9fs_remove(struct inode *dir, struct dentry *file, int rmdir)
file_inode = file->d_inode;
sb = file_inode->i_sb;
v9ses = v9fs_inode2v9ses(file_inode);
- v9fid = v9fs_fid_lookup(file);
+ v9fid = v9fs_fid_clone(file);
if(IS_ERR(v9fid))
return PTR_ERR(v9fid);