On Thu, Jun 05, 2025 at 01:33:54PM -0400, Brian Foster wrote: > Refactor and tweak the IOMAP_ZERO logic in preparation to support > filling the folio batch for unwritten mappings. Drop the superfluous > imap offset check since the hole case has already been filtered out. > Split the the delalloc case handling into a sub-branch, and always > trim the imap to the requested offset/count so it can be more easily > used to bound the range to lookup in pagecache. > > Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx> > Reviewed-by: Christoph Hellwig <hch@xxxxxx> Yeah, makes sense to me. Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --D > --- > fs/xfs/xfs_iomap.c | 17 ++++++++--------- > 1 file changed, 8 insertions(+), 9 deletions(-) > > diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c > index ff05e6b1b0bb..b5cf5bc6308d 100644 > --- a/fs/xfs/xfs_iomap.c > +++ b/fs/xfs/xfs_iomap.c > @@ -1756,21 +1756,20 @@ xfs_buffered_write_iomap_begin( > } > > /* > - * For zeroing, trim a delalloc extent that extends beyond the EOF > - * block. If it starts beyond the EOF block, convert it to an > + * For zeroing, trim extents that extend beyond the EOF block. If a > + * delalloc extent starts beyond the EOF block, convert it to an > * unwritten extent. > */ > - if ((flags & IOMAP_ZERO) && imap.br_startoff <= offset_fsb && > - isnullstartblock(imap.br_startblock)) { > + if (flags & IOMAP_ZERO) { > xfs_fileoff_t eof_fsb = XFS_B_TO_FSB(mp, XFS_ISIZE(ip)); > > - if (offset_fsb >= eof_fsb) > + if (isnullstartblock(imap.br_startblock) && > + offset_fsb >= eof_fsb) > goto convert_delay; > - if (end_fsb > eof_fsb) { > + if (offset_fsb < eof_fsb && end_fsb > eof_fsb) > end_fsb = eof_fsb; > - xfs_trim_extent(&imap, offset_fsb, > - end_fsb - offset_fsb); > - } > + > + xfs_trim_extent(&imap, offset_fsb, end_fsb - offset_fsb); > } > > /* > -- > 2.49.0 > >