]> git.itanic.dy.fi Git - linux-stable/commitdiff
xfs: pass the defer ops instead of type to xfs_defer_start_recovery
authorChristoph Hellwig <hch@lst.de>
Thu, 14 Dec 2023 05:16:32 +0000 (06:16 +0100)
committerChandan Babu R <chandanbabu@kernel.org>
Thu, 14 Dec 2023 05:43:38 +0000 (11:13 +0530)
xfs_defer_start_recovery is only called from xlog_recover_intent_item,
and the callers of that all have the actual xfs_defer_ops_type operation
vector at hand.  Pass that directly instead of looking it up from the
defer_op_types table.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
fs/xfs/libxfs/xfs_defer.c
fs/xfs/libxfs/xfs_defer.h
fs/xfs/libxfs/xfs_log_recover.h
fs/xfs/xfs_attr_item.c
fs/xfs/xfs_bmap_item.c
fs/xfs/xfs_extfree_item.c
fs/xfs/xfs_log_recover.c
fs/xfs/xfs_refcount_item.c
fs/xfs/xfs_rmap_item.c

index e70881ae5cc59778b9f50c3bdf8af9d5336b96e6..dd964bf825eb89e93969a3b1eb3d898971074332 100644 (file)
@@ -894,14 +894,14 @@ xfs_defer_add_barrier(
 void
 xfs_defer_start_recovery(
        struct xfs_log_item             *lip,
-       enum xfs_defer_ops_type         dfp_type,
-       struct list_head                *r_dfops)
+       struct list_head                *r_dfops,
+       const struct xfs_defer_op_type  *ops)
 {
        struct xfs_defer_pending        *dfp;
 
        dfp = kmem_cache_zalloc(xfs_defer_pending_cache,
                        GFP_NOFS | __GFP_NOFAIL);
-       dfp->dfp_ops = defer_op_types[dfp_type];
+       dfp->dfp_ops = ops;
        dfp->dfp_intent = lip;
        INIT_LIST_HEAD(&dfp->dfp_work);
        list_add_tail(&dfp->dfp_list, r_dfops);
index 957a06278e880d94fb620c602f0a250b69552797..60de91b66392256b4a79702777a0df6e2abbf63e 100644 (file)
@@ -147,7 +147,7 @@ void xfs_defer_ops_capture_abort(struct xfs_mount *mp,
 void xfs_defer_resources_rele(struct xfs_defer_resources *dres);
 
 void xfs_defer_start_recovery(struct xfs_log_item *lip,
-               enum xfs_defer_ops_type dfp_type, struct list_head *r_dfops);
+               struct list_head *r_dfops, const struct xfs_defer_op_type *ops);
 void xfs_defer_cancel_recovery(struct xfs_mount *mp,
                struct xfs_defer_pending *dfp);
 int xfs_defer_finish_recovery(struct xfs_mount *mp,
index c8e5d912895bcdf0320cddee4f3fc52049302e47..9fe7a9564bca9621f015fa89e5eb4c46b1d3cc14 100644 (file)
@@ -11,6 +11,7 @@
  * define how recovery should work for that type of log item.
  */
 struct xlog_recover_item;
+struct xfs_defer_op_type;
 
 /* Sorting hat for log items as they're read in. */
 enum xlog_recover_reorder {
@@ -156,7 +157,7 @@ xlog_recover_resv(const struct xfs_trans_res *r)
 struct xfs_defer_pending;
 
 void xlog_recover_intent_item(struct xlog *log, struct xfs_log_item *lip,
-               xfs_lsn_t lsn, unsigned int dfp_type);
+               xfs_lsn_t lsn, const struct xfs_defer_op_type *ops);
 int xlog_recover_finish_intent(struct xfs_trans *tp,
                struct xfs_defer_pending *dfp);
 
index beae2de824507bf636a969ccd4edb9c1c64504a3..9e02111bd89010ab572c4e6d41ca71465d98f142 100644 (file)
@@ -759,7 +759,7 @@ xlog_recover_attri_commit_pass2(
        memcpy(&attrip->attri_format, attri_formatp, len);
 
        xlog_recover_intent_item(log, &attrip->attri_item, lsn,
-                       XFS_DEFER_OPS_TYPE_ATTR);
+                       &xfs_attr_defer_type);
        xfs_attri_log_nameval_put(nv);
        return 0;
 }
index f43abf0b64864141ccf8bb5c5aa889d6f2c14511..52fb8a148b7dcb1450ad4fabbc9223a7cf271f08 100644 (file)
@@ -650,7 +650,7 @@ xlog_recover_bui_commit_pass2(
        atomic_set(&buip->bui_next_extent, bui_formatp->bui_nextents);
 
        xlog_recover_intent_item(log, &buip->bui_item, lsn,
-                       XFS_DEFER_OPS_TYPE_BMAP);
+                       &xfs_bmap_update_defer_type);
        return 0;
 }
 
index e67907a379c8e8efbcaf9a591bb95f96a9c72915..1d1185fca6a58e4ea9ec8f12c9a47798bc020549 100644 (file)
@@ -747,7 +747,7 @@ xlog_recover_efi_commit_pass2(
        atomic_set(&efip->efi_next_extent, efi_formatp->efi_nextents);
 
        xlog_recover_intent_item(log, &efip->efi_item, lsn,
-                       XFS_DEFER_OPS_TYPE_FREE);
+                       &xfs_extent_free_defer_type);
        return 0;
 }
 
index c18692af2c651c3c5511e8291a5c1bb56509fd87..1251c81e55f9820b77b287b28dd24f9a826451b9 100644 (file)
@@ -1942,11 +1942,11 @@ xlog_recover_intent_item(
        struct xlog                     *log,
        struct xfs_log_item             *lip,
        xfs_lsn_t                       lsn,
-       unsigned int                    dfp_type)
+       const struct xfs_defer_op_type  *ops)
 {
        ASSERT(xlog_item_is_intent(lip));
 
-       xfs_defer_start_recovery(lip, dfp_type, &log->r_dfops);
+       xfs_defer_start_recovery(lip, &log->r_dfops, ops);
 
        /*
         * Insert the intent into the AIL directly and drop one reference so
index b08839550f34a385fbb56fe08ba2526f74ce1915..20ad8086da60be72e79411d71b8015c68bb4dd39 100644 (file)
@@ -605,7 +605,7 @@ xlog_recover_cui_commit_pass2(
        atomic_set(&cuip->cui_next_extent, cui_formatp->cui_nextents);
 
        xlog_recover_intent_item(log, &cuip->cui_item, lsn,
-                       XFS_DEFER_OPS_TYPE_REFCOUNT);
+                       &xfs_refcount_update_defer_type);
        return 0;
 }
 
index 65b432eb5d025d8ed36d54a5cf740b345514bb99..79ad0087aecaf52ea9853c788a72e71c90ab5a45 100644 (file)
@@ -658,7 +658,7 @@ xlog_recover_rui_commit_pass2(
        atomic_set(&ruip->rui_next_extent, rui_formatp->rui_nextents);
 
        xlog_recover_intent_item(log, &ruip->rui_item, lsn,
-                       XFS_DEFER_OPS_TYPE_RMAP);
+                       &xfs_rmap_update_defer_type);
        return 0;
 }