xfs: use xfs_defer_create_done for the relogging operation
authorDarrick J. Wong <djwong@kernel.org>
Thu, 30 Nov 2023 19:44:56 +0000 (11:44 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Thu, 7 Dec 2023 02:45:16 +0000 (18:45 -0800)
Now that we have a helper to handle creating a log intent done item and
updating all the necessary state flags, use it to reduce boilerplate in
the ->iop_relog implementations.

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

index 2871c773a12271d737643dfcc23fdf4b97f55272..63b9960a96e1657a4af079cbeafdc5104f30145c 100644 (file)
@@ -500,7 +500,11 @@ xfs_defer_relog(
 
                trace_xfs_defer_relog_intent((*tpp)->t_mountp, dfp);
                XFS_STATS_INC((*tpp)->t_mountp, defer_relog);
-               dfp->dfp_intent = xfs_trans_item_relog(dfp->dfp_intent, *tpp);
+
+               xfs_defer_create_done(*tpp, dfp);
+               dfp->dfp_intent = xfs_trans_item_relog(dfp->dfp_intent,
+                               dfp->dfp_done, *tpp);
+               dfp->dfp_done = NULL;
        }
 
        if ((*tpp)->t_flags & XFS_TRANS_DIRTY)
index fc199256fc8e1c1106b97f3cabb8c9dad6aefc27..e9813fa64461f466dc68ba5ac7b0954c5a07cd60 100644 (file)
@@ -630,9 +630,9 @@ out_unlock:
 static struct xfs_log_item *
 xfs_attri_item_relog(
        struct xfs_log_item             *intent,
+       struct xfs_log_item             *done_item,
        struct xfs_trans                *tp)
 {
-       struct xfs_attrd_log_item       *attrdp;
        struct xfs_attri_log_item       *old_attrip;
        struct xfs_attri_log_item       *new_attrip;
        struct xfs_attri_log_format     *new_attrp;
@@ -641,10 +641,6 @@ xfs_attri_item_relog(
        old_attrip = ATTRI_ITEM(intent);
        old_attrp = &old_attrip->attri_format;
 
-       tp->t_flags |= XFS_TRANS_DIRTY;
-       attrdp = xfs_trans_get_attrd(tp, old_attrip);
-       set_bit(XFS_LI_DIRTY, &attrdp->attrd_item.li_flags);
-
        /*
         * Create a new log item that shares the same name/value buffer as the
         * old log item.
index 24cf70154a54a5523008cd7b5b8f971f013c217b..ba385c06de5d56b9b6349d49c84937848d528e86 100644 (file)
@@ -572,9 +572,9 @@ xfs_bui_item_match(
 static struct xfs_log_item *
 xfs_bui_item_relog(
        struct xfs_log_item             *intent,
+       struct xfs_log_item             *done_item,
        struct xfs_trans                *tp)
 {
-       struct xfs_bud_log_item         *budp;
        struct xfs_bui_log_item         *buip;
        struct xfs_map_extent           *map;
        unsigned int                    count;
@@ -582,10 +582,6 @@ xfs_bui_item_relog(
        count = BUI_ITEM(intent)->bui_format.bui_nextents;
        map = BUI_ITEM(intent)->bui_format.bui_extents;
 
-       tp->t_flags |= XFS_TRANS_DIRTY;
-       budp = xfs_trans_get_bud(tp, BUI_ITEM(intent));
-       set_bit(XFS_LI_DIRTY, &budp->bud_item.li_flags);
-
        buip = xfs_bui_init(tp->t_mountp);
        memcpy(buip->bui_format.bui_extents, map, count * sizeof(*map));
        atomic_set(&buip->bui_next_extent, count);
index d07cdc3eb80904ee25d6d1140d1c8d9f9d8a91c7..807398479187a2f4346c1ba6e6644e82833cf896 100644 (file)
@@ -691,9 +691,10 @@ xfs_efi_item_match(
 static struct xfs_log_item *
 xfs_efi_item_relog(
        struct xfs_log_item             *intent,
+       struct xfs_log_item             *done_item,
        struct xfs_trans                *tp)
 {
-       struct xfs_efd_log_item         *efdp;
+       struct xfs_efd_log_item         *efdp = EFD_ITEM(done_item);
        struct xfs_efi_log_item         *efip;
        struct xfs_extent               *extp;
        unsigned int                    count;
@@ -701,11 +702,8 @@ xfs_efi_item_relog(
        count = EFI_ITEM(intent)->efi_format.efi_nextents;
        extp = EFI_ITEM(intent)->efi_format.efi_extents;
 
-       tp->t_flags |= XFS_TRANS_DIRTY;
-       efdp = xfs_trans_get_efd(tp, EFI_ITEM(intent), count);
        efdp->efd_next_extent = count;
        memcpy(efdp->efd_format.efd_extents, extp, count * sizeof(*extp));
-       set_bit(XFS_LI_DIRTY, &efdp->efd_item.li_flags);
 
        efip = xfs_efi_init(tp->t_mountp, count);
        memcpy(efip->efi_format.efi_extents, extp, count * sizeof(*extp));
index f604b7e3b77ee5e77ae90d92e112aed82d25198f..142839a8e7b1d785440d2b53fcd4362618d972cc 100644 (file)
@@ -533,9 +533,9 @@ xfs_cui_item_match(
 static struct xfs_log_item *
 xfs_cui_item_relog(
        struct xfs_log_item             *intent,
+       struct xfs_log_item             *done_item,
        struct xfs_trans                *tp)
 {
-       struct xfs_cud_log_item         *cudp;
        struct xfs_cui_log_item         *cuip;
        struct xfs_phys_extent          *pmap;
        unsigned int                    count;
@@ -543,10 +543,6 @@ xfs_cui_item_relog(
        count = CUI_ITEM(intent)->cui_format.cui_nextents;
        pmap = CUI_ITEM(intent)->cui_format.cui_extents;
 
-       tp->t_flags |= XFS_TRANS_DIRTY;
-       cudp = xfs_trans_get_cud(tp, CUI_ITEM(intent));
-       set_bit(XFS_LI_DIRTY, &cudp->cud_item.li_flags);
-
        cuip = xfs_cui_init(tp->t_mountp, count);
        memcpy(cuip->cui_format.cui_extents, pmap, count * sizeof(*pmap));
        atomic_set(&cuip->cui_next_extent, count);
index 05841548691d46ec661c630639df0d980357b6c1..e2730b3e0d960008719420d32d8f970f58b89659 100644 (file)
@@ -586,9 +586,9 @@ xfs_rui_item_match(
 static struct xfs_log_item *
 xfs_rui_item_relog(
        struct xfs_log_item             *intent,
+       struct xfs_log_item             *done_item,
        struct xfs_trans                *tp)
 {
-       struct xfs_rud_log_item         *rudp;
        struct xfs_rui_log_item         *ruip;
        struct xfs_map_extent           *map;
        unsigned int                    count;
@@ -596,10 +596,6 @@ xfs_rui_item_relog(
        count = RUI_ITEM(intent)->rui_format.rui_nextents;
        map = RUI_ITEM(intent)->rui_format.rui_extents;
 
-       tp->t_flags |= XFS_TRANS_DIRTY;
-       rudp = xfs_trans_get_rud(tp, RUI_ITEM(intent));
-       set_bit(XFS_LI_DIRTY, &rudp->rud_item.li_flags);
-
        ruip = xfs_rui_init(tp->t_mountp, count);
        memcpy(ruip->rui_format.rui_extents, map, count * sizeof(*map));
        atomic_set(&ruip->rui_next_extent, count);
index 5fb018ad9fc08f11d97b2f4796deb27069991eb0..25646e2b12f40aa34a5ca4f91929375ccdf0943a 100644 (file)
@@ -80,6 +80,7 @@ struct xfs_item_ops {
        void (*iop_release)(struct xfs_log_item *);
        bool (*iop_match)(struct xfs_log_item *item, uint64_t id);
        struct xfs_log_item *(*iop_relog)(struct xfs_log_item *intent,
+                       struct xfs_log_item *done_item,
                        struct xfs_trans *tp);
        struct xfs_log_item *(*iop_intent)(struct xfs_log_item *intent_done);
 };
@@ -248,9 +249,10 @@ extern struct kmem_cache   *xfs_trans_cache;
 static inline struct xfs_log_item *
 xfs_trans_item_relog(
        struct xfs_log_item     *lip,
+       struct xfs_log_item     *done_lip,
        struct xfs_trans        *tp)
 {
-       return lip->li_ops->iop_relog(lip, tp);
+       return lip->li_ops->iop_relog(lip, done_lip, tp);
 }
 
 struct xfs_dquot;