misc: Add support for Linux uio.h RWF_ATOMIC flag

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>
This commit is contained in:
Adhemerval Zanella 2024-10-08 15:45:29 -03:00
parent fc650bfd71
commit 5ffc903216
3 changed files with 19 additions and 1 deletions

View File

@ -1381,6 +1381,19 @@ Per-IO synchronization as if the file was opened with @code{O_APPEND} flag.
@item RWF_NOAPPEND @item RWF_NOAPPEND
This flag allows an offset to be honored, even if the file was opened with This flag allows an offset to be honored, even if the file was opened with
@code{O_APPEND} flag. @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 @end vtable
When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} the When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} the

View File

@ -37,8 +37,11 @@
#ifndef RWF_NOAPPEND #ifndef RWF_NOAPPEND
# define RWF_NOAPPEND 0 # define RWF_NOAPPEND 0
#endif #endif
#ifndef RWF_ATOMIC
# define RWF_ATOMIC 0
#endif
#define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT \ #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. */ /* Generic uio_lim.h does not define IOV_MAX. */
#ifndef IOV_MAX #ifndef IOV_MAX

View 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_NOWAIT 0x00000008 /* per-IO nonblocking mode. */
#define RWF_APPEND 0x00000010 /* per-IO O_APPEND. */ #define RWF_APPEND 0x00000010 /* per-IO O_APPEND. */
#define RWF_NOAPPEND 0x00000020 /* per-IO negation of 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 __END_DECLS