]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
fixup
authorDarrick J. Wong <djwong@kernel.org>
Wed, 3 Jul 2024 21:22:04 +0000 (14:22 -0700)
committerChristoph Hellwig <hch@lst.de>
Tue, 6 Aug 2024 12:53:49 +0000 (05:53 -0700)
libxfs/defer_item.c

index b3f64e92131c4861708ae81a35cd20e7b241a448..170b9023cee99e0eea308426f85f35de797bb1a3 100644 (file)
@@ -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);
 }