]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xfs: add a xchk_ip_set_corrupt helper
authorChristoph Hellwig <hch@lst.de>
Fri, 15 May 2026 13:50:27 +0000 (15:50 +0200)
committerCarlos Maiolino <cem@kernel.org>
Tue, 9 Jun 2026 07:14:41 +0000 (09:14 +0200)
Add a smaller wrapper to set a inode corrupted by the xfs_inode
pointer.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
fs/xfs/scrub/bmap.c
fs/xfs/scrub/common.c
fs/xfs/scrub/common.h
fs/xfs/scrub/dir.c
fs/xfs/scrub/dirtree.c
fs/xfs/scrub/metapath.c
fs/xfs/scrub/nlinks.c
fs/xfs/scrub/parent.c
fs/xfs/scrub/rtbitmap.c
fs/xfs/scrub/rtsummary.c

index 67861102cdb96622d41e84d866b2721bc49706fa..6dc1f6eea45e5b71398c010ecd1246c57461c5f6 100644 (file)
@@ -1040,7 +1040,7 @@ xchk_bmap(
        case XFS_COW_FORK:
                /* No CoW forks filesystem doesn't support out of place writes */
                if (!xfs_has_reflink(mp) && !xfs_has_zoned(mp)) {
-                       xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+                       xchk_ip_set_corrupt(sc, sc->ip);
                        return 0;
                }
                break;
@@ -1052,7 +1052,7 @@ xchk_bmap(
                 * attr here.
                 */
                if (!xfs_has_attr(mp))
-                       xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+                       xchk_ip_set_corrupt(sc, sc->ip);
                break;
        default:
                ASSERT(whichfork == XFS_DATA_FORK);
@@ -1137,7 +1137,7 @@ xchk_bmap_data(
        int                     error;
 
        if (xchk_file_looks_zapped(sc, XFS_SICK_INO_BMBTD_ZAPPED)) {
-               xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+               xchk_ip_set_corrupt(sc, sc->ip);
                return 0;
        }
 
@@ -1165,7 +1165,7 @@ xchk_bmap_attr(
         * returning immediately.
         */
        if (xchk_file_looks_zapped(sc, XFS_SICK_INO_BMBTA_ZAPPED)) {
-               xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+               xchk_ip_set_corrupt(sc, sc->ip);
                return 0;
        }
 
index 3d40cb0b2496c4118890d59c4ad99868f40d7270..b271f4c4ef4367ec961e580ebb79ee8cb94e9ff0 100644 (file)
@@ -1110,7 +1110,7 @@ xchk_install_live_inode(
        struct xfs_inode        *ip)
 {
        if (!igrab(VFS_I(ip))) {
-               xchk_ino_set_corrupt(sc, ip->i_ino);
+               xchk_ip_set_corrupt(sc, ip);
                return -EFSCORRUPTED;
        }
 
@@ -1439,13 +1439,13 @@ xchk_metadata_inode_forks(
 
        /* Metadata inodes don't live on the rt device. */
        if (sc->ip->i_diflags & XFS_DIFLAG_REALTIME) {
-               xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+               xchk_ip_set_corrupt(sc, sc->ip);
                return 0;
        }
 
        /* They should never participate in reflink. */
        if (xfs_is_reflink_inode(sc->ip)) {
-               xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+               xchk_ip_set_corrupt(sc, sc->ip);
                return 0;
        }
 
@@ -1462,7 +1462,7 @@ xchk_metadata_inode_forks(
                                &error))
                        return error;
                if (shared)
-                       xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+                       xchk_ip_set_corrupt(sc, sc->ip);
        }
 
        /*
@@ -1471,7 +1471,7 @@ xchk_metadata_inode_forks(
         */
        if (xfs_inode_hasattr(sc->ip)) {
                if (!xfs_has_metadir(sc->mp)) {
-                       xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+                       xchk_ip_set_corrupt(sc, sc->ip);
                        return 0;
                }
 
index b494d747c0084a0d3d1dd79338f3519572bcb43a..0e23b125720f3fef32dc92e987d1cb8e13f57759 100644 (file)
@@ -32,6 +32,8 @@ void xchk_set_corrupt(struct xfs_scrub *sc);
 void xchk_block_set_corrupt(struct xfs_scrub *sc,
                struct xfs_buf *bp);
 void xchk_ino_set_corrupt(struct xfs_scrub *sc, xfs_ino_t ino);
+#define xchk_ip_set_corrupt(_sc, _ip) \
+       xchk_ino_set_corrupt((_sc), (_ip)->i_ino)
 void xchk_fblock_set_corrupt(struct xfs_scrub *sc, int whichfork,
                xfs_fileoff_t offset);
 #ifdef CONFIG_XFS_QUOTA
index 09715a4aa154bfccaae1e94e57072dc46ec0f7b3..8306dfafff3bced6346a22f689fcd6de4173cba0 100644 (file)
@@ -1080,7 +1080,7 @@ xchk_directory(
 
        /* Plausible size? */
        if (sc->ip->i_disk_size < xfs_dir2_sf_hdr_size(0)) {
-               xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+               xchk_ip_set_corrupt(sc, sc->ip);
                return 0;
        }
 
index 143114718d75ca85545d6bd0089e55a4867dd90e..124b2379d5c4d56f5bcd0ab56b12c4f65d6e1462 100644 (file)
@@ -979,10 +979,10 @@ xchk_dirtree(
        xchk_dirtree_evaluate(dl, &oc);
        if (xchk_dirtree_parentless(dl)) {
                if (oc.good || oc.bad || oc.suspect)
-                       xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+                       xchk_ip_set_corrupt(sc, sc->ip);
        } else {
                if (oc.bad || oc.good + oc.suspect != 1)
-                       xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+                       xchk_ip_set_corrupt(sc, sc->ip);
                if (oc.suspect)
                        xchk_ino_xref_set_corrupt(sc, sc->ip->i_ino);
        }
index 050b86eb12d3e65212921b00d3e96048e3086343..680a8ba1cdf119b0de8302623fd9c51099a1fa7e 100644 (file)
@@ -314,7 +314,7 @@ xchk_metapath(
 
        /* Parent required to do anything else. */
        if (mpath->dp == NULL) {
-               xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+               xchk_ip_set_corrupt(sc, sc->ip);
                return 0;
        }
 
@@ -329,7 +329,7 @@ xchk_metapath(
        trace_xchk_metapath_lookup(sc, mpath->path, mpath->dp, ino);
        if (error == -ENOENT) {
                /* No directory entry at all */
-               xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+               xchk_ip_set_corrupt(sc, sc->ip);
                error = 0;
                goto out_ilock;
        }
@@ -337,7 +337,7 @@ xchk_metapath(
                goto out_ilock;
        if (ino != sc->ip->i_ino) {
                /* Pointing to wrong inode */
-               xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+               xchk_ip_set_corrupt(sc, sc->ip);
        }
 
 out_ilock:
index 1e0effdb65a6b7916d0cbce3c83f22b7e04a5653..2a214802c77ced36201de3ea0ceff712ea94f57b 100644 (file)
@@ -718,7 +718,7 @@ xchk_nlinks_compare_inode(
         * count, but it will let them decrease it.
         */
        if (total_links > XFS_NLINK_PINNED) {
-               xchk_ino_set_corrupt(sc, ip->i_ino);
+               xchk_ip_set_corrupt(sc, ip);
                goto out_corrupt;
        } else if (total_links > XFS_MAXLINK) {
                xchk_ino_set_warning(sc, ip->i_ino);
@@ -726,7 +726,7 @@ xchk_nlinks_compare_inode(
 
        /* Link counts should match. */
        if (total_links != actual_nlink) {
-               xchk_ino_set_corrupt(sc, ip->i_ino);
+               xchk_ip_set_corrupt(sc, ip);
                goto out_corrupt;
        }
 
@@ -747,7 +747,7 @@ xchk_nlinks_compare_inode(
                 * back references.
                 */
                if (obs.backrefs != 0) {
-                       xchk_ino_set_corrupt(sc, ip->i_ino);
+                       xchk_ip_set_corrupt(sc, ip);
                        goto out_corrupt;
                }
 
@@ -756,7 +756,7 @@ xchk_nlinks_compare_inode(
                 * children.
                 */
                if (obs.children != 0) {
-                       xchk_ino_set_corrupt(sc, ip->i_ino);
+                       xchk_ip_set_corrupt(sc, ip);
                        goto out_corrupt;
                }
        }
@@ -769,7 +769,7 @@ xchk_nlinks_compare_inode(
                 * the root directory.
                 */
                if (obs.parents != 1) {
-                       xchk_ino_set_corrupt(sc, ip->i_ino);
+                       xchk_ip_set_corrupt(sc, ip);
                        goto out_corrupt;
                }
        } else if (actual_nlink > 0) {
@@ -778,7 +778,7 @@ xchk_nlinks_compare_inode(
                 * least one parent.
                 */
                if (obs.parents == 0) {
-                       xchk_ino_set_corrupt(sc, ip->i_ino);
+                       xchk_ip_set_corrupt(sc, ip);
                        goto out_corrupt;
                }
        }
index 931604fa1294d6c0b1c620dc2aa8bfc40b6d7f5e..eb9ca3d75fefb317917a433bc35f27cd41fd716d 100644 (file)
@@ -729,10 +729,10 @@ xchk_parent_count_pptrs(
                        pp->pptrs_found++;
 
                if (VFS_I(sc->ip)->i_nlink == 0 && pp->pptrs_found > 0)
-                       xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+                       xchk_ip_set_corrupt(sc, sc->ip);
                else if (VFS_I(sc->ip)->i_nlink > 0 &&
                         pp->pptrs_found == 0)
-                       xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+                       xchk_ip_set_corrupt(sc, sc->ip);
        } else {
                /*
                 * Starting with metadir, we allow checking of parent pointers
@@ -743,7 +743,7 @@ xchk_parent_count_pptrs(
                        pp->pptrs_found++;
 
                if (VFS_I(sc->ip)->i_nlink != pp->pptrs_found)
-                       xchk_ino_set_corrupt(sc, sc->ip->i_ino);
+                       xchk_ip_set_corrupt(sc, sc->ip);
        }
 
        return 0;
index b3a4972d423e240412f1174f04e71fa14dccc005..10d4c11372d9c070cc1af0e30479577269e593b0 100644 (file)
@@ -200,13 +200,13 @@ xchk_rtbitmap(
 
        /* Is sb_rextents correct? */
        if (mp->m_sb.sb_rextents != rtb->rextents) {
-               xchk_ino_set_corrupt(sc, rbmip->i_ino);
+               xchk_ip_set_corrupt(sc, rbmip);
                return 0;
        }
 
        /* Is sb_rextslog correct? */
        if (mp->m_sb.sb_rextslog != rtb->rextslog) {
-               xchk_ino_set_corrupt(sc, rbmip->i_ino);
+               xchk_ip_set_corrupt(sc, rbmip);
                return 0;
        }
 
@@ -215,17 +215,17 @@ xchk_rtbitmap(
         * case can we exceed 4bn bitmap blocks since the super field is a u32.
         */
        if (rtb->rbmblocks > U32_MAX) {
-               xchk_ino_set_corrupt(sc, rbmip->i_ino);
+               xchk_ip_set_corrupt(sc, rbmip);
                return 0;
        }
        if (mp->m_sb.sb_rbmblocks != rtb->rbmblocks) {
-               xchk_ino_set_corrupt(sc, rbmip->i_ino);
+               xchk_ip_set_corrupt(sc, rbmip);
                return 0;
        }
 
        /* The bitmap file length must be aligned to an fsblock. */
        if (rbmip->i_disk_size & mp->m_blockmask) {
-               xchk_ino_set_corrupt(sc, rbmip->i_ino);
+               xchk_ip_set_corrupt(sc, rbmip);
                return 0;
        }
 
@@ -235,7 +235,7 @@ xchk_rtbitmap(
         * file can be larger than sb_rbmblocks.
         */
        if (rbmip->i_disk_size < XFS_FSB_TO_B(mp, rtb->rbmblocks)) {
-               xchk_ino_set_corrupt(sc, rbmip->i_ino);
+               xchk_ip_set_corrupt(sc, rbmip);
                return 0;
        }
 
index efce39d7a1ef780632014f9765a605934f8c9d6e..18074c1ff166aeae50f9ce69016ffd524c6a7be3 100644 (file)
@@ -314,25 +314,25 @@ xchk_rtsummary(
 
        /* Is sb_rextents correct? */
        if (mp->m_sb.sb_rextents != rts->rextents) {
-               xchk_ino_set_corrupt(sc, rbmip->i_ino);
+               xchk_ip_set_corrupt(sc, rbmip);
                return 0;
        }
 
        /* Is m_rsumlevels correct? */
        if (mp->m_rsumlevels != rts->rsumlevels) {
-               xchk_ino_set_corrupt(sc, rsumip->i_ino);
+               xchk_ip_set_corrupt(sc, rsumip);
                return 0;
        }
 
        /* Is m_rsumsize correct? */
        if (mp->m_rsumblocks != rts->rsumblocks) {
-               xchk_ino_set_corrupt(sc, rsumip->i_ino);
+               xchk_ip_set_corrupt(sc, rsumip);
                return 0;
        }
 
        /* The summary file length must be aligned to an fsblock. */
        if (rsumip->i_disk_size & mp->m_blockmask) {
-               xchk_ino_set_corrupt(sc, rsumip->i_ino);
+               xchk_ip_set_corrupt(sc, rsumip);
                return 0;
        }
 
@@ -342,7 +342,7 @@ xchk_rtsummary(
         * the file can be larger than rsumsize.
         */
        if (rsumip->i_disk_size < XFS_FSB_TO_B(mp, rts->rsumblocks)) {
-               xchk_ino_set_corrupt(sc, rsumip->i_ino);
+               xchk_ip_set_corrupt(sc, rsumip);
                return 0;
        }
 
@@ -358,7 +358,7 @@ xchk_rtsummary(
                 * EFSCORRUPTED means the rtbitmap is corrupt, which is an xref
                 * error since we're checking the summary file.
                 */
-               xchk_ino_set_corrupt(sc, rbmip->i_ino);
+               xchk_ip_set_corrupt(sc, rbmip);
                return 0;
        }
        if (error)