mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 06:33:07 +00:00
fsnotify: add empty fsnotify_{unlink,rmdir}() hooks
We would like to move fsnotify_nameremove() calls from d_delete() into a higher layer where the hook makes more sense and so we can consider every d_delete() call site individually. Start by creating empty hook fsnotify_{unlink,rmdir}() and place them in the proper VFS call sites. After all d_delete() call sites will be converted to use the new hook, the new hook will generate the delete events and fsnotify_nameremove() hook will be removed. Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
0b3b094ac9
commit
116b9731ad
2 changed files with 28 additions and 0 deletions
|
@ -3883,6 +3883,7 @@ int vfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||||
dentry->d_inode->i_flags |= S_DEAD;
|
dentry->d_inode->i_flags |= S_DEAD;
|
||||||
dont_mount(dentry);
|
dont_mount(dentry);
|
||||||
detach_mounts(dentry);
|
detach_mounts(dentry);
|
||||||
|
fsnotify_rmdir(dir, dentry);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
inode_unlock(dentry->d_inode);
|
inode_unlock(dentry->d_inode);
|
||||||
|
@ -3999,6 +4000,7 @@ int vfs_unlink(struct inode *dir, struct dentry *dentry, struct inode **delegate
|
||||||
if (!error) {
|
if (!error) {
|
||||||
dont_mount(dentry);
|
dont_mount(dentry);
|
||||||
detach_mounts(dentry);
|
detach_mounts(dentry);
|
||||||
|
fsnotify_unlink(dir, dentry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -188,6 +188,19 @@ static inline void fsnotify_link(struct inode *dir, struct inode *inode, struct
|
||||||
fsnotify(dir, FS_CREATE, inode, FSNOTIFY_EVENT_INODE, &new_dentry->d_name, 0);
|
fsnotify(dir, FS_CREATE, inode, FSNOTIFY_EVENT_INODE, &new_dentry->d_name, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fsnotify_unlink - 'name' was unlinked
|
||||||
|
*
|
||||||
|
* Caller must make sure that dentry->d_name is stable.
|
||||||
|
*/
|
||||||
|
static inline void fsnotify_unlink(struct inode *dir, struct dentry *dentry)
|
||||||
|
{
|
||||||
|
/* Expected to be called before d_delete() */
|
||||||
|
WARN_ON_ONCE(d_is_negative(dentry));
|
||||||
|
|
||||||
|
/* TODO: call fsnotify_dirent() */
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fsnotify_mkdir - directory 'name' was created
|
* fsnotify_mkdir - directory 'name' was created
|
||||||
*/
|
*/
|
||||||
|
@ -198,6 +211,19 @@ static inline void fsnotify_mkdir(struct inode *inode, struct dentry *dentry)
|
||||||
fsnotify_dirent(inode, dentry, FS_CREATE | FS_ISDIR);
|
fsnotify_dirent(inode, dentry, FS_CREATE | FS_ISDIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fsnotify_rmdir - directory 'name' was removed
|
||||||
|
*
|
||||||
|
* Caller must make sure that dentry->d_name is stable.
|
||||||
|
*/
|
||||||
|
static inline void fsnotify_rmdir(struct inode *dir, struct dentry *dentry)
|
||||||
|
{
|
||||||
|
/* Expected to be called before d_delete() */
|
||||||
|
WARN_ON_ONCE(d_is_negative(dentry));
|
||||||
|
|
||||||
|
/* TODO: call fsnotify_dirent() */
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fsnotify_access - file was read
|
* fsnotify_access - file was read
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue