Re: [PATCH 38/63] xfs: cancel CoW reservations and clear inode reflink flag when freeing blocks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Sep 29, 2016 at 08:09:46PM -0700, Darrick J. Wong wrote:
> When we're freeing blocks (truncate, punch, etc.), clear all CoW
> reservations in the range being freed.  If the file block count
> drops to zero, also clear the inode reflink flag.
> 
> Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>
> ---
>  fs/xfs/xfs_inode.c |   13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> 
> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> index 0c25a76..8c971fd 100644
> --- a/fs/xfs/xfs_inode.c
> +++ b/fs/xfs/xfs_inode.c
> @@ -49,6 +49,7 @@
>  #include "xfs_trans_priv.h"
>  #include "xfs_log.h"
>  #include "xfs_bmap_btree.h"
> +#include "xfs_reflink.h"
>  
>  kmem_zone_t *xfs_inode_zone;
>  
> @@ -1586,6 +1587,18 @@ xfs_itruncate_extents(
>  			goto out;
>  	}
>  
> +	/* Remove all pending CoW reservations. */
> +	error = xfs_reflink_cancel_cow_blocks(ip, &tp, first_unmap_block,
> +			last_block);
> +	if (error)
> +		goto out;
> +
> +	/*
> +	 * Clear the reflink flag if we truncated everything.
> +	 */
> +	if (ip->i_d.di_nblocks == 0 && xfs_is_reflink_inode(ip))
> +		ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK;
> +

So this implies the reflink flag is more of an optimization than an
accurate assessment of reflink state (e.g., we can have DIFLAG2_REFLINK
w/o shared extents, but we should never have shared extents w/o the
flag) because this wouldn't clear the flag on a partial truncate that
happened to unmap all of the shared extents from the file.

That seems fine, I'll just note there's one small potential conflict
ahead where we (dis)allow setting the realtime state based on the
reflink flag.

Brian

>  	/*
>  	 * Always re-log the inode so that our permanent transaction can keep
>  	 * on rolling it forward in the log.
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux