diff mbox series

[v2,7/8] misc: Add support for Linux uio.h RWF_ATOMIC flag

Message ID 20241008184634.245607-8-adhemerval.zanella@linaro.org
State New
Headers show
Series Updates for Linux 6.11 | expand

Commit Message

Adhemerval Zanella Netto Oct. 8, 2024, 6:45 p.m. UTC
Linux 6.11 adds the new flag for pwritev2 (commit
c34fc6f26ab86d03a2d47446f42b6cd492dfdc56).

Checked on x86_64-linux-gnu on 6.11 kernel.
---
 manual/llio.texi                       | 13 +++++++++++++
 misc/tst-preadvwritev2-common.c        |  5 ++++-
 sysdeps/unix/sysv/linux/bits/uio-ext.h |  2 ++
 3 files changed, 19 insertions(+), 1 deletion(-)

Comments

H.J. Lu Oct. 8, 2024, 9:09 p.m. UTC | #1
On Wed, Oct 9, 2024 at 2:48 AM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> Linux 6.11 adds the new flag for pwritev2 (commit
> c34fc6f26ab86d03a2d47446f42b6cd492dfdc56).
>
> Checked on x86_64-linux-gnu on 6.11 kernel.
> ---
>  manual/llio.texi                       | 13 +++++++++++++
>  misc/tst-preadvwritev2-common.c        |  5 ++++-
>  sysdeps/unix/sysv/linux/bits/uio-ext.h |  2 ++
>  3 files changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/manual/llio.texi b/manual/llio.texi
> index 05ab44c6e7..0eb336f70b 100644
> --- a/manual/llio.texi
> +++ b/manual/llio.texi
> @@ -1381,6 +1381,19 @@ Per-IO synchronization as if the file was opened with @code{O_APPEND} flag.
>  @item RWF_NOAPPEND
>  This flag allows an offset to be honored, even if the file was opened with
>  @code{O_APPEND} flag.
> +
> +@item RWF_ATOMIC
> +Indicate that the write is to be issued with torn-write prevention.  The
> +input buffer should follow some contraints: the total length should be
> +power-of-2 in size and also sizes between @code{atomic_write_unit_min}
> +and @code{atomic_write_unit_max}, the @code{struct iovec} count should be
> +up to @code{atomic_write_segments_max}, and the offset should be
> +naturally-aligned with regard to total write length.
> +
> +The @code{atomic_*} values can be obtained with @code{statx} along with
> +@code{STATX_WRITE_ATOMIC} flag.
> +
> +This is a Linux-specific extension.
>  @end vtable
>
>  When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} the
> diff --git a/misc/tst-preadvwritev2-common.c b/misc/tst-preadvwritev2-common.c
> index 8e04ff7282..4556421a43 100644
> --- a/misc/tst-preadvwritev2-common.c
> +++ b/misc/tst-preadvwritev2-common.c
> @@ -37,8 +37,11 @@
>  #ifndef RWF_NOAPPEND
>  # define RWF_NOAPPEND 0
>  #endif
> +#ifndef RWF_ATOMIC
> +# define RWF_ATOMIC 0
> +#endif
>  #define RWF_SUPPORTED  (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT \
> -                        | RWF_APPEND | RWF_NOAPPEND)
> +                        | RWF_APPEND | RWF_NOAPPEND | RWF_ATOMIC)
>
>  /* Generic uio_lim.h does not define IOV_MAX.  */
>  #ifndef IOV_MAX
> diff --git a/sysdeps/unix/sysv/linux/bits/uio-ext.h b/sysdeps/unix/sysv/linux/bits/uio-ext.h
> index ead7a09156..85ed21bac5 100644
> --- a/sysdeps/unix/sysv/linux/bits/uio-ext.h
> +++ b/sysdeps/unix/sysv/linux/bits/uio-ext.h
> @@ -48,6 +48,8 @@ extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec,
>  #define RWF_NOWAIT     0x00000008 /* per-IO nonblocking mode.  */
>  #define RWF_APPEND     0x00000010 /* per-IO O_APPEND.  */
>  #define RWF_NOAPPEND   0x00000020 /* per-IO negation of O_APPEND */
> +#define RWF_ATOMIC     0x00000040 /* Write is to be issued with torn-write
> +                                     prevention.  */
>
>  __END_DECLS
>
> --
> 2.43.0
>

LGTM.

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>

Thanks.
diff mbox series

Patch

diff --git a/manual/llio.texi b/manual/llio.texi
index 05ab44c6e7..0eb336f70b 100644
--- a/manual/llio.texi
+++ b/manual/llio.texi
@@ -1381,6 +1381,19 @@  Per-IO synchronization as if the file was opened with @code{O_APPEND} flag.
 @item RWF_NOAPPEND
 This flag allows an offset to be honored, even if the file was opened with
 @code{O_APPEND} flag.
+
+@item RWF_ATOMIC
+Indicate that the write is to be issued with torn-write prevention.  The
+input buffer should follow some contraints: the total length should be
+power-of-2 in size and also sizes between @code{atomic_write_unit_min}
+and @code{atomic_write_unit_max}, the @code{struct iovec} count should be
+up to @code{atomic_write_segments_max}, and the offset should be
+naturally-aligned with regard to total write length.
+
+The @code{atomic_*} values can be obtained with @code{statx} along with
+@code{STATX_WRITE_ATOMIC} flag.
+
+This is a Linux-specific extension.
 @end vtable
 
 When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} the
diff --git a/misc/tst-preadvwritev2-common.c b/misc/tst-preadvwritev2-common.c
index 8e04ff7282..4556421a43 100644
--- a/misc/tst-preadvwritev2-common.c
+++ b/misc/tst-preadvwritev2-common.c
@@ -37,8 +37,11 @@ 
 #ifndef RWF_NOAPPEND
 # define RWF_NOAPPEND 0
 #endif
+#ifndef RWF_ATOMIC
+# define RWF_ATOMIC 0
+#endif
 #define RWF_SUPPORTED	(RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT \
-			 | RWF_APPEND | RWF_NOAPPEND)
+			 | RWF_APPEND | RWF_NOAPPEND | RWF_ATOMIC)
 
 /* Generic uio_lim.h does not define IOV_MAX.  */
 #ifndef IOV_MAX
diff --git a/sysdeps/unix/sysv/linux/bits/uio-ext.h b/sysdeps/unix/sysv/linux/bits/uio-ext.h
index ead7a09156..85ed21bac5 100644
--- a/sysdeps/unix/sysv/linux/bits/uio-ext.h
+++ b/sysdeps/unix/sysv/linux/bits/uio-ext.h
@@ -48,6 +48,8 @@  extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec,
 #define RWF_NOWAIT	0x00000008 /* per-IO nonblocking mode.  */
 #define RWF_APPEND	0x00000010 /* per-IO O_APPEND.  */
 #define RWF_NOAPPEND	0x00000020 /* per-IO negation of O_APPEND */
+#define RWF_ATOMIC	0x00000040 /* Write is to be issued with torn-write
+				      prevention.  */
 
 __END_DECLS