diff mbox series

repair: fix the call to search_rt_dup_extent in scan_bmapbt

Message ID 20231109160233.703566-1-hch@lst.de (mailing list archive)
State Accepted
Headers show
Series repair: fix the call to search_rt_dup_extent in scan_bmapbt | expand

Commit Message

Christoph Hellwig Nov. 9, 2023, 4:02 p.m. UTC
search_rt_dup_extent expects an RT extent number and not a fsbno.
Convert the units before the call.  Without this we are unlikely
to ever found a legit duplicate extent on the RT subvolume because
the search will always be off the end.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 repair/scan.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Darrick J. Wong Nov. 9, 2023, 4:13 p.m. UTC | #1
On Thu, Nov 09, 2023 at 05:02:33PM +0100, Christoph Hellwig wrote:
> search_rt_dup_extent expects an RT extent number and not a fsbno.
> Convert the units before the call.  Without this we are unlikely
> to ever found a legit duplicate extent on the RT subvolume because
> the search will always be off the end.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Looks familiar! :)

Reviewed-by: Darrick J. Wong <djwong@kernel.org>

In the longer run: whenever the libxfs 6.7 sync hits the list, I'll be
ready to go with a pair of broader patches to fix all the confusing /
incorrect units and variable names in xfs_repair.  This ought to get
merged to xfsprogs 6.6.

--D

> ---
>  repair/scan.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/repair/scan.c b/repair/scan.c
> index 27a33286a..7a0587615 100644
> --- a/repair/scan.c
> +++ b/repair/scan.c
> @@ -402,8 +402,10 @@ _("bad state %d, inode %" PRIu64 " bmap block 0x%" PRIx64 "\n"),
>  					XFS_FSB_TO_AGBNO(mp, bno) + 1))
>  				return(1);
>  		} else  {
> -			if (search_rt_dup_extent(mp, bno))
> -				return(1);
> +			xfs_rtblock_t	ext = bno / mp->m_sb.sb_rextsize;
> +
> +			if (search_rt_dup_extent(mp, ext))
> +				return 1;
>  		}
>  	}
>  	(*tot)++;
> -- 
> 2.39.2
>
Christoph Hellwig Nov. 9, 2023, 4:14 p.m. UTC | #2
On Thu, Nov 09, 2023 at 08:13:19AM -0800, Darrick J. Wong wrote:
> In the longer run: whenever the libxfs 6.7 sync hits the list, I'll be
> ready to go with a pair of broader patches to fix all the confusing /
> incorrect units and variable names in xfs_repair.  This ought to get
> merged to xfsprogs 6.6.

Yes, please!

FYI, I've done a prototype of annotation the rxtnumber_t with __nocast
in the kernel, and except for the ugliness in casting all the 0 values
it actually looks pretty nice.  I hope with the extra work Luc promised
we can actually annotate our non-byte offset/bno/len fields with it and
get real type checking for them.
diff mbox series

Patch

diff --git a/repair/scan.c b/repair/scan.c
index 27a33286a..7a0587615 100644
--- a/repair/scan.c
+++ b/repair/scan.c
@@ -402,8 +402,10 @@  _("bad state %d, inode %" PRIu64 " bmap block 0x%" PRIx64 "\n"),
 					XFS_FSB_TO_AGBNO(mp, bno) + 1))
 				return(1);
 		} else  {
-			if (search_rt_dup_extent(mp, bno))
-				return(1);
+			xfs_rtblock_t	ext = bno / mp->m_sb.sb_rextsize;
+
+			if (search_rt_dup_extent(mp, ext))
+				return 1;
 		}
 	}
 	(*tot)++;