]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: move xfs_extent_free_defer_add to xfs_extfree_item.c
authorDarrick J. Wong <djwong@kernel.org>
Tue, 2 Jul 2024 18:22:56 +0000 (11:22 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 2 Jul 2024 18:37:03 +0000 (11:37 -0700)
Move the code that adds the incore xfs_extent_free_item deferred work
data to a transaction to live with the EFI log item code.  This means
that the allocator code no longer has to know about the inner workings
of the EFI log items.

As a consequence, we can get rid of the _{get,put}_group helpers.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/libxfs/xfs_alloc.c
fs/xfs/libxfs/xfs_alloc.h
fs/xfs/xfs_extfree_item.c
fs/xfs/xfs_extfree_item.h

index fecfd61f5de84dfce98f98da74ed0a6e61ee7e77..ef4f5972da5dc69ea5fbc3bd0d6b7250a4d43afe 100644 (file)
@@ -27,6 +27,7 @@
 #include "xfs_ag_resv.h"
 #include "xfs_bmap.h"
 #include "xfs_health.h"
+#include "xfs_extfree_item.h"
 
 struct kmem_cache      *xfs_extfree_item_cache;
 
@@ -2552,16 +2553,7 @@ xfs_defer_extent_free(
                xefi->xefi_owner = XFS_RMAP_OWN_NULL;
        }
 
-       trace_xfs_extent_free_defer(mp, xefi);
-
-       xfs_extent_free_get_group(mp, xefi);
-
-       if (xefi->xefi_agresv == XFS_AG_RESV_AGFL)
-               *dfpp = xfs_defer_add(tp, &xefi->xefi_list,
-                               &xfs_agfl_free_defer_type);
-       else
-               *dfpp = xfs_defer_add(tp, &xefi->xefi_list,
-                               &xfs_extent_free_defer_type);
+       xfs_extent_free_defer_add(tp, xefi, dfpp);
        return 0;
 }
 
index 7f51b3cb03492cdbe757e0d26c7dc01d9c74665c..fae170825be06463b93d616fc9178f11cf533776 100644 (file)
@@ -256,9 +256,6 @@ struct xfs_extent_free_item {
        enum xfs_ag_resv_type   xefi_agresv;
 };
 
-void xfs_extent_free_get_group(struct xfs_mount *mp,
-               struct xfs_extent_free_item *xefi);
-
 #define XFS_EFI_SKIP_DISCARD   (1U << 0) /* don't issue discard */
 #define XFS_EFI_ATTR_FORK      (1U << 1) /* freeing attr fork block */
 #define XFS_EFI_BMBT_BLOCK     (1U << 2) /* freeing bmap btree block */
index c755037a64d20d175c39f5bd2ab25a4bb10a54c9..abffc74a924f77445d2573628e5c836622ee4ff6 100644 (file)
@@ -436,21 +436,24 @@ xfs_extent_free_create_done(
        return &efdp->efd_item;
 }
 
-/* Take a passive ref to the AG containing the space we're freeing. */
+/* Add this deferred EFI to the transaction. */
 void
-xfs_extent_free_get_group(
-       struct xfs_mount                *mp,
-       struct xfs_extent_free_item     *xefi)
+xfs_extent_free_defer_add(
+       struct xfs_trans                *tp,
+       struct xfs_extent_free_item     *xefi,
+       struct xfs_defer_pending        **dfpp)
 {
-       xefi->xefi_pag = xfs_perag_intent_get(mp, xefi->xefi_startblock);
-}
+       struct xfs_mount                *mp = tp->t_mountp;
 
-/* Release a passive AG ref after some freeing work. */
-static inline void
-xfs_extent_free_put_group(
-       struct xfs_extent_free_item     *xefi)
-{
-       xfs_perag_intent_put(xefi->xefi_pag);
+       trace_xfs_extent_free_defer(mp, xefi);
+
+       xefi->xefi_pag = xfs_perag_intent_get(mp, xefi->xefi_startblock);
+       if (xefi->xefi_agresv == XFS_AG_RESV_AGFL)
+               *dfpp = xfs_defer_add(tp, &xefi->xefi_list,
+                               &xfs_agfl_free_defer_type);
+       else
+               *dfpp = xfs_defer_add(tp, &xefi->xefi_list,
+                               &xfs_extent_free_defer_type);
 }
 
 /* Cancel a free extent. */
@@ -460,7 +463,7 @@ xfs_extent_free_cancel_item(
 {
        struct xfs_extent_free_item     *xefi = xefi_entry(item);
 
-       xfs_extent_free_put_group(xefi);
+       xfs_perag_intent_put(xefi->xefi_pag);
        kmem_cache_free(xfs_extfree_item_cache, xefi);
 }
 
@@ -575,7 +578,7 @@ xfs_efi_recover_work(
        xefi->xefi_blockcount = extp->ext_len;
        xefi->xefi_agresv = XFS_AG_RESV_NONE;
        xefi->xefi_owner = XFS_RMAP_OWN_UNKNOWN;
-       xfs_extent_free_get_group(mp, xefi);
+       xefi->xefi_pag = xfs_perag_intent_get(mp, extp->ext_start);
 
        xfs_defer_add_item(dfp, &xefi->xefi_list);
 }
index da6a5afa607cf4ed70770a80f35dfc1b1e4a5715..41b7c43060799b3a91ec67e85046a9f3a1210880 100644 (file)
@@ -88,4 +88,10 @@ xfs_efd_log_item_sizeof(
 extern struct kmem_cache       *xfs_efi_cache;
 extern struct kmem_cache       *xfs_efd_cache;
 
+struct xfs_extent_free_item;
+
+void xfs_extent_free_defer_add(struct xfs_trans *tp,
+               struct xfs_extent_free_item *xefi,
+               struct xfs_defer_pending **dfpp);
+
 #endif /* __XFS_EXTFREE_ITEM_H__ */