Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5a2e289 authored by Brian Foster's avatar Brian Foster Committed by Dave Chinner
Browse files

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: default avatarBrian Foster <bfoster@redhat.com>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
parent ae294787
Loading
Loading
Loading
Loading
+8 −20
Original line number Diff line number Diff line
@@ -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 @@ xfs_attr_node_addname(
			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 @@ xfs_attr_node_addname(
		 */
		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 @@ xfs_attr_node_addname(
		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 @@ xfs_attr_node_addname(
	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;
}

/*
+2 −8
Original line number Diff line number Diff line
@@ -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;
}
+5 −7
Original line number Diff line number Diff line
@@ -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;
+1 −9
Original line number Diff line number Diff line
@@ -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