@@ -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;
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@gmail.com> --- fs/notify/fanotify/fanotify_user.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)