Re: [PATCH 40/45] xfs_io: handle internal RT devices in fsmap output

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

 



On Wed, Apr 09, 2025 at 09:55:43AM +0200, Christoph Hellwig wrote:
> Deal with the synthetic fmr_device values and the rt device offset when
> calculating RG numbers.
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Looks ok,
Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx>

--D

> ---
>  io/fsmap.c | 33 ++++++++++++++++++++++++++-------
>  1 file changed, 26 insertions(+), 7 deletions(-)
> 
> diff --git a/io/fsmap.c b/io/fsmap.c
> index 3cc1b510316c..41f2da50f344 100644
> --- a/io/fsmap.c
> +++ b/io/fsmap.c
> @@ -247,8 +247,13 @@ dump_map_verbose(
>  				(long long)BTOBBT(agoff),
>  				(long long)BTOBBT(agoff + p->fmr_length - 1));
>  		} else if (p->fmr_device == xfs_rt_dev && fsgeo->rgcount > 0) {
> -			agno = p->fmr_physical / bperrtg;
> -			agoff = p->fmr_physical % bperrtg;
> +			uint64_t start = p->fmr_physical -
> +				fsgeo->rtstart * fsgeo->blocksize;
> +
> +			agno = start / bperrtg;
> +			if (agno < 0)
> +				agno = -1;
> +			agoff = start % bperrtg;
>  			snprintf(abuf, sizeof(abuf),
>  				"(%lld..%lld)",
>  				(long long)BTOBBT(agoff),
> @@ -326,8 +331,13 @@ dump_map_verbose(
>  				"%lld",
>  				(long long)agno);
>  		} else if (p->fmr_device == xfs_rt_dev && fsgeo->rgcount > 0) {
> -			agno = p->fmr_physical / bperrtg;
> -			agoff = p->fmr_physical % bperrtg;
> +			uint64_t start = p->fmr_physical -
> +				fsgeo->rtstart * fsgeo->blocksize;
> +
> +			agno = start / bperrtg;
> +			if (agno < 0)
> +				agno = -1;
> +			agoff = start % bperrtg;
>  			snprintf(abuf, sizeof(abuf),
>  				"(%lld..%lld)",
>  				(long long)BTOBBT(agoff),
> @@ -478,9 +488,18 @@ fsmap_f(
>  		return 0;
>  	}
>  
> -	xfs_data_dev = file->fs_path.fs_datadev;
> -	xfs_log_dev = file->fs_path.fs_logdev;
> -	xfs_rt_dev = file->fs_path.fs_rtdev;
> +	/*
> +	 * File systems with internal rt device use synthetic device values.
> +	 */
> +	if (file->geom.rtstart) {
> +		xfs_data_dev = XFS_DEV_DATA;
> +		xfs_log_dev = XFS_DEV_LOG;
> +		xfs_rt_dev = XFS_DEV_RT;
> +	} else {
> +		xfs_data_dev = file->fs_path.fs_datadev;
> +		xfs_log_dev = file->fs_path.fs_logdev;
> +		xfs_rt_dev = file->fs_path.fs_rtdev;
> +	}
>  
>  	memset(head, 0, sizeof(*head));
>  	l = head->fmh_keys;
> -- 
> 2.47.2
> 
> 




[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