[RFC PATCH v3 08/11] fs: Introduce RWF_NOSERIAL flag to indicate parallel reads/writes
Ojaswin Mujoo <[email protected]> Wed, 5 Aug 2026 11:58:14 +0530
| Newsgroups | gmane.linux.file-systems,gmane.linux.kernel,gmane.linux.kernel.mm |
|---|---|
| Message-ID | <71903b5bb03b193f2ad2e407f02e6f223802b436.1785908600.git.ojaswin@linux.ibm.com> |
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) <[email protected]> Signed-off-by: Ritesh Harjani (IBM) <[email protected]> Signed-off-by: Ojaswin Mujoo <[email protected]> --- 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