xfs: simplify usage of the rcur local variable in xfs_refcount_finish_one

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>
This commit is contained in:
Darrick J. Wong 2024-07-02 11:23:11 -07:00
parent bac3f78492
commit e51987a12c

View File

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