diff mbox series

fanotify: Document FAN_PRE_ACCESS event

Message ID 20250330125536.1408939-1-amir73il@gmail.com (mailing list archive)
State New
Headers show
Series fanotify: Document FAN_PRE_ACCESS event | expand

Commit Message

Amir Goldstein March 30, 2025, 12:55 p.m. UTC
The new FAN_PRE_ACCESS events are created before access to a file range,
to provides an opportunity for the event listener to modify the content
of the object before the user can accesss it.

Those events are available for group in class FAN_CLASS_PRE_CONTENT
They are reported with FAN_EVENT_INFO_TYPE_RANGE info record.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
---
 man/man2/fanotify_init.2 |  4 ++--
 man/man2/fanotify_mark.2 | 14 +++++++++++++
 man/man7/fanotify.7      | 43 ++++++++++++++++++++++++++++++++++++++--
 3 files changed, 57 insertions(+), 4 deletions(-)

Comments

Jan Kara March 31, 2025, 11:37 a.m. UTC | #1
On Sun 30-03-25 14:55:36, Amir Goldstein wrote:
> The new FAN_PRE_ACCESS events are created before access to a file range,
> to provides an opportunity for the event listener to modify the content
> of the object before the user can accesss it.
> 
> Those events are available for group in class FAN_CLASS_PRE_CONTENT
> They are reported with FAN_EVENT_INFO_TYPE_RANGE info record.
> 
> Signed-off-by: Amir Goldstein <amir73il@gmail.com>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <jack@suse.cz>

								Honza

> ---
>  man/man2/fanotify_init.2 |  4 ++--
>  man/man2/fanotify_mark.2 | 14 +++++++++++++
>  man/man7/fanotify.7      | 43 ++++++++++++++++++++++++++++++++++++++--
>  3 files changed, 57 insertions(+), 4 deletions(-)
> 
> diff --git a/man/man2/fanotify_init.2 b/man/man2/fanotify_init.2
> index 23fbe126f..b1ef8018c 100644
> --- a/man/man2/fanotify_init.2
> +++ b/man/man2/fanotify_init.2
> @@ -57,8 +57,8 @@ Only one of the following notification classes may be specified in
>  .B FAN_CLASS_PRE_CONTENT
>  This value allows the receipt of events notifying that a file has been
>  accessed and events for permission decisions if a file may be accessed.
> -It is intended for event listeners that need to access files before they
> -contain their final data.
> +It is intended for event listeners that may need to write data to files
> +before their final data can be accessed.
>  This notification class might be used by hierarchical storage managers,
>  for example.
>  Use of this flag requires the
> diff --git a/man/man2/fanotify_mark.2 b/man/man2/fanotify_mark.2
> index 47cafb21c..edbcdc592 100644
> --- a/man/man2/fanotify_mark.2
> +++ b/man/man2/fanotify_mark.2
> @@ -445,6 +445,20 @@ or
>  .B FAN_CLASS_CONTENT
>  is required.
>  .TP
> +.BR FAN_PRE_ACCESS " (since Linux 6.14)"
> +.\" commit 4f8afa33817a6420398d1c177c6e220a05081f51
> +Create an event before read or write access to a file range,
> +that provides an opportunity for the event listener
> +to modify the content of the file
> +before access to the content
> +in the specified range.
> +An additional information record of type
> +.B FAN_EVENT_INFO_TYPE_RANGE
> +is returned for each event in the read buffer.
> +An fanotify file descriptor created with
> +.B FAN_CLASS_PRE_CONTENT
> +is required.
> +.TP
>  .B FAN_ONDIR
>  Create events for directories\[em]for example, when
>  .BR opendir (3),
> diff --git a/man/man7/fanotify.7 b/man/man7/fanotify.7
> index 7844f52f6..6f3a9496e 100644
> --- a/man/man7/fanotify.7
> +++ b/man/man7/fanotify.7
> @@ -247,6 +247,26 @@ struct fanotify_event_info_error {
>  .EE
>  .in
>  .P
> +In case of
> +.B FAN_PRE_ACCESS
> +events,
> +an additional information record describing the access range
> +is returned alongside the generic
> +.I fanotify_event_metadata
> +structure within the read buffer.
> +This structure is defined as follows:
> +.P
> +.in +4n
> +.EX
> +struct fanotify_event_info_range {
> +    struct fanotify_event_info_header hdr;
> +    __u32 pad;
> +    __u64 offset;
> +    __u64 count;
> +};
> +.EE
> +.in
> +.P
>  All information records contain a nested structure of type
>  .IR fanotify_event_info_header .
>  This structure holds meta-information about the information record
> @@ -509,8 +529,9 @@ The value of this field can be set to one of the following:
>  .BR FAN_EVENT_INFO_TYPE_FID ,
>  .BR FAN_EVENT_INFO_TYPE_DFID ,
>  .BR FAN_EVENT_INFO_TYPE_DFID_NAME ,
> -or
> -.BR FAN_EVENT_INFO_TYPE_PIDFD .
> +.BR FAN_EVENT_INFO_TYPE_PIDFD ,
> +.BR FAN_EVENT_INFO_TYPE_ERROR ,
> +.BR FAN_EVENT_INFO_TYPE_RANGE .
>  The value set for this field
>  is dependent on the flags that have been supplied to
>  .BR fanotify_init (2).
> @@ -711,6 +732,24 @@ Identifies the type of error that occurred.
>  This is a counter of the number of errors suppressed
>  since the last error was read.
>  .P
> +The fields of the
> +.I fanotify_event_info_range
> +structure are as follows:
> +.TP
> +.I hdr
> +This is a structure of type
> +.IR fanotify_event_info_header .
> +The
> +.I info_type
> +field is set to
> +.BR FAN_EVENT_INFO_TYPE_RANGE .
> +.TP
> +.I count
> +The number of bytes being read or written to the file.
> +.TP
> +.I offset
> +The offset from which bytes are read or written to the file.
> +.P
>  The following macros are provided to iterate over a buffer containing
>  fanotify event metadata returned by a
>  .BR read (2)
> -- 
> 2.34.1
>
diff mbox series

Patch

diff --git a/man/man2/fanotify_init.2 b/man/man2/fanotify_init.2
index 23fbe126f..b1ef8018c 100644
--- a/man/man2/fanotify_init.2
+++ b/man/man2/fanotify_init.2
@@ -57,8 +57,8 @@  Only one of the following notification classes may be specified in
 .B FAN_CLASS_PRE_CONTENT
 This value allows the receipt of events notifying that a file has been
 accessed and events for permission decisions if a file may be accessed.
-It is intended for event listeners that need to access files before they
-contain their final data.
+It is intended for event listeners that may need to write data to files
+before their final data can be accessed.
 This notification class might be used by hierarchical storage managers,
 for example.
 Use of this flag requires the
diff --git a/man/man2/fanotify_mark.2 b/man/man2/fanotify_mark.2
index 47cafb21c..edbcdc592 100644
--- a/man/man2/fanotify_mark.2
+++ b/man/man2/fanotify_mark.2
@@ -445,6 +445,20 @@  or
 .B FAN_CLASS_CONTENT
 is required.
 .TP
+.BR FAN_PRE_ACCESS " (since Linux 6.14)"
+.\" commit 4f8afa33817a6420398d1c177c6e220a05081f51
+Create an event before read or write access to a file range,
+that provides an opportunity for the event listener
+to modify the content of the file
+before access to the content
+in the specified range.
+An additional information record of type
+.B FAN_EVENT_INFO_TYPE_RANGE
+is returned for each event in the read buffer.
+An fanotify file descriptor created with
+.B FAN_CLASS_PRE_CONTENT
+is required.
+.TP
 .B FAN_ONDIR
 Create events for directories\[em]for example, when
 .BR opendir (3),
diff --git a/man/man7/fanotify.7 b/man/man7/fanotify.7
index 7844f52f6..6f3a9496e 100644
--- a/man/man7/fanotify.7
+++ b/man/man7/fanotify.7
@@ -247,6 +247,26 @@  struct fanotify_event_info_error {
 .EE
 .in
 .P
+In case of
+.B FAN_PRE_ACCESS
+events,
+an additional information record describing the access range
+is returned alongside the generic
+.I fanotify_event_metadata
+structure within the read buffer.
+This structure is defined as follows:
+.P
+.in +4n
+.EX
+struct fanotify_event_info_range {
+    struct fanotify_event_info_header hdr;
+    __u32 pad;
+    __u64 offset;
+    __u64 count;
+};
+.EE
+.in
+.P
 All information records contain a nested structure of type
 .IR fanotify_event_info_header .
 This structure holds meta-information about the information record
@@ -509,8 +529,9 @@  The value of this field can be set to one of the following:
 .BR FAN_EVENT_INFO_TYPE_FID ,
 .BR FAN_EVENT_INFO_TYPE_DFID ,
 .BR FAN_EVENT_INFO_TYPE_DFID_NAME ,
-or
-.BR FAN_EVENT_INFO_TYPE_PIDFD .
+.BR FAN_EVENT_INFO_TYPE_PIDFD ,
+.BR FAN_EVENT_INFO_TYPE_ERROR ,
+.BR FAN_EVENT_INFO_TYPE_RANGE .
 The value set for this field
 is dependent on the flags that have been supplied to
 .BR fanotify_init (2).
@@ -711,6 +732,24 @@  Identifies the type of error that occurred.
 This is a counter of the number of errors suppressed
 since the last error was read.
 .P
+The fields of the
+.I fanotify_event_info_range
+structure are as follows:
+.TP
+.I hdr
+This is a structure of type
+.IR fanotify_event_info_header .
+The
+.I info_type
+field is set to
+.BR FAN_EVENT_INFO_TYPE_RANGE .
+.TP
+.I count
+The number of bytes being read or written to the file.
+.TP
+.I offset
+The offset from which bytes are read or written to the file.
+.P
 The following macros are provided to iterate over a buffer containing
 fanotify event metadata returned by a
 .BR read (2)