On Sun 02-12-18 13:38:24, Amir Goldstein wrote: > When event data type is FSNOTIFY_EVENT_INODE, we don't have a refernece > to the mount, so we will not be able to open a file descriptor when user > reads the event. However, if the listener has enabled reporting file > identifier with the FAN_REPORT_FID init flag, we allow repoting those ^^^ reporting > events and we use an indentifier inode to encode fid. ^^ identifier > The inode to use as indetifier when reporting fid depedns on the event. ^^ identifier ^^ depends > For dirent modification events, we report the modified directory inode > and we report the "victim" inode otherwise. > For example: > FS_ATTRIB reports the child inode even if reported on a watched parent. > FS_CREATE reports the modified dir inode and not the created inode. > > Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> ... > @@ -201,13 +202,34 @@ static int fanotify_encode_fid(struct fanotify_event *event, > return FILEID_INVALID; > } > > +/* > + * The inode to use as indetifier when reporting fid depedns on the event. ^^ identifier ^^ depends > + * Report the modified directory inode on dirent modification events. > + * Report the "victim" inode otherwise. > + * For example: > + * FS_ATTRIB reports the child inode even if reported on a watched parent. > + * FS_CREATE reports the modified dir inode and not the created inode. > + */ > +static struct inode *fanotify_report_id(struct inode *to_tell, u32 event_mask, > + const void *data, int data_type) > +{ > + if (event_mask & ALL_FSNOTIFY_DIRENT_EVENTS) > + return to_tell; > + else if (data_type == FSNOTIFY_EVENT_INODE) > + return (struct inode *)data; > + else if (data_type == FSNOTIFY_EVENT_PATH) > + return d_inode(((struct path *)data)->dentry); > + return NULL; > +} > + Maybe call this function fanotify_fid_inode()? Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR