Re: [PATCH RFC 2/2] xfs: Fix xfs_prepare_shift() range for RT

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

 



On Fri, May 03, 2024 at 02:03:37PM +0000, John Garry wrote:
> The RT extent range must be considered in the xfs_flush_unmap_range() call
> to stabilize the boundary.
> 
> This code change is originally from Dave Chinner.
> 
> Signed-off-by: John Garry <john.g.garry@xxxxxxxxxx>
> ---
>  fs/xfs/xfs_bmap_util.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
> index da67c52d5f94..2775bb32489e 100644
> --- a/fs/xfs/xfs_bmap_util.c
> +++ b/fs/xfs/xfs_bmap_util.c
> @@ -896,8 +896,8 @@ xfs_prepare_shift(
>  	struct xfs_inode	*ip,
>  	loff_t			offset)
>  {
> -	struct xfs_mount	*mp = ip->i_mount;
>  	int			error;
> +	unsigned int		rounding;
>  
>  	/*
>  	 * Trim eofblocks to avoid shifting uninitialized post-eof preallocation
> @@ -914,11 +914,13 @@ xfs_prepare_shift(
>  	 * with the full range of the operation. If we don't, a COW writeback
>  	 * completion could race with an insert, front merge with the start
>  	 * extent (after split) during the shift and corrupt the file. Start
> -	 * with the block just prior to the start to stabilize the boundary.
> +	 * with the aligned block just prior to the start to stabilize the

"...with the allocation unit just prior to the start..."

> +	 * boundary.
>  	 */
> -	offset = round_down(offset, mp->m_sb.sb_blocksize);
> +	rounding = xfs_inode_alloc_unitsize(ip);
> +	offset = round_down(offset, rounding);

Again, round_down requires the divisor to be a power of two.

--D

>  	if (offset)
> -		offset -= mp->m_sb.sb_blocksize;
> +		offset -= rounding;
>  
>  	/*
>  	 * Writeback and invalidate cache for the remainder of the file as we're
> -- 
> 2.31.1
> 
> 




[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