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>
This commit is contained in:
Родитель
f51a5a9de8
Коммит
c959df9f01
|
@ -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);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче