mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Jiale Yao <yaojiale02@163.com>
To: Namjae Jeon <linkinjeon@kernel.org>,
	Sungjong Seo <sj1557.seo@samsung.com>,
	Yuezhang Mo <yuezhang.mo@sony.com>, Jan Kara <jack@suse.com>,
	Hyunchul Lee <hyc.lee@gmail.com>,
	"Ritesh Harjani (IBM)" <ritesh.list@gmail.com>,
	"Darrick J. Wong" <djwong@kernel.org>,
	exfat@lists.linux.dev, linux-kernel@vger.kernel.org,
	linux-ext4@vger.kernel.org, ntfs@lists.linux.dev
Cc: Jiale Yao <yaojiale02@163.com>
Subject: [PATCH v4 0/3] fs: drain in-flight DIO before buffered write fallback
Date: Sat,  3 Oct 2026 17:30:32 +0800	[thread overview]
Message-ID: <20261003093035.532916-1-yaojiale02@163.com> (raw)

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 and valid-size
extension paths 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 v4:
- Add inode_dio_wait() to exfat_extend_valid_size(), as requested by
  Chi Zhiling.

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 | 14 ++++++++++++--
 fs/ext2/file.c  |  7 +++++++
 fs/ntfs/file.c  | 13 +++++++++++++
 3 files changed, 32 insertions(+), 2 deletions(-)

-- 
2.34.1


             reply	other threads:[~2026-10-03  9:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-03  9:30 Jiale Yao [this message]
2026-10-03  9:30 ` [PATCH v4 1/3] ext2: " Jiale Yao
2026-10-03  9:30 ` [PATCH v4 2/3] ntfs: " Jiale Yao
2026-10-06  7:45   ` Hyunchul Lee
2026-10-06 13:30   ` Namjae Jeon
2026-10-03  9:30 ` [PATCH v4 3/3] exfat: drain in-flight DIO before buffered writes Jiale Yao
2026-10-06 13:00   ` Namjae Jeon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261003093035.532916-1-yaojiale02@163.com \
    --to=yaojiale02@163.com \
    --cc=djwong@kernel.org \
    --cc=exfat@lists.linux.dev \
    --cc=hyc.lee@gmail.com \
    --cc=jack@suse.com \
    --cc=linkinjeon@kernel.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ntfs@lists.linux.dev \
    --cc=ritesh.list@gmail.com \
    --cc=sj1557.seo@samsung.com \
    --cc=yuezhang.mo@sony.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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®