]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_scrub: remove flags argument from scrub_scan_all_inodes
authorDarrick J. Wong <djwong@kernel.org>
Mon, 24 Feb 2025 18:21:42 +0000 (10:21 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 25 Feb 2025 17:15:56 +0000 (09:15 -0800)
Now that there's only one caller of scrub_scan_all_inodes, remove the
single defined flag because it can set the METADIR bulkstat flag if
needed.  Clarify in the documentation that this is a special purpose
inode iterator that picks up things that don't normally happen.

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

index 58969131628f8fcb312164ae8a1481edb60bf781..c32dfb624e3e95df71af223e1b2b0c4556a9da52 100644 (file)
@@ -57,7 +57,6 @@ bulkstat_for_inumbers(
 {
        struct xfs_bulkstat     *bstat = breq->bulkstat;
        struct xfs_bulkstat     *bs;
-       unsigned int            flags = 0;
        int                     i;
        int                     error;
 
@@ -72,9 +71,6 @@ bulkstat_for_inumbers(
                         strerror_r(error, errbuf, DESCR_BUFSZ));
        }
 
-       if (breq->hdr.flags & XFS_BULK_IREQ_METADIR)
-               flags |= XFS_BULK_IREQ_METADIR;
-
        /*
         * Check each of the stats we got back to make sure we got the inodes
         * we asked for.
@@ -89,7 +85,7 @@ bulkstat_for_inumbers(
 
                /* Load the one inode. */
                error = -xfrog_bulkstat_single(&ctx->mnt,
-                               inumbers->xi_startino + i, flags, bs);
+                               inumbers->xi_startino + i, breq->hdr.flags, bs);
                if (error || bs->bs_ino != inumbers->xi_startino + i) {
                        memset(bs, 0, sizeof(struct xfs_bulkstat));
                        bs->bs_ino = inumbers->xi_startino + i;
@@ -105,7 +101,6 @@ struct scan_inodes {
        scrub_inode_iter_fn     fn;
        void                    *arg;
        unsigned int            nr_threads;
-       unsigned int            flags;
        bool                    aborted;
 };
 
@@ -139,6 +134,7 @@ ichunk_to_bulkstat(
 
 static inline int
 alloc_ichunk(
+       struct scrub_ctx        *ctx,
        struct scan_inodes      *si,
        uint32_t                agno,
        uint64_t                startino,
@@ -164,7 +160,9 @@ alloc_ichunk(
 
        breq = ichunk_to_bulkstat(ichunk);
        breq->hdr.icount = LIBFROG_BULKSTAT_CHUNKSIZE;
-       if (si->flags & SCRUB_SCAN_METADIR)
+
+       /* Scan the metadata directory tree too. */
+       if (ctx->mnt.fsgeom.flags & XFS_FSOP_GEOM_FLAGS_METADIR)
                breq->hdr.flags |= XFS_BULK_IREQ_METADIR;
 
        *ichunkp = ichunk;
@@ -302,7 +300,7 @@ scan_ag_inumbers(
 
        descr_set(&dsc, &agno);
 
-       error = alloc_ichunk(si, agno, 0, &ichunk);
+       error = alloc_ichunk(ctx, si, agno, 0, &ichunk);
        if (error)
                goto err;
        ireq = ichunk_to_inumbers(ichunk);
@@ -355,7 +353,7 @@ scan_ag_inumbers(
                }
 
                if (!ichunk) {
-                       error = alloc_ichunk(si, agno, nextino, &ichunk);
+                       error = alloc_ichunk(ctx, si, agno, nextino, &ichunk);
                        if (error)
                                goto err;
                }
@@ -375,19 +373,18 @@ out:
 }
 
 /*
- * Scan all the inodes in a filesystem.  On error, this function will log
- * an error message and return -1.
+ * Scan all the inodes in a filesystem, including metadata directory files and
+ * broken files.  On error, this function will log an error message and return
+ * -1.
  */
 int
 scrub_scan_all_inodes(
        struct scrub_ctx        *ctx,
        scrub_inode_iter_fn     fn,
-       unsigned int            flags,
        void                    *arg)
 {
        struct scan_inodes      si = {
                .fn             = fn,
-               .flags          = flags,
                .arg            = arg,
                .nr_threads     = scrub_nproc_workqueue(ctx),
        };
index 99b78fa1f76515096130ca1b949ecdb16bb57c25..d68e94eb216895962d7471f465209f8899f6857f 100644 (file)
 typedef int (*scrub_inode_iter_fn)(struct scrub_ctx *ctx,
                struct xfs_handle *handle, struct xfs_bulkstat *bs, void *arg);
 
-/* Return metadata directories too. */
-#define SCRUB_SCAN_METADIR     (1 << 0)
-
+/* Scan every file in the filesystem, including metadir and corrupt ones. */
 int scrub_scan_all_inodes(struct scrub_ctx *ctx, scrub_inode_iter_fn fn,
-               unsigned int flags, void *arg);
+               void *arg);
 
 /* Scan all user-created files in the filesystem. */
 int scrub_scan_user_files(struct scrub_ctx *ctx, scrub_inode_iter_fn fn,
index c90da78439425a8368fb9a5671d725c1da4322a8..046a42c1da8bebcfd82d8994ca33002b2d56579b 100644 (file)
@@ -312,7 +312,6 @@ phase3_func(
        struct scrub_inode_ctx  ictx = { .ctx = ctx };
        uint64_t                val;
        xfs_agnumber_t          agno;
-       unsigned int            scan_flags = 0;
        int                     err;
 
        err = -ptvar_alloc(scrub_nproc(ctx), sizeof(struct action_list),
@@ -329,10 +328,6 @@ phase3_func(
                goto out_ptvar;
        }
 
-       /* Scan the metadata directory tree too. */
-       if (ctx->mnt.fsgeom.flags & XFS_FSOP_GEOM_FLAGS_METADIR)
-               scan_flags |= SCRUB_SCAN_METADIR;
-
        /*
         * If we already have ag/fs metadata to repair from previous phases,
         * we would rather not try to repair file metadata until we've tried
@@ -343,7 +338,7 @@ phase3_func(
                        ictx.always_defer_repairs = true;
        }
 
-       err = scrub_scan_all_inodes(ctx, scrub_inode, scan_flags, &ictx);
+       err = scrub_scan_all_inodes(ctx, scrub_inode, &ictx);
        if (!err && ictx.aborted)
                err = ECANCELED;
        if (err)