[PATCH] misc: Add support for Linux uio.h RWF_DONTCACHE flag
Xi Ruoyao
xry111@xry111.site
Thu Aug 28 05:56:40 GMT 2025
Linux 6.14 adds the new flag for uncached buffered IO on a filesystem
supporting it.
This caused two test failures as these tests expected the flag
0x00000080 is unused. Add the flag definition to fix these tests on
Linux >= 6.14:
FAIL: misc/tst-preadvwritev2
FAIL: misc/tst-preadvwritev64v2
The test failures were not detected in routine test suite runs because
normally we create the test file in /tmp, where a tmpfs is usually
mounted, and tmpfs does not support this flag. But it can be reproduced
with TMPDIR set to some directory in an ext4 file system.
Link: https://git.kernel.org/torvalds/c/af6505e5745b
Signed-off-by: Xi Ruoyao <xry111@xry111.site>
---
Tested on x86_64 and loongarch64.
manual/llio.texi | 4 ++++
misc/tst-preadvwritev2-common.c | 6 +++++-
sysdeps/unix/sysv/linux/bits/uio-ext.h | 1 +
3 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/manual/llio.texi b/manual/llio.texi
index e7fd6ca0e9..806ff0a27d 100644
--- a/manual/llio.texi
+++ b/manual/llio.texi
@@ -1414,6 +1414,10 @@ 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.
+@item RWF_DONTCACHE
+Use uncached buffered IO. If the file system does not support it, the
+call will fail and set @code{errno} to @code{EOPNOTSUPP}.
+
This is a Linux-specific extension.
@end vtable
diff --git a/misc/tst-preadvwritev2-common.c b/misc/tst-preadvwritev2-common.c
index ff1007d6d2..8a59ff2f9d 100644
--- a/misc/tst-preadvwritev2-common.c
+++ b/misc/tst-preadvwritev2-common.c
@@ -40,8 +40,12 @@
#ifndef RWF_ATOMIC
# define RWF_ATOMIC 0
#endif
+#ifndef RWF_DONTCACHE
+# define RWF_DONTCACHE 0
+#endif
#define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT \
- | RWF_APPEND | RWF_NOAPPEND | RWF_ATOMIC)
+ | RWF_APPEND | RWF_NOAPPEND | RWF_ATOMIC \
+ | RWF_DONTCACHE)
/* 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 040cb8dd48..1b7ab4b495 100644
--- a/sysdeps/unix/sysv/linux/bits/uio-ext.h
+++ b/sysdeps/unix/sysv/linux/bits/uio-ext.h
@@ -50,6 +50,7 @@ extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec,
#define RWF_NOAPPEND 0x00000020 /* per-IO negation of O_APPEND */
#define RWF_ATOMIC 0x00000040 /* Write is to be issued with torn-write
prevention. */
+#define RWF_DONTCACHE 0x00000080 /* Uncached buffered IO. */
__END_DECLS
--
2.51.0
More information about the Libc-alpha
mailing list