Re: [PATCH v3] xfs: use file target for post-log fsync fallback flush
From: Christoph Hellwig
Date: Thu Jul 30 2026 - 04:54:27 EST
On Thu, Jul 30, 2026 at 04:42:36PM +0800, Hongling Zeng wrote:
> xfs_file_fsync() has a fallback flush for the case where the log force
> was a no-op, for example fdatasync/O_DSYNC writes that do not require
> metadata updates. The current fallback path is expressed in terms of the
> main data device and explicitly excludes realtime inodes.
>
> Realtime files with a separate realtime device are flushed before the log
> force, because their data must reach stable storage before the log commit.
> For the internal realtime device used by the zoned allocator, writes are
> out-of-place and update inode and bmap metadata from I/O completion, so
> the overwrite-without-metadata-update case does not apply in the same way.
>
> Even so, the current fallback condition is inconsistent because it is
> expressed as "non-realtime inode on the main data device" rather than in
> terms of the inode's actual file data target.
>
> Use xfs_inode_buftarg() to obtain the target that stores this file's
> data, and issue the fallback flush when the log force did not flush
> anything and the log target is the same as that file target.
>
> This preserves existing behavior for regular files while making the
> fallback logic consistent for files whose data target is selected by the
> inode.
>
> Fixes: bdc03eb5f98f ("xfs: allow internal RT devices for zoned mode")
> Signed-off-by: Hongling Zeng <zenghongling@xxxxxxxxxx>
> Suggested-by: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Looks good:
Reviewed-by: Christoph Hellwig <hch@xxxxxx>