[PATCH 18/43] xfs_repair: repair rtbitmap and rtsummary block headers

Darrick J. Wong
2024-10-11T01:29:16Z

Check and repair the new block headers attached to rtbitmap and
rtsummary blocks.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
repair/rt.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/repair/rt.c b/repair/rt.c
index 102baa1d5d6186..5ba04919bc3ccf 100644
--- a/repair/rt.c
+++ b/repair/rt.c
@@ -237,6 +237,7 @@ check_rtfile_contents(
while (bno < filelen) {
struct xfs_bmbt_irec map;
struct xfs_buf *bp;
+ unsigned int offset = 0;
int nmap = 1;

error = -libxfs_bmapi_read(ip, bno, 1, &map, &nmap, 0);
@@ -262,7 +263,19 @@ check_rtfile_contents(
break;
}

- check_rtwords(rtg, filename, bno, bp->b_addr, buf);
+ if (xfs_has_rtgroups(mp)) {
+ struct xfs_rtbuf_blkinfo *hdr = bp->b_addr;
+
+ if (hdr->rt_owner != cpu_to_be64(ip->i_ino)) {
+ do_warn(
+ _("corrupt owner in %s at dblock 0x%llx\n"),
+ filename, (unsigned long long)bno);
+ }
+
+ offset = sizeof(*hdr);
+ }
+
+ check_rtwords(rtg, filename, bno, bp->b_addr + offset, buf);

buf += mp->m_blockwsize << XFS_WORDLOG;
bno++;