mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-07 13:53:24 +00:00
[PATCH] inotify delete race fix
The included patch fixes a problem where a inotify client would receive a delete event before the file was actually deleted. The bug affects both dnotify & inotify. Signed-off-by: John McCutchan <ttb@tentacle.dhs.org> Signed-off-by: Robert Love <rml@novell.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
3de11748c1
commit
e234f35c54
10
fs/namei.c
10
fs/namei.c
@ -1801,8 +1801,8 @@ int vfs_rmdir(struct inode *dir, struct dentry *dentry)
|
|||||||
}
|
}
|
||||||
up(&dentry->d_inode->i_sem);
|
up(&dentry->d_inode->i_sem);
|
||||||
if (!error) {
|
if (!error) {
|
||||||
fsnotify_rmdir(dentry, dentry->d_inode, dir);
|
|
||||||
d_delete(dentry);
|
d_delete(dentry);
|
||||||
|
fsnotify_rmdir(dentry, dentry->d_inode, dir);
|
||||||
}
|
}
|
||||||
dput(dentry);
|
dput(dentry);
|
||||||
|
|
||||||
@ -1874,8 +1874,14 @@ int vfs_unlink(struct inode *dir, struct dentry *dentry)
|
|||||||
|
|
||||||
/* We don't d_delete() NFS sillyrenamed files--they still exist. */
|
/* We don't d_delete() NFS sillyrenamed files--they still exist. */
|
||||||
if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) {
|
if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) {
|
||||||
fsnotify_unlink(dentry, dir);
|
#if defined(CONFIG_INOTIFY) || defined(CONFIG_DNOTIFY)
|
||||||
|
dget(dentry);
|
||||||
d_delete(dentry);
|
d_delete(dentry);
|
||||||
|
fsnotify_unlink(dentry, dir);
|
||||||
|
dput(dentry);
|
||||||
|
#else
|
||||||
|
d_delete(dentry);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
|
Loading…
Reference in New Issue
Block a user