]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_repair: repair rtbitmap and rtsummary block headers
authorDarrick J. Wong <djwong@kernel.org>
Thu, 21 Nov 2024 00:24:36 +0000 (16:24 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 24 Dec 2024 02:01:33 +0000 (18:01 -0800)
Check and repair the new block headers attached to rtbitmap and
rtsummary blocks.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
repair/rt.c

index 102baa1d5d6186f6d1f3f035082cb75b2a60b545..5ba04919bc3ccfb7b1f642bf7b8a24b9d6474553 100644 (file)
@@ -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++;