From 751ca2b0ec18d18226557882337baa33a5a4a202 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Wed, 3 Jul 2024 14:22:04 -0700 Subject: [PATCH] fixup --- libxfs/defer_item.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/libxfs/defer_item.c b/libxfs/defer_item.c index b3f64e921..170b9023c 100644 --- a/libxfs/defer_item.c +++ b/libxfs/defer_item.c @@ -86,6 +86,11 @@ xfs_extent_free_defer_add( struct xfs_mount *mp = tp->t_mountp; if (xfs_efi_is_realtime(xefi)) { + xfs_rgnumber_t rgno; + + rgno = xfs_rtb_to_rgno(mp, xefi->xefi_startblock); + xefi->xefi_rtg = xfs_rtgroup_get(mp, rgno); + *dfpp = xfs_defer_add(tp, &xefi->xefi_list, &xfs_rtextent_free_defer_type); return; @@ -163,6 +168,19 @@ const struct xfs_defer_op_type xfs_extent_free_defer_type = { .cancel_item = xfs_extent_free_cancel_item, }; +/* Sort bmap items by rtgroup for efficiency. */ +static int +xfs_rtextent_free_diff_items( + void *priv, + const struct list_head *a, + const struct list_head *b) +{ + struct xfs_extent_free_item *ra = xefi_entry(a); + struct xfs_extent_free_item *rb = xefi_entry(b); + + return ra->xefi_rtg->rtg_rgno - rb->xefi_rtg->rtg_rgno; +} + static struct xfs_log_item * xfs_rtextent_free_create_intent( struct xfs_trans *tp, @@ -170,6 +188,10 @@ xfs_rtextent_free_create_intent( unsigned int count, bool sort) { + struct xfs_mount *mp = tp->t_mountp; + + if (sort) + list_sort(mp, items, xfs_rtextent_free_diff_items); return NULL; } @@ -180,6 +202,7 @@ xfs_rtextent_free_cancel_item( { struct xfs_extent_free_item *xefi = xefi_entry(item); + xfs_rtgroup_put(xefi->xefi_rtg); kmem_cache_free(xfs_extfree_item_cache, xefi); } -- 2.50.1