re-enable IOCB_NOWAIT writes to files

Christoph Hellwig
2025-11-14T06:26:51Z

Hi all,

commit 66fa3cedf16a ("fs: Add async write file modification handling.")
effectively disabled IOCB_NOWAIT writes as timestamp updates currently
always require blocking, and the modern timestamp resolution means we
always update timestamps. This leads to a lot of context switches from
applications using io_uring to submit file writes, making it often worse
than using the legacy aio code that is not using IOCB_NOWAIT.

This series allows non-blocking updates for lazytime if the file system
supports it, and adds that support for XFS.

It also fixes the layering bypass in btrfs when updating timestamps on
device files for devices removed from btrfs usage, and FMODE_NOCMTIME
handling in the VFS now that nfsd started using it. Note that I'm still
not sure that nfsd usage is fully correct for all file systems, as only
XFS explicitly supports FMODE_NOCMTIME, but at least the generic code
does the right thing now.

Diffstat:
Documentation/filesystems/locking.rst | 2
Documentation/filesystems/vfs.rst | 6 ++
fs/btrfs/inode.c | 3 +
fs/btrfs/volumes.c | 11 +--
fs/fat/misc.c | 3 +
fs/fs-writeback.c | 53 ++++++++++++++----
fs/gfs2/inode.c | 6 +-
fs/inode.c | 100 +++++++++++-----------------------
fs/internal.h | 3 -
fs/orangefs/inode.c | 7 ++
fs/overlayfs/inode.c | 3 +
fs/sync.c | 4 -
fs/ubifs/file.c | 9 +--
fs/utimes.c | 1
fs/xfs/xfs_iops.c | 29 ++++++++-
fs/xfs/xfs_super.c | 29 ---------
include/linux/fs.h | 17 +++--
include/trace/events/writeback.h | 6 --
18 files changed, 152 insertions(+), 140 deletions(-)