mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-03-11 00:44:11 +07:00
fanotify: generalize the handling of extra event flags
In fanotify_group_event_mask() there is logic in place to make sure we are not going to handle an event with no type and just FAN_ONDIR flag. Generalize this logic to any FANOTIFY_EVENT_FLAGS. There is only one more flag in this group at the moment - FAN_EVENT_ON_CHILD. We never report it to user, but we do pass it in to fanotify_alloc_event() when group is reporting fid as indication that event happened on child. We will have use for this indication later on. Link: https://lore.kernel.org/r/20200716084230.30611-2-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
08b95c338e
commit
0badfa029e
@ -211,7 +211,8 @@ static u32 fanotify_group_event_mask(struct fsnotify_group *group,
|
|||||||
int data_type)
|
int data_type)
|
||||||
{
|
{
|
||||||
__u32 marks_mask = 0, marks_ignored_mask = 0;
|
__u32 marks_mask = 0, marks_ignored_mask = 0;
|
||||||
__u32 test_mask, user_mask = FANOTIFY_OUTGOING_EVENTS;
|
__u32 test_mask, user_mask = FANOTIFY_OUTGOING_EVENTS |
|
||||||
|
FANOTIFY_EVENT_FLAGS;
|
||||||
const struct path *path = fsnotify_data_path(data, data_type);
|
const struct path *path = fsnotify_data_path(data, data_type);
|
||||||
struct fsnotify_mark *mark;
|
struct fsnotify_mark *mark;
|
||||||
int type;
|
int type;
|
||||||
@ -264,14 +265,18 @@ static u32 fanotify_group_event_mask(struct fsnotify_group *group,
|
|||||||
*
|
*
|
||||||
* For backward compatibility and consistency, do not report FAN_ONDIR
|
* For backward compatibility and consistency, do not report FAN_ONDIR
|
||||||
* to user in legacy fanotify mode (reporting fd) and report FAN_ONDIR
|
* to user in legacy fanotify mode (reporting fd) and report FAN_ONDIR
|
||||||
* to user in FAN_REPORT_FID mode for all event types.
|
* to user in fid mode for all event types.
|
||||||
|
*
|
||||||
|
* We never report FAN_EVENT_ON_CHILD to user, but we do pass it in to
|
||||||
|
* fanotify_alloc_event() when group is reporting fid as indication
|
||||||
|
* that event happened on child.
|
||||||
*/
|
*/
|
||||||
if (FAN_GROUP_FLAG(group, FAN_REPORT_FID)) {
|
if (FAN_GROUP_FLAG(group, FAN_REPORT_FID)) {
|
||||||
/* Do not report FAN_ONDIR without any event */
|
/* Do not report event flags without any event */
|
||||||
if (!(test_mask & ~FAN_ONDIR))
|
if (!(test_mask & ~FANOTIFY_EVENT_FLAGS))
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
user_mask &= ~FAN_ONDIR;
|
user_mask &= ~FANOTIFY_EVENT_FLAGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return test_mask & user_mask;
|
return test_mask & user_mask;
|
||||||
|
Loading…
Reference in New Issue
Block a user