User who requested the flag FAN_EVENT_INFO_PARENT on fanotify_init() will get the additional information FAN_ONDIR when event subject is a directory. Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> --- fs/notify/fanotify/fanotify_user.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index adef7b0..bc1ccd0 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c @@ -147,17 +147,22 @@ static int fill_event_metadata(struct fsnotify_group *group, { int ret = 0; struct fanotify_event_info *event; + __u32 user_mask = FAN_ALL_OUTGOING_EVENTS; pr_debug("%s: group=%p metadata=%p event=%p\n", __func__, group, metadata, fsn_event); + /* FAN_ONDIR is important for dentry events */ + if (group->fanotify_data.flags & FAN_EVENT_INFO_PARENT) + user_mask |= FAN_ONDIR; + *file = NULL; event = container_of(fsn_event, struct fanotify_event_info, fse); metadata->event_len = FAN_EVENT_METADATA_LEN; metadata->metadata_len = FAN_EVENT_METADATA_LEN; metadata->vers = FANOTIFY_METADATA_VERSION; metadata->reserved = 0; - metadata->mask = fsn_event->mask & FAN_ALL_OUTGOING_EVENTS; + metadata->mask = fsn_event->mask & user_mask; metadata->pid = pid_vnr(event->tgid); if (unlikely(fsn_event->mask & FAN_Q_OVERFLOW)) metadata->fd = FAN_NOFD; -- 2.7.4