On Thu 14-10-21 18:36:20, Gabriel Krisman Bertazi wrote: > From: Amir Goldstein <amir73il@xxxxxxxxx> > > Define a new data type to pass for event - FSNOTIFY_EVENT_DENTRY. > Use it to pass the dentry instead of it's ->d_inode where available. > > Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> > Signed-off-by: Gabriel Krisman Bertazi <krisman@xxxxxxxxxxxxx> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > include/linux/fsnotify.h | 5 ++--- > include/linux/fsnotify_backend.h | 16 ++++++++++++++++ > 2 files changed, 18 insertions(+), 3 deletions(-) > > diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h > index d1144d7c3536..df0fa4687a18 100644 > --- a/include/linux/fsnotify.h > +++ b/include/linux/fsnotify.h > @@ -39,8 +39,7 @@ static inline int fsnotify_name(__u32 mask, const void *data, int data_type, > static inline void fsnotify_dirent(struct inode *dir, struct dentry *dentry, > __u32 mask) > { > - fsnotify_name(mask, d_inode(dentry), FSNOTIFY_EVENT_INODE, > - dir, &dentry->d_name, 0); > + fsnotify_name(mask, dentry, FSNOTIFY_EVENT_DENTRY, dir, &dentry->d_name, 0); > } > > static inline void fsnotify_inode(struct inode *inode, __u32 mask) > @@ -87,7 +86,7 @@ static inline int fsnotify_parent(struct dentry *dentry, __u32 mask, > */ > static inline void fsnotify_dentry(struct dentry *dentry, __u32 mask) > { > - fsnotify_parent(dentry, mask, d_inode(dentry), FSNOTIFY_EVENT_INODE); > + fsnotify_parent(dentry, mask, dentry, FSNOTIFY_EVENT_DENTRY); > } > > static inline int fsnotify_file(struct file *file, __u32 mask) > diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h > index 1ce66748a2d2..a2db821e8a8f 100644 > --- a/include/linux/fsnotify_backend.h > +++ b/include/linux/fsnotify_backend.h > @@ -248,6 +248,7 @@ enum fsnotify_data_type { > FSNOTIFY_EVENT_NONE, > FSNOTIFY_EVENT_PATH, > FSNOTIFY_EVENT_INODE, > + FSNOTIFY_EVENT_DENTRY, > }; > > static inline struct inode *fsnotify_data_inode(const void *data, int data_type) > @@ -255,6 +256,8 @@ static inline struct inode *fsnotify_data_inode(const void *data, int data_type) > switch (data_type) { > case FSNOTIFY_EVENT_INODE: > return (struct inode *)data; > + case FSNOTIFY_EVENT_DENTRY: > + return d_inode(data); > case FSNOTIFY_EVENT_PATH: > return d_inode(((const struct path *)data)->dentry); > default: > @@ -262,6 +265,19 @@ static inline struct inode *fsnotify_data_inode(const void *data, int data_type) > } > } > > +static inline struct dentry *fsnotify_data_dentry(const void *data, int data_type) > +{ > + switch (data_type) { > + case FSNOTIFY_EVENT_DENTRY: > + /* Non const is needed for dget() */ > + return (struct dentry *)data; > + case FSNOTIFY_EVENT_PATH: > + return ((const struct path *)data)->dentry; > + default: > + return NULL; > + } > +} > + > static inline const struct path *fsnotify_data_path(const void *data, > int data_type) > { > -- > 2.33.0 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR