Re: [PATCH 37/45] xfs_io: correctly report RGs with internal rt dev in bmap output

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

 



On Wed, Apr 09, 2025 at 09:55:40AM +0200, Christoph Hellwig wrote:
> Apply the proper offset.  Somehow this made gcc complain about
> possible overflowing abuf, so increase the size for that as well.
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Looks fine to me...
Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx>

--D

> ---
>  io/bmap.c | 23 +++++++++++++++--------
>  1 file changed, 15 insertions(+), 8 deletions(-)
> 
> diff --git a/io/bmap.c b/io/bmap.c
> index b2f6b4905285..944f658b35f0 100644
> --- a/io/bmap.c
> +++ b/io/bmap.c
> @@ -257,18 +257,21 @@ bmap_f(
>  #define	FLG_BSW		0000010	/* Not on begin of stripe width */
>  #define	FLG_ESW		0000001	/* Not on end   of stripe width */
>  		int	agno;
> -		off_t	agoff, bbperag;
> +		off_t	agoff, bbperag, bstart;
>  		int	foff_w, boff_w, aoff_w, tot_w, agno_w;
> -		char	rbuf[32], bbuf[32], abuf[32];
> +		char	rbuf[32], bbuf[32], abuf[64];
>  		int	sunit, swidth;
>  
>  		foff_w = boff_w = aoff_w = MINRANGE_WIDTH;
>  		tot_w = MINTOT_WIDTH;
>  		if (is_rt) {
> +			bstart = fsgeo.rtstart *
> +				(fsgeo.blocksize / BBSIZE);
>  			bbperag = bytes_per_rtgroup(&fsgeo) / BBSIZE;
>  			sunit = 0;
>  			swidth = 0;
>  		} else {
> +			bstart = 0;
>  			bbperag = (off_t)fsgeo.agblocks *
>  				  (off_t)fsgeo.blocksize / BBSIZE;
>  			sunit = (fsgeo.sunit * fsgeo.blocksize) / BBSIZE;
> @@ -298,9 +301,11 @@ bmap_f(
>  						map[i + 1].bmv_length - 1LL));
>  				boff_w = max(boff_w, strlen(bbuf));
>  				if (bbperag > 0) {
> -					agno = map[i + 1].bmv_block / bbperag;
> -					agoff = map[i + 1].bmv_block -
> -							(agno * bbperag);
> +					off_t bno;
> +
> +					bno = map[i + 1].bmv_block - bstart;
> +					agno = bno / bbperag;
> +					agoff = bno % bbperag;
>  					snprintf(abuf, sizeof(abuf),
>  						"(%lld..%lld)",
>  						(long long)agoff,
> @@ -387,9 +392,11 @@ bmap_f(
>  				printf("%4d: %-*s %-*s", i, foff_w, rbuf,
>  					boff_w, bbuf);
>  				if (bbperag > 0) {
> -					agno = map[i + 1].bmv_block / bbperag;
> -					agoff = map[i + 1].bmv_block -
> -							(agno * bbperag);
> +					off_t bno;
> +
> +					bno = map[i + 1].bmv_block - bstart;
> +					agno = bno / bbperag;
> +					agoff = bno % bbperag;
>  					snprintf(abuf, sizeof(abuf),
>  						"(%lld..%lld)",
>  						(long long)agoff,
> -- 
> 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