On Wed, Dec 11, 2024 at 09:54:54AM +0100, Christoph Hellwig wrote: > Make xfs_rtextent_free_finish_item call into the zoned allocator to free > blocks on zoned RT devices. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Looks good, Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --D > --- > fs/xfs/xfs_extfree_item.c | 35 +++++++++++++++++++++++++---------- > 1 file changed, 25 insertions(+), 10 deletions(-) > > diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c > index a25c713ff888..777438b853da 100644 > --- a/fs/xfs/xfs_extfree_item.c > +++ b/fs/xfs/xfs_extfree_item.c > @@ -29,6 +29,7 @@ > #include "xfs_inode.h" > #include "xfs_rtbitmap.h" > #include "xfs_rtgroup.h" > +#include "xfs_zone_alloc.h" > > struct kmem_cache *xfs_efi_cache; > struct kmem_cache *xfs_efd_cache; > @@ -767,21 +768,35 @@ xfs_rtextent_free_finish_item( > > trace_xfs_extent_free_deferred(mp, xefi); > > - if (!(xefi->xefi_flags & XFS_EFI_CANCELLED)) { > - if (*rtgp != to_rtg(xefi->xefi_group)) { > - *rtgp = to_rtg(xefi->xefi_group); > - xfs_rtgroup_lock(*rtgp, XFS_RTGLOCK_BITMAP); > - xfs_rtgroup_trans_join(tp, *rtgp, > - XFS_RTGLOCK_BITMAP); > - } > - error = xfs_rtfree_blocks(tp, *rtgp, > - xefi->xefi_startblock, xefi->xefi_blockcount); > + if (xefi->xefi_flags & XFS_EFI_CANCELLED) > + goto done; > + > + if (*rtgp != to_rtg(xefi->xefi_group)) { > + unsigned int lock_flags; > + > + if (xfs_has_zoned(mp)) > + lock_flags = XFS_RTGLOCK_RMAP; > + else > + lock_flags = XFS_RTGLOCK_BITMAP; > + > + *rtgp = to_rtg(xefi->xefi_group); > + xfs_rtgroup_lock(*rtgp, lock_flags); > + xfs_rtgroup_trans_join(tp, *rtgp, lock_flags); > } > + > + if (xfs_has_zoned(mp)) { > + error = xfs_zone_free_blocks(tp, *rtgp, xefi->xefi_startblock, > + xefi->xefi_blockcount); > + } else { > + error = xfs_rtfree_blocks(tp, *rtgp, xefi->xefi_startblock, > + xefi->xefi_blockcount); > + } > + > if (error == -EAGAIN) { > xfs_efd_from_efi(efdp); > return error; > } > - > +done: > xfs_efd_add_extent(efdp, xefi); > xfs_extent_free_cancel_item(item); > return error; > -- > 2.45.2 > >