fanotify: generalize merge logic of events on dir
An event on directory should never be merged with an event on non-directory regardless of the event struct type. This change has no visible effect, because currently, with struct fanotify_path_event, the relevant events will not be merged because event path of dir will be different than event path of non-dir. Link: https://lore.kernel.org/r/20200716084230.30611-3-amir73il@gmail.com Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
0badfa029e
commit
103ff6a554
|
@ -83,22 +83,22 @@ static bool fanotify_should_merge(struct fsnotify_event *old_fsn,
|
||||||
old->type != new->type || old->pid != new->pid)
|
old->type != new->type || old->pid != new->pid)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We want to merge many dirent events in the same dir (i.e.
|
||||||
|
* creates/unlinks/renames), but we do not want to merge dirent
|
||||||
|
* events referring to subdirs with dirent events referring to
|
||||||
|
* non subdirs, otherwise, user won't be able to tell from a
|
||||||
|
* mask FAN_CREATE|FAN_DELETE|FAN_ONDIR if it describes mkdir+
|
||||||
|
* unlink pair or rmdir+create pair of events.
|
||||||
|
*/
|
||||||
|
if ((old->mask & FS_ISDIR) != (new->mask & FS_ISDIR))
|
||||||
|
return false;
|
||||||
|
|
||||||
switch (old->type) {
|
switch (old->type) {
|
||||||
case FANOTIFY_EVENT_TYPE_PATH:
|
case FANOTIFY_EVENT_TYPE_PATH:
|
||||||
return fanotify_path_equal(fanotify_event_path(old),
|
return fanotify_path_equal(fanotify_event_path(old),
|
||||||
fanotify_event_path(new));
|
fanotify_event_path(new));
|
||||||
case FANOTIFY_EVENT_TYPE_FID:
|
case FANOTIFY_EVENT_TYPE_FID:
|
||||||
/*
|
|
||||||
* We want to merge many dirent events in the same dir (i.e.
|
|
||||||
* creates/unlinks/renames), but we do not want to merge dirent
|
|
||||||
* events referring to subdirs with dirent events referring to
|
|
||||||
* non subdirs, otherwise, user won't be able to tell from a
|
|
||||||
* mask FAN_CREATE|FAN_DELETE|FAN_ONDIR if it describes mkdir+
|
|
||||||
* unlink pair or rmdir+create pair of events.
|
|
||||||
*/
|
|
||||||
if ((old->mask & FS_ISDIR) != (new->mask & FS_ISDIR))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return fanotify_fid_event_equal(FANOTIFY_FE(old),
|
return fanotify_fid_event_equal(FANOTIFY_FE(old),
|
||||||
FANOTIFY_FE(new));
|
FANOTIFY_FE(new));
|
||||||
case FANOTIFY_EVENT_TYPE_FID_NAME:
|
case FANOTIFY_EVENT_TYPE_FID_NAME:
|
||||||
|
|
Loading…
Reference in New Issue