|
@@ -1624,10 +1624,12 @@ xfs_itruncate_extents(
|
|
goto out;
|
|
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);
|
|
xfs_inode_clear_cowblocks_tag(ip);
|
|
}
|
|
}
|
|
|
|
|