Re: [PATCH] xfs: fix fallback data device flush for realtime inodes

Hongling Zeng <[email protected]> Thu, 30 Jul 2026 09:47:18 +0800
Newsgroups org.kernel.vger.linux-xfs,org.kernel.vger.linux-kernel,org.kernel.vger.stable
Message-ID <[email protected]>
在 2026年07月29日 22:28, Christoph Hellwig 写道:
> On Wed, Jul 29, 2026 at 04:59:28PM +0800, Hongling Zeng wrote:
>> I understand that for realtime inodes with a separate RT device, the RT
>> device is flushed before xfs_fsync_flush_log(), and therefore the
>> post-log fallback path is intentionally limited to data-device files.
>>
>> The only case I was worried about is whether it is possible to have a
>> realtime inode while mp->m_rtdev_targp == mp->m_ddev_targp, i.e. the
>> realtime data target is effectively the data device. In that case both
>> the early RT-device flush and the post-log fallback appear to be skipped
>> when log_flushed == 0.
> So the internal RT device does exist, but only when using the zoned
> allocator.  And the zoned allocator doesn't support overwrites but
> always writes out of place, i.e., every data write must log updates
> to the inode and bmap tree from the I/O completion handler.
>
> That being said I agree with your that the current handling is
> inconsistent.  Maybe you can update the commit log based on that?Also
> maybe rename data_tarp to something like file_targp as data is to close
> to the "data device" name for the main device?
Thanks for the explanation.

I see now that the internal RT device case only exists with the zoned
allocator, and that zoned writes are out-of-place and therefore always
log inode/bmap updates from I/O completion.  So the overwrite/no-metadata
case I described is not the right justification.

I agree that the current code is still inconsistent because the fallback
flush is expressed as "non-RT inode on the data device" rather than in
terms of the inode's actual file data target.

I'll update the commit log accordingly and rename data_targp to
file_targp as suggested.