Re: re-enable IOCB_NOWAIT writes to files v4

Christoph Hellwig
2025-12-23T22:53:26Z

Julia found a nice little typo in the new changes, which really
wants me to split the atime from c/mtime update path badly. So
don't feel rushed to review this version and enjoy the holidays,
there will be a new one soon.

On Tue, Dec 23, 2025 at 09:37:43AM +0900, Christoph Hellwig wrote:
> 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.
>
> Changes since v3:
> - fix was_dirty_time handling in __mark_inode_dirty for the racy flag
> update case
> - refactor inode_update_timestamps to make the lazytime vs blocking
> logical more clear
> - allow non-blocking timestamp updates for fat
>
> Changes since v2:
> - drop patches merged upstream
> - adjust for the inode state accesors
> - keep a check in __writeback_single_inode instead of exercising
> potentially undefined behavior
> - more spelling fixes
>
> Changes since v1:
> - more regular numbering of the S_* flags
> - fix XFS to actually not block
> - don't ignore the generic_update_time return value in
> file_update_time_flags
> - fix the sync_lazytime return value
> - fix an out of data comment in btrfs
> - fix a race that would update i_version before returning -EAGAIN in XFS
>
> Diffstat:
> Documentation/filesystems/locking.rst | 2
> Documentation/filesystems/vfs.rst | 6 +
> fs/btrfs/inode.c | 8 +-
> fs/fs-writeback.c | 33 +++++++---
> fs/gfs2/inode.c | 6 +
> fs/inode.c | 111 +++++++++++++++++++++-------------
> fs/internal.h | 3
> fs/nfs/inode.c | 4 -
> fs/orangefs/inode.c | 5 +
> fs/overlayfs/inode.c | 2
> fs/sync.c | 4 -
> fs/ubifs/file.c | 13 ++-
> fs/xfs/xfs_iops.c | 34 +++++++++-
> fs/xfs/xfs_super.c | 29 --------
> include/linux/fs.h | 27 ++++++--
> include/trace/events/writeback.h | 6 -
> 16 files changed, 182 insertions(+), 111 deletions(-)
---end quoted text---