Document fanotify_init(2) flag FAN_REPORT_DIR_FID and event info type FAN_EVENT_INFO_TYPE_DFID. Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> --- man2/fanotify_init.2 | 35 +++++++++++++++++++++++++++++++++-- man7/fanotify.7 | 30 ++++++++++++++++++++++++++---- 2 files changed, 59 insertions(+), 6 deletions(-) diff --git a/man2/fanotify_init.2 b/man2/fanotify_init.2 index 54646e3c6..c58ae4493 100644 --- a/man2/fanotify_init.2 +++ b/man2/fanotify_init.2 @@ -1,4 +1,4 @@ -.\" Copyright (C) 2013, Heinrich Schuchardt <xypron.glpk@xxxxxx> +\" Copyright (C) 2013, Heinrich Schuchardt <xypron.glpk@xxxxxx> .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this @@ -191,7 +191,38 @@ is not permitted with this flag and will result in the error .BR EINVAL . See .BR fanotify (7) -for additional information. +for additional details. +.TP +.BR FAN_REPORT_DIR_FID " (since Linux 5.9)" +Events for fanotify groups initialized with this flag will contain +(see exceptions below) additional information about a directory object +correlated to an event. +An additional record of type +.BR FAN_EVENT_INFO_TYPE_DFID +encapsulates the information about the directory object and is included +alongside the generic event metadata structure. +For events that occur on a non-directory object, the additional structure +includes a file handle that identifies the parent directory filesystem object. +Note that there is no guarantee that the directory filesystem object will be +found at the location described by the file handle information at the time +the event is received. +In combination with the flag +.BR FAN_REPORT_FID , +two records may be reported with events that occur on a non-directory object, +one to identify the non-directory object itself and one to identify the parent +directory object. +Note that in some cases, a filesystem object does not have a parent, +for example, when an event occurs on an unlinked but open file. +In that case, with the +.BR FAN_REPORT_FID +flag, the event will be reported with only one record to identify the +non-directory object itself, because there is no directory associated with +the event. Without the +.BR FAN_REPORT_FID +flag, no event will be reported. +See +.BR fanotify (7) +for additional details. .PP The .I event_f_flags diff --git a/man7/fanotify.7 b/man7/fanotify.7 index a7b219168..00fc56368 100644 --- a/man7/fanotify.7 +++ b/man7/fanotify.7 @@ -140,12 +140,13 @@ until either a file event occurs or the call is interrupted by a signal (see .BR signal (7)). .PP -The use of the -.BR FAN_REPORT_FID -flag in +The use of one of the flags +.BR FAN_REPORT_FID , +.BR FAN_REPORT_DIR_FID +in .BR fanotify_init (2) influences what data structures are returned to the event listener for each -event. Events reported to a group initialized with this flag will +event. Events reported to a group initialized with one of these flags will use file handles to identify filesystem objects instead of file descriptors. .TP After a successful @@ -412,6 +413,19 @@ a single information record is expected to be attached to the event with .I info_type field value of .BR FAN_EVENT_INFO_TYPE_FID . +When an fanotify file descriptor is created using the combination of +.BR FAN_REPORT_FID +and +.BR FAN_REPORT_DIR_FID , +there may be two information records attached to the event. One with +.I info_type +field value of +.BR FAN_EVENT_INFO_TYPE_DFID , +identifying a parent directory object, and one with +.I info_type +field value of +.BR FAN_EVENT_INFO_TYPE_FID , +identifying a non-directory object. The .I fanotify_event_info_header contains a @@ -469,6 +483,14 @@ field is the .IR file_handle identifies the object correlated to the event. +If the value of +.I info_type +field is +.BR FAN_EVENT_INFO_TYPE_DFID , +the +.IR file_handle +identifies the directory object correlated to the event or the parent directory +of the non-directory object correlated to the event. .PP The following macros are provided to iterate over a buffer containing fanotify event metadata returned by a -- 2.17.1