fsnotify: report FS_ISDIR flag with MOVE_SELF and DELETE_SELF events
We need to report FS_ISDIR flag with MOVE_SELF and DELETE_SELF events for fanotify, because fanotify API requires the user to explicitly request events on directories by FAN_ONDIR flag. inotify never reported IN_ISDIR with those events. It looks like an oversight, but to avoid the risk of breaking existing inotify programs, mask the FS_ISDIR flag out when reprting those events to inotify backend. We also add the FS_ISDIR flag with FS_ATTRIB event in the case of rename over an empty target directory. inotify did not report IN_ISDIR in this case, but it normally does report IN_ISDIR along with IN_ATTRIB event, so in this case, we do not mask out the FS_ISDIR flag. [JK: Simplify the checks in fsnotify_move()] Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
@@ -113,6 +113,15 @@ int inotify_handle_event(struct fsnotify_group *group,
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/*
|
||||
* We now report FS_ISDIR flag with MOVE_SELF and DELETE_SELF events
|
||||
* for fanotify. inotify never reported IN_ISDIR with those events.
|
||||
* It looks like an oversight, but to avoid the risk of breaking
|
||||
* existing inotify programs, mask the flag out from those events.
|
||||
*/
|
||||
if (mask & (IN_MOVE_SELF | IN_DELETE_SELF))
|
||||
mask &= ~IN_ISDIR;
|
||||
|
||||
fsn_event = &event->fse;
|
||||
fsnotify_init_event(fsn_event, inode);
|
||||
event->mask = mask;
|
||||
|
Reference in New Issue
Block a user