Commit 844e5e74 authored by Dave Chinner's avatar Dave Chinner Committed by Darrick J. Wong

xfs: fix double ijoin in xfs_reflink_clear_inode_flag()

xfs_reflink_clear_inode_flag double-joins an inode to a transaction,
which is not allowed.  Fix that and document that the caller must have
already joined it.
Signed-Off-By: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
[darrick: edit out trace for nonexistent ASSERT]
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent c5295c6a
......@@ -1553,7 +1553,12 @@ xfs_reflink_inode_has_shared_extents(
return 0;
}
/* Clear the inode reflink flag if there are no shared extents. */
/*
* Clear the inode reflink flag if there are no shared extents.
*
* The caller is responsible for joining the inode to the transaction passed in.
* The inode will be joined to the transaction that is returned to the caller.
*/
int
xfs_reflink_clear_inode_flag(
struct xfs_inode *ip,
......@@ -1572,7 +1577,6 @@ xfs_reflink_clear_inode_flag(
* We didn't find any shared blocks so turn off the reflink flag.
* First, get rid of any leftover CoW mappings.
*/
xfs_trans_ijoin(*tpp, ip, 0);
error = xfs_reflink_cancel_cow_blocks(ip, tpp, 0, NULLFILEOFF, true);
if (error)
return error;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment