[RFC PATCH v3 08/11] fs: Introduce RWF_NOSERIAL flag to indicate parallel reads/writes

From: Ojaswin Mujoo

Date: Wed Aug 05 2026 - 02:31:07 EST


Introduce RWF_NOSERIAL flag to indicate that the application is
okay with its reads and writes going in parallel to other read/writes.
This flag will allow writes and read to go in parallel (for eg, under a
shared lock) increasing performance at the cost of losing the (loosely
implemented) POSIX guarantees wrt to R/W serialization that various
filesystems provide.

In this patch we just introduce the flag and in upcoming patches we will
use it to implement parallel writes to increase performance of
RWF_WRITETHROUGH

Co-developed-by: Ritesh Harjani (IBM) <ritesh.list@xxxxxxxxx>
Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@xxxxxxxxx>
Signed-off-by: Ojaswin Mujoo <ojaswin@xxxxxxxxxxxxx>
---
include/linux/fs.h | 10 ++++++++++
include/uapi/linux/fs.h | 6 +++++-
2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/include/linux/fs.h b/include/linux/fs.h
index bff09a5f90e8..685ffe8da6ea 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -345,6 +345,7 @@ struct readahead_control;
#define IOCB_DONTCACHE (__force int) RWF_DONTCACHE
#define IOCB_NOSIGNAL (__force int) RWF_NOSIGNAL
#define IOCB_WRITETHROUGH (__force int) RWF_WRITETHROUGH
+#define IOCB_NOSERIAL (__force int) RWF_NOSERIAL

/* non-RWF related bits - start at 16 */
#define IOCB_EVENTFD (1 << 16)
@@ -3475,6 +3476,15 @@ static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags,
if (IS_DAX(ki->ki_filp->f_mapping->host))
return -EOPNOTSUPP;
}
+
+ /*
+ * For now we don't allow users to pass the NOSERIAL flag
+ * TODO: Once the semantics of this flag are finalized we can lift this
+ * restriction.
+ */
+ if (flags & IOCB_NOSERIAL)
+ return -EOPNOTSUPP;
+
kiocb_flags |= (__force int) (flags & RWF_SUPPORTED);
if (flags & RWF_SYNC)
kiocb_flags |= IOCB_DSYNC;
diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h
index 9c8d91b926a7..cde8c9492da6 100644
--- a/include/uapi/linux/fs.h
+++ b/include/uapi/linux/fs.h
@@ -454,10 +454,14 @@ typedef int __bitwise __kernel_rwf_t;
/* buffered IO that is asynchronously written through to disk after write */
#define RWF_WRITETHROUGH ((__force __kernel_rwf_t)0x00000200)

+/* buffered IO writes that are non sequential because they use a shared lock */
+#define RWF_NOSERIAL ((__force __kernel_rwf_t)0x00000400)
+
/* mask of flags supported by the kernel */
#define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT |\
RWF_APPEND | RWF_NOAPPEND | RWF_ATOMIC |\
- RWF_DONTCACHE | RWF_NOSIGNAL | RWF_WRITETHROUGH)
+ RWF_DONTCACHE | RWF_NOSIGNAL | RWF_WRITETHROUGH |\
+ RWF_NOSERIAL)

#define PROCFS_IOCTL_MAGIC 'f'

--
2.55.0