Re: [PATCH v4 3/3] exfat: drain in-flight DIO before buffered writes

From: Namjae Jeon

Date: Tue Oct 06 2026 - 09:05:32 EST


On Sat, Oct 3, 2026 at 6:30 PM Jiale Yao <yaojiale02@xxxxxxx> wrote:
>
> An asynchronous direct write can remain in flight after the inode lock is
> released. If a buffered operation dirties page cache while the direct
> write is still pending, the direct write's post-I/O invalidation can find
> the dirty pages, report a page cache invalidation failure, and record -EIO
> in the mapping error sequence. A later fsync() therefore returns -EIO.
>
> Commit 15cdefd0c0522f9d5e12d947fa04f4c11649b699 ("ext4: drain
> in-flight DIO before buffered write fallback") fixed the same race in
> ext4. ExFAT does not drain in-flight DIO before a regular buffered write,
> the buffered fallback after iomap_dio_rw() returns -ENOTBLK or a short
> write, or the page-cache operations used to extend valid_size.
>
> Wait for in-flight DIO before these paths can dirty page cache.
>
> A reproducer using concurrent AIO direct writes and buffered fallback
> triggered the following warning 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!
>
> Fixes: 867b9c96dc83 ("exfat: add iomap direct I/O support")
> Link: https://lore.kernel.org/r/20260629113827.4074335-3-libaokun@xxxxxxxxxxxxxxxxx
> Signed-off-by: Jiale Yao <yaojiale02@xxxxxxx>
Applied it to #ntfs-next.
Thanks!