On Wed, Apr 09, 2025 at 09:55:28AM +0200, Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Makes sense to me Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --D > --- > db/convert.c | 6 +++++- > include/xfs_mount.h | 9 +++++++++ > 2 files changed, 14 insertions(+), 1 deletion(-) > > diff --git a/db/convert.c b/db/convert.c > index 47d3e86fdc4e..3eec4f224f51 100644 > --- a/db/convert.c > +++ b/db/convert.c > @@ -44,10 +44,14 @@ xfs_daddr_to_rgno( > struct xfs_mount *mp, > xfs_daddr_t daddr) > { > + struct xfs_groups *g = &mp->m_groups[XG_TYPE_RTG]; > + > if (!xfs_has_rtgroups(mp)) > return 0; > > - return XFS_BB_TO_FSBT(mp, daddr) / mp->m_groups[XG_TYPE_RTG].blocks; > + if (g->has_daddr_gaps) > + return XFS_BB_TO_FSBT(mp, daddr) / (1 << g->blklog); > + return XFS_BB_TO_FSBT(mp, daddr) / g->blocks; > } > > typedef enum { > diff --git a/include/xfs_mount.h b/include/xfs_mount.h > index bf9ebc25fc79..5a714333c16e 100644 > --- a/include/xfs_mount.h > +++ b/include/xfs_mount.h > @@ -47,6 +47,15 @@ struct xfs_groups { > */ > uint8_t blklog; > > + /* > + * Zoned devices can have gaps beyoned the usable capacity of a zone > + * and the end in the LBA/daddr address space. In other words, the > + * hardware equivalent to the RT groups already takes care of the power > + * of 2 alignment for us. In this case the sparse FSB/RTB address space > + * maps 1:1 to the device address space. > + */ > + bool has_daddr_gaps; > + > /* > * Mask to extract the group-relative block number from a FSB. > * For a pre-rtgroups filesystem we pretend to have one very large > -- > 2.47.2 > >