From: Dave Chinner Date: Wed, 9 May 2018 14:49:10 +0000 (-0700) Subject: xfs: fix double ijoin in xfs_reflink_clear_inode_flag() X-Git-Tag: Ubuntu-5.13.0-19.19~10895^2~91 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=844e5e74c1a8256f2b0f89642ed9847b04fe2450;p=mirror_ubuntu-jammy-kernel.git 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: Dave Chinner Reviewed-by: Christoph Hellwig Reviewed-by: Brian Foster [darrick: edit out trace for nonexistent ASSERT] Reviewed-by: Darrick J. Wong Signed-off-by: Darrick J. Wong --- diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index bce2b5351d64..12d441a73b53 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -1553,7 +1553,12 @@ next: 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;