]> git.itanic.dy.fi Git - linux-stable/commitdiff
xfs: pass the defer ops directly to xfs_defer_add
authorChristoph Hellwig <hch@lst.de>
Wed, 13 Dec 2023 09:06:33 +0000 (10:06 +0100)
committerChandan Babu R <chandanbabu@kernel.org>
Thu, 14 Dec 2023 05:43:52 +0000 (11:13 +0530)
Pass a pointer to the xfs_defer_op_type structure to xfs_defer_add and
remove the indirection through the xfs_defer_ops_type enum and a global
table of all possible operations.

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_alloc.c
fs/xfs/libxfs/xfs_attr.c
fs/xfs/libxfs/xfs_bmap.c
fs/xfs/libxfs/xfs_defer.c
fs/xfs/libxfs/xfs_defer.h
fs/xfs/libxfs/xfs_refcount.c
fs/xfs/libxfs/xfs_rmap.c

index 4940f9377f21a14a0fc018c8b448e0454768e65e..60c2c18e8e54f9c028721552d202f886b8968116 100644 (file)
@@ -2514,7 +2514,7 @@ xfs_defer_agfl_block(
        trace_xfs_agfl_free_defer(mp, agno, 0, agbno, 1);
 
        xfs_extent_free_get_group(mp, xefi);
-       xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_AGFL_FREE, &xefi->xefi_list);
+       xfs_defer_add(tp, &xefi->xefi_list, &xfs_agfl_free_defer_type);
        return 0;
 }
 
@@ -2578,7 +2578,7 @@ xfs_defer_extent_free(
                        XFS_FSB_TO_AGBNO(tp->t_mountp, bno), len);
 
        xfs_extent_free_get_group(mp, xefi);
-       *dfpp = xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_FREE, &xefi->xefi_list);
+       *dfpp = xfs_defer_add(tp, &xefi->xefi_list, &xfs_extent_free_defer_type);
        return 0;
 }
 
index 4fed0c87a968ab1e5216ec67ddc28347122b3e73..fa49c795f40745ec52d8568c6709efdb9ad10fb8 100644 (file)
@@ -906,7 +906,7 @@ xfs_attr_defer_add(
                ASSERT(0);
        }
 
-       xfs_defer_add(args->trans, XFS_DEFER_OPS_TYPE_ATTR, &new->xattri_list);
+       xfs_defer_add(args->trans, &new->xattri_list, &xfs_attr_defer_type);
        trace_xfs_attr_defer_add(new->xattri_dela_state, args->dp);
 }
 
index ca6614f4eac50a072a4c7aeb0086370abf96b366..e308d2f44a3c310d988e7e8bbfc8821414653404 100644 (file)
@@ -6091,7 +6091,7 @@ __xfs_bmap_add(
        bi->bi_bmap = *bmap;
 
        xfs_bmap_update_get_group(tp->t_mountp, bi);
-       xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_BMAP, &bi->bi_list);
+       xfs_defer_add(tp, &bi->bi_list, &xfs_bmap_update_defer_type);
        return 0;
 }
 
index dd964bf825eb89e93969a3b1eb3d898971074332..ca7f0ac0489604e79ff4f1b74d612a80f12eaf3c 100644 (file)
@@ -235,16 +235,6 @@ static const struct xfs_defer_op_type xfs_barrier_defer_type = {
        .cancel_item    = xfs_defer_barrier_cancel_item,
 };
 
-static const struct xfs_defer_op_type *defer_op_types[] = {
-       [XFS_DEFER_OPS_TYPE_BMAP]       = &xfs_bmap_update_defer_type,
-       [XFS_DEFER_OPS_TYPE_REFCOUNT]   = &xfs_refcount_update_defer_type,
-       [XFS_DEFER_OPS_TYPE_RMAP]       = &xfs_rmap_update_defer_type,
-       [XFS_DEFER_OPS_TYPE_FREE]       = &xfs_extent_free_defer_type,
-       [XFS_DEFER_OPS_TYPE_AGFL_FREE]  = &xfs_agfl_free_defer_type,
-       [XFS_DEFER_OPS_TYPE_ATTR]       = &xfs_attr_defer_type,
-       [XFS_DEFER_OPS_TYPE_BARRIER]    = &xfs_barrier_defer_type,
-};
-
 /* Create a log intent done item for a log intent item. */
 static inline void
 xfs_defer_create_done(
@@ -847,14 +837,12 @@ xfs_defer_alloc(
 struct xfs_defer_pending *
 xfs_defer_add(
        struct xfs_trans                *tp,
-       enum xfs_defer_ops_type         type,
-       struct list_head                *li)
+       struct list_head                *li,
+       const struct xfs_defer_op_type  *ops)
 {
        struct xfs_defer_pending        *dfp = NULL;
-       const struct xfs_defer_op_type  *ops = defer_op_types[type];
 
        ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES);
-       BUILD_BUG_ON(ARRAY_SIZE(defer_op_types) != XFS_DEFER_OPS_TYPE_MAX);
 
        dfp = xfs_defer_find_last(tp, ops);
        if (!dfp || !xfs_defer_can_append(dfp, ops))
index 60de91b66392256b4a79702777a0df6e2abbf63e..18a9fb92dde8e6d990761bfc42da96b6d4a3f0cd 100644 (file)
@@ -10,20 +10,6 @@ struct xfs_btree_cur;
 struct xfs_defer_op_type;
 struct xfs_defer_capture;
 
-/*
- * Header for deferred operation list.
- */
-enum xfs_defer_ops_type {
-       XFS_DEFER_OPS_TYPE_BMAP,
-       XFS_DEFER_OPS_TYPE_REFCOUNT,
-       XFS_DEFER_OPS_TYPE_RMAP,
-       XFS_DEFER_OPS_TYPE_FREE,
-       XFS_DEFER_OPS_TYPE_AGFL_FREE,
-       XFS_DEFER_OPS_TYPE_ATTR,
-       XFS_DEFER_OPS_TYPE_BARRIER,
-       XFS_DEFER_OPS_TYPE_MAX,
-};
-
 /*
  * Save a log intent item and a list of extents, so that we can replay
  * whatever action had to happen to the extent list and file the log done
@@ -51,8 +37,8 @@ struct xfs_defer_pending {
 void xfs_defer_item_pause(struct xfs_trans *tp, struct xfs_defer_pending *dfp);
 void xfs_defer_item_unpause(struct xfs_trans *tp, struct xfs_defer_pending *dfp);
 
-struct xfs_defer_pending *xfs_defer_add(struct xfs_trans *tp,
-               enum xfs_defer_ops_type type, struct list_head *h);
+struct xfs_defer_pending *xfs_defer_add(struct xfs_trans *tp, struct list_head *h,
+               const struct xfs_defer_op_type *ops);
 int xfs_defer_finish_noroll(struct xfs_trans **tp);
 int xfs_defer_finish(struct xfs_trans **tp);
 int xfs_defer_finish_one(struct xfs_trans *tp, struct xfs_defer_pending *dfp);
index 3702b4a071100dd22f8ef78560426cda2eaea2e1..5b039cd022e0735892a1518281f1ef21b7dc6a1d 100644 (file)
@@ -1458,7 +1458,7 @@ __xfs_refcount_add(
        ri->ri_blockcount = blockcount;
 
        xfs_refcount_update_get_group(tp->t_mountp, ri);
-       xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_REFCOUNT, &ri->ri_list);
+       xfs_defer_add(tp, &ri->ri_list, &xfs_refcount_update_defer_type);
 }
 
 /*
index fbb0b26374635259aaa2281d511630b92607f492..76bf7f48cb5acf19f00f04307b625afc017364cd 100644 (file)
@@ -2567,7 +2567,7 @@ __xfs_rmap_add(
        ri->ri_bmap = *bmap;
 
        xfs_rmap_update_get_group(tp->t_mountp, ri);
-       xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_RMAP, &ri->ri_list);
+       xfs_defer_add(tp, &ri->ri_list, &xfs_rmap_update_defer_type);
 }
 
 /* Map an extent into a file. */