xfs: use internal dfops in cow blocks cancel
authorBrian Foster <bfoster@redhat.com>
Tue, 24 Jul 2018 20:43:12 +0000 (13:43 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Thu, 26 Jul 2018 17:15:14 +0000 (10:15 -0700)
All callers either explicitly initialize a dfops or pass a
transaction with an internal dfops. Drop the hacky old dfops
replacement logic and use the one associated with the transaction.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Bill O'Donnell <billodo@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/xfs/xfs_reflink.c

index 406f79d4415323dd2e1bc531158efa9a9716f55c..04c25ee6b6f88e270c615434fa1a783e4a54e4bc 100644 (file)
@@ -483,8 +483,6 @@ xfs_reflink_cancel_cow_blocks(
        struct xfs_ifork                *ifp = XFS_IFORK_PTR(ip, XFS_COW_FORK);
        struct xfs_bmbt_irec            got, del;
        struct xfs_iext_cursor          icur;
-       struct xfs_defer_ops            dfops;
-       struct xfs_defer_ops            *odfops = (*tpp)->t_dfops;
        int                             error = 0;
 
        if (!xfs_is_reflink_inode(ip))
@@ -511,7 +509,8 @@ xfs_reflink_cancel_cow_blocks(
                        if (error)
                                break;
                } else if (del.br_state == XFS_EXT_UNWRITTEN || cancel_real) {
-                       xfs_defer_init(*tpp, &dfops);
+                       ASSERT((*tpp)->t_dfops);
+                       ASSERT((*tpp)->t_firstblock == NULLFSBLOCK);
 
                        /* Free the CoW orphan record. */
                        error = xfs_refcount_free_cow_extent(ip->i_mount,
@@ -553,7 +552,6 @@ next_extent:
        /* clear tag if cow fork is emptied */
        if (!ifp->if_bytes)
                xfs_inode_clear_cowblocks_tag(ip);
-       (*tpp)->t_dfops = odfops;
        return error;
 }