]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: simplify usage of the rcur local variable in xfs_refcount_finish_one
authorDarrick J. Wong <djwong@kernel.org>
Tue, 2 Jul 2024 18:23:11 +0000 (11:23 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 2 Jul 2024 18:37:07 +0000 (11:37 -0700)
Only update rcur when we know the final *pcur value.

Inspired-by: Christoph Hellwig <hch@lst.de>
[djwong: don't leave the caller with a dangling ref]
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/libxfs/xfs_refcount.c

index 10a16635d93f2a8345ba448ef70f057668b732f1..4137a8d1ac13d0a44c2806a18daea6e511a90d15 100644 (file)
@@ -1341,7 +1341,7 @@ xfs_refcount_finish_one(
        struct xfs_btree_cur            **pcur)
 {
        struct xfs_mount                *mp = tp->t_mountp;
-       struct xfs_btree_cur            *rcur;
+       struct xfs_btree_cur            *rcur = *pcur;
        struct xfs_buf                  *agbp = NULL;
        int                             error = 0;
        xfs_agblock_t                   bno;
@@ -1359,7 +1359,6 @@ xfs_refcount_finish_one(
         * If we haven't gotten a cursor or the cursor AG doesn't match
         * the startblock, get one now.
         */
-       rcur = *pcur;
        if (rcur != NULL && rcur->bc_ag.pag != ri->ri_pag) {
                nr_ops = rcur->bc_refc.nr_ops;
                shape_changes = rcur->bc_refc.shape_changes;
@@ -1373,11 +1372,11 @@ xfs_refcount_finish_one(
                if (error)
                        return error;
 
-               rcur = xfs_refcountbt_init_cursor(mp, tp, agbp, ri->ri_pag);
+               *pcur = rcur = xfs_refcountbt_init_cursor(mp, tp, agbp,
+                                                         ri->ri_pag);
                rcur->bc_refc.nr_ops = nr_ops;
                rcur->bc_refc.shape_changes = shape_changes;
        }
-       *pcur = rcur;
 
        switch (ri->ri_type) {
        case XFS_REFCOUNT_INCREASE: