diff options
Diffstat (limited to 'fs/xfs/xfs_inode.c')
| -rw-r--r-- | fs/xfs/xfs_inode.c | 8 | 
1 files changed, 5 insertions, 3 deletions
| diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 5599dda4727a..4ec5b7f45401 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -1624,10 +1624,12 @@ xfs_itruncate_extents(  		goto out;  	/* -	 * Clear the reflink flag if we truncated everything. +	 * Clear the reflink flag if there are no data fork blocks and +	 * there are no extents staged in the cow fork.  	 */ -	if (ip->i_d.di_nblocks == 0 && xfs_is_reflink_inode(ip)) { -		ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK; +	if (xfs_is_reflink_inode(ip) && ip->i_cnextents == 0) { +		if (ip->i_d.di_nblocks == 0) +			ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK;  		xfs_inode_clear_cowblocks_tag(ip);  	} | 
