xfs: remove last of unnecessary xfs_defer_cancel() callers
authorBrian Foster <bfoster@redhat.com>
Sat, 29 Sep 2018 03:41:58 +0000 (13:41 +1000)
committerDave Chinner <david@fromorbit.com>
Sat, 29 Sep 2018 03:41:58 +0000 (13:41 +1000)
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>
fs/xfs/libxfs/xfs_attr.c
fs/xfs/libxfs/xfs_attr_remote.c
fs/xfs/xfs_bmap_util.c
fs/xfs/xfs_inode.c

index 1e671d4..c6299f8 100644 (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;
 }
 
 /*
index af09406..d89363c 100644 (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;
 }
index addbd74..ae3cc39 100644 (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;
index d957a46..05db954 100644 (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