]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
misc: Add support for Linux uio.h RWF_ATOMIC flag
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 8 Oct 2024 18:45:29 +0000 (15:45 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 10 Oct 2024 13:28:01 +0000 (10:28 -0300)
Linux 6.11 adds the new flag for pwritev2 (commit
c34fc6f26ab86d03a2d47446f42b6cd492dfdc56).

Checked on x86_64-linux-gnu on 6.11 kernel.

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
manual/llio.texi
misc/tst-preadvwritev2-common.c
sysdeps/unix/sysv/linux/bits/uio-ext.h

index 05ab44c6e7a5d4fd617a2a4d4d8289a45b944e7a..0eb336f70b136cf703a33208f88fd670ccb8db6c 100644 (file)
@@ -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
index 8e04ff7282e727b62b987b2803b3b1efecbbf0ba..4556421a4394f3a1813cab49369867d871944f23 100644 (file)
 #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
index ead7a091566aa295fd49e7d60ae2b2f4217edce1..85ed21bac5c95ac4057b894df10b24533bccb467 100644 (file)
@@ -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