xfs: remove last of unnecessary xfs_defer_cancel() callers

Now that deferred operations are completely managed via
transactions, it's no longer necessary to cancel the dfops in error
paths that already cancel the associated transaction. There are a
few such calls lingering throughout the codebase.

Remove all remaining unnecessary calls to xfs_defer_cancel(). This
leaves xfs_defer_cancel() calls in two places. The first is the call
in the transaction cancel path itself, which facilitates this patch.
The second is made via the xfs_defer_finish() error path to provide
consistent error semantics with transaction commit. For example,
xfs_trans_commit() expects an xfs_defer_finish() failure to clean up
the dfops structure before it returns.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Brian Foster 2018-09-29 13:41:58 +10:00 committed by Dave Chinner
parent ae29478766
commit d5a2e2893d
4 changed files with 16 additions and 44 deletions

View File

@ -587,7 +587,7 @@ xfs_attr_leaf_addname(
*/
error = xfs_attr3_leaf_to_node(args);
if (error)
goto out_defer_cancel;
return error;
error = xfs_defer_finish(&args->trans);
if (error)
return error;
@ -675,7 +675,7 @@ xfs_attr_leaf_addname(
error = xfs_attr3_leaf_to_shortform(bp, args, forkoff);
/* bp is gone due to xfs_da_shrink_inode */
if (error)
goto out_defer_cancel;
return error;
error = xfs_defer_finish(&args->trans);
if (error)
return error;
@ -693,9 +693,6 @@ xfs_attr_leaf_addname(
error = xfs_attr3_leaf_clearflag(args);
}
return error;
out_defer_cancel:
xfs_defer_cancel(args->trans);
return error;
}
/*
@ -738,15 +735,12 @@ xfs_attr_leaf_removename(
error = xfs_attr3_leaf_to_shortform(bp, args, forkoff);
/* bp is gone due to xfs_da_shrink_inode */
if (error)
goto out_defer_cancel;
return error;
error = xfs_defer_finish(&args->trans);
if (error)
return error;
}
return 0;
out_defer_cancel:
xfs_defer_cancel(args->trans);
return error;
}
/*
@ -864,7 +858,7 @@ restart:
state = NULL;
error = xfs_attr3_leaf_to_node(args);
if (error)
goto out_defer_cancel;
goto out;
error = xfs_defer_finish(&args->trans);
if (error)
goto out;
@ -888,7 +882,7 @@ restart:
*/
error = xfs_da3_split(state);
if (error)
goto out_defer_cancel;
goto out;
error = xfs_defer_finish(&args->trans);
if (error)
goto out;
@ -984,7 +978,7 @@ restart:
if (retval && (state->path.active > 1)) {
error = xfs_da3_join(state);
if (error)
goto out_defer_cancel;
goto out;
error = xfs_defer_finish(&args->trans);
if (error)
goto out;
@ -1013,9 +1007,6 @@ out:
if (error)
return error;
return retval;
out_defer_cancel:
xfs_defer_cancel(args->trans);
goto out;
}
/*
@ -1107,7 +1098,7 @@ xfs_attr_node_removename(
if (retval && (state->path.active > 1)) {
error = xfs_da3_join(state);
if (error)
goto out_defer_cancel;
goto out;
error = xfs_defer_finish(&args->trans);
if (error)
goto out;
@ -1138,7 +1129,7 @@ xfs_attr_node_removename(
error = xfs_attr3_leaf_to_shortform(bp, args, forkoff);
/* bp is gone due to xfs_da_shrink_inode */
if (error)
goto out_defer_cancel;
goto out;
error = xfs_defer_finish(&args->trans);
if (error)
goto out;
@ -1150,9 +1141,6 @@ xfs_attr_node_removename(
out:
xfs_da_state_free(state);
return error;
out_defer_cancel:
xfs_defer_cancel(args->trans);
goto out;
}
/*

View File

@ -485,7 +485,7 @@ xfs_attr_rmtval_set(
blkcnt, XFS_BMAPI_ATTRFORK, args->total, &map,
&nmap);
if (error)
goto out_defer_cancel;
return error;
error = xfs_defer_finish(&args->trans);
if (error)
return error;
@ -553,9 +553,6 @@ xfs_attr_rmtval_set(
}
ASSERT(valuelen == 0);
return 0;
out_defer_cancel:
xfs_defer_cancel(args->trans);
return error;
}
/*
@ -625,7 +622,7 @@ xfs_attr_rmtval_remove(
error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt,
XFS_BMAPI_ATTRFORK, 1, &done);
if (error)
goto out_defer_cancel;
return error;
error = xfs_defer_finish(&args->trans);
if (error)
return error;
@ -638,7 +635,4 @@ xfs_attr_rmtval_remove(
return error;
}
return 0;
out_defer_cancel:
xfs_defer_cancel(args->trans);
return error;
}

View File

@ -1584,7 +1584,7 @@ xfs_swap_extent_rmap(
tirec.br_blockcount, &irec,
&nimaps, 0);
if (error)
goto out_defer;
goto out;
ASSERT(nimaps == 1);
ASSERT(tirec.br_startoff == irec.br_startoff);
trace_xfs_swap_extent_rmap_remap_piece(ip, &irec);
@ -1599,22 +1599,22 @@ xfs_swap_extent_rmap(
/* Remove the mapping from the donor file. */
error = xfs_bmap_unmap_extent(tp, tip, &uirec);
if (error)
goto out_defer;
goto out;
/* Remove the mapping from the source file. */
error = xfs_bmap_unmap_extent(tp, ip, &irec);
if (error)
goto out_defer;
goto out;
/* Map the donor file's blocks into the source file. */
error = xfs_bmap_map_extent(tp, ip, &uirec);
if (error)
goto out_defer;
goto out;
/* Map the source file's blocks into the donor file. */
error = xfs_bmap_map_extent(tp, tip, &irec);
if (error)
goto out_defer;
goto out;
error = xfs_defer_finish(tpp);
tp = *tpp;
@ -1636,8 +1636,6 @@ xfs_swap_extent_rmap(
tip->i_d.di_flags2 = tip_flags2;
return 0;
out_defer:
xfs_defer_cancel(tp);
out:
trace_xfs_swap_extent_rmap_error(ip, error, _RET_IP_);
tip->i_d.di_flags2 = tip_flags2;

View File

@ -1563,7 +1563,7 @@ xfs_itruncate_extents_flags(
error = xfs_bunmapi(tp, ip, first_unmap_block, unmap_len, flags,
XFS_ITRUNC_MAX_EXTENTS, &done);
if (error)
goto out_bmap_cancel;
goto out;
/*
* Duplicate the transaction that has the permanent
@ -1599,14 +1599,6 @@ xfs_itruncate_extents_flags(
out:
*tpp = tp;
return error;
out_bmap_cancel:
/*
* If the bunmapi call encounters an error, return to the caller where
* the transaction can be properly aborted. We just need to make sure
* we're not holding any resources that we were not when we came in.
*/
xfs_defer_cancel(tp);
goto out;
}
int