mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v3 0/3] fs: drain in-flight DIO before buffered write fallback
@ 2026-09-28  8:54 Jiale Yao
  2026-09-28  8:54 ` [PATCH v3 1/3] ext2: " Jiale Yao
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Jiale Yao @ 2026-09-28  8:54 UTC (permalink / raw)
  To: Namjae Jeon, Sungjong Seo, Yuezhang Mo, Jan Kara, Hyunchul Lee,
	Ritesh Harjani (IBM),
	Darrick J. Wong, exfat, linux-kernel, linux-ext4, ntfs
  Cc: Jiale Yao

An asynchronous direct write can remain in flight after its submitting
thread releases the inode lock.  If a buffered write dirties page cache
in the meantime, the direct write can complete post-I/O invalidation after
the pages become dirty.  The invalidation then reports a page cache
invalidation failure and records -EIO in the mapping error sequence.  A
later fsync() returns -EIO.

Commit 15cdefd0c0522f9d5e12d947fa04f4c11649b699 ("ext4: drain
in-flight DIO before buffered write fallback") fixed this race in ext4.
The same ordering is missing from the buffered fallback paths in ext2,
NTFS, and exFAT, and from the regular buffered-write path in exFAT.

This series adds inode_dio_wait() before these paths dirty page cache.
Each patch fixes one filesystem and remains independently buildable.  The
NTFS patch also avoids entering the blocking fallback for IOCB_NOWAIT
requests: it returns -EAGAIN if DIO made no progress and preserves a
positive result after a partial direct write.

A reproducer using concurrent AIO direct writes and buffered fallback
triggered the following warning on all three filesystems and made a
subsequent fsync() return -EIO:

  Page cache invalidation failure on direct I/O.  Possible data corruption
  due to collision with buffered I/O!

Changes in v3:
- Add inode_dio_wait() to both the regular and fallback buffered-write
  paths in exFAT, and move the explanatory comment to
  exfat_file_write_iter(), as requested by Chi Zhiling.
- Add Baolin Liu's Reviewed-by tag to the NTFS patch.

Changes in v2:
- Handle IOCB_NOWAIT before the potentially blocking NTFS fallback,
  returning -EAGAIN before any bytes are written and preserving a positive
  short-write result otherwise, as requested in review.

Jiale Yao (3):
  ext2: drain in-flight DIO before buffered write fallback
  ntfs: drain in-flight DIO before buffered write fallback
  exfat: drain in-flight DIO before buffered writes

 fs/exfat/file.c | 12 ++++++++++--
 fs/ext2/file.c  |  7 +++++++
 fs/ntfs/file.c  | 13 +++++++++++++
 3 files changed, 30 insertions(+), 2 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-10-03  9:32 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-28  8:54 [PATCH v3 0/3] fs: drain in-flight DIO before buffered write fallback Jiale Yao
2026-09-28  8:54 ` [PATCH v3 1/3] ext2: " Jiale Yao
2026-09-28  8:54 ` [PATCH v3 2/3] ntfs: " Jiale Yao
2026-09-28  8:54 ` [PATCH v3 3/3] exfat: drain in-flight DIO before buffered writes Jiale Yao
2026-10-03  1:17   ` Chi Zhiling
2026-10-03  9:32     ` jiale yao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®