]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
libfrog: store more inode and block geometry in struct xfs_fd
authorDarrick J. Wong <darrick.wong@oracle.com>
Mon, 9 Sep 2019 19:37:05 +0000 (15:37 -0400)
committerEric Sandeen <sandeen@redhat.com>
Mon, 9 Sep 2019 19:37:05 +0000 (15:37 -0400)
Move the extra AG geometry fields out of scrub and into the libfrog code
so that we can consolidate the geoemtry code in one place.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Allison Collins <allison.henderson@oracle.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
include/fsgeom.h
libfrog/fsgeom.c
scrub/fscounters.c
scrub/inodes.c
scrub/phase1.c
scrub/phase3.c
scrub/phase5.c
scrub/phase6.c
scrub/phase7.c
scrub/xfs_scrub.h

index 26f93b3c841a2ac4e4d78fd8d0a453de1175c498..7837c700b331d7d96e2734233e2a4b7c7b6bea49 100644 (file)
@@ -20,6 +20,18 @@ struct xfs_fd {
 
        /* filesystem geometry */
        struct xfs_fsop_geom    fsgeom;
+
+       /* log2 of sb_agblocks (rounded up) */
+       unsigned int            agblklog;
+
+       /* log2 of sb_blocksize */
+       unsigned int            blocklog;
+
+       /* log2 of sb_inodesize */
+       unsigned int            inodelog;
+
+       /* log2 of sb_inopblock */
+       unsigned int            inopblog;
 };
 
 /* Static initializers */
index 9513faf57e9f02ebdb371ed3e4b00c4b683161a7..b7e2b2f8ab777ba10081a14bb8f0cbb2ea747098 100644 (file)
@@ -4,6 +4,7 @@
  */
 #include "libxfs.h"
 #include "fsgeom.h"
+#include "libfrog.h"
 
 void
 xfs_report_geom(
@@ -101,7 +102,17 @@ int
 xfd_prepare_geometry(
        struct xfs_fd           *xfd)
 {
-       return xfrog_geometry(xfd->fd, &xfd->fsgeom);
+       int                     ret;
+
+       ret = xfrog_geometry(xfd->fd, &xfd->fsgeom);
+       if (ret)
+               return ret;
+
+       xfd->agblklog = log2_roundup(xfd->fsgeom.agblocks);
+       xfd->blocklog = highbit32(xfd->fsgeom.blocksize);
+       xfd->inodelog = highbit32(xfd->fsgeom.inodesize);
+       xfd->inopblog = xfd->blocklog - xfd->inodelog;
+       return 0;
 }
 
 /*
index f18d0e1992eb9e86b0c09a76a222ae04084d3129..ac898764b7181da59bc92ad7a9a2a6c771d70080 100644 (file)
@@ -91,8 +91,8 @@ xfs_count_ag_inodes(
                                minor(ctx->fsinfo.fs_datadev),
                                agno);
 
-       ag_ino = (__u64)agno << (ctx->inopblog + ctx->agblklog);
-       next_ag_ino = (__u64)(agno + 1) << (ctx->inopblog + ctx->agblklog);
+       ag_ino = (__u64)agno << (ctx->mnt.inopblog + ctx->mnt.agblklog);
+       next_ag_ino = (__u64)(agno + 1) << (ctx->mnt.inopblog + ctx->mnt.agblklog);
 
        moveon = xfs_count_inodes_range(ctx, descr, ag_ino, next_ag_ino - 1,
                        &ci->counters[agno]);
index 08f3d847841df604fb7b4f686e20eebcfacba679..873ad4258028f512c44f3c8251c4ea9c917447bb 100644 (file)
@@ -228,8 +228,8 @@ xfs_scan_ag_inodes(
                                minor(ctx->fsinfo.fs_datadev),
                                agno);
 
-       ag_ino = (__u64)agno << (ctx->inopblog + ctx->agblklog);
-       next_ag_ino = (__u64)(agno + 1) << (ctx->inopblog + ctx->agblklog);
+       ag_ino = (__u64)agno << (ctx->mnt.inopblog + ctx->mnt.agblklog);
+       next_ag_ino = (__u64)(agno + 1) << (ctx->mnt.inopblog + ctx->mnt.agblklog);
 
        moveon = xfs_iterate_inodes_range(ctx, descr, ctx->fshandle, ag_ino,
                        next_ag_ino - 1, si->fn, si->arg);
index 10dde8e80947054393553140c8832dc320e2993a..6879cc331882357d6d49acdb30d0879107f1403b 100644 (file)
@@ -140,11 +140,6 @@ _("Does not appear to be an XFS filesystem!"));
                return false;
        }
 
-       ctx->agblklog = log2_roundup(ctx->mnt.fsgeom.agblocks);
-       ctx->blocklog = highbit32(ctx->mnt.fsgeom.blocksize);
-       ctx->inodelog = highbit32(ctx->mnt.fsgeom.inodesize);
-       ctx->inopblog = ctx->blocklog - ctx->inodelog;
-
        error = path_to_fshandle(ctx->mntpoint, &ctx->fshandle,
                        &ctx->fshandle_len);
        if (error) {
index a42d82133f06277002c5e850a6d06850bab7f790..579e08c385ffada4b85f88005bbe93ca774a64ce 100644 (file)
@@ -52,8 +52,8 @@ xfs_scrub_inode_vfs_error(
        xfs_agino_t             agino;
        int                     old_errno = errno;
 
-       agno = bstat->bs_ino / (1ULL << (ctx->inopblog + ctx->agblklog));
-       agino = bstat->bs_ino % (1ULL << (ctx->inopblog + ctx->agblklog));
+       agno = bstat->bs_ino / (1ULL << (ctx->mnt.inopblog + ctx->mnt.agblklog));
+       agino = bstat->bs_ino % (1ULL << (ctx->mnt.inopblog + ctx->mnt.agblklog));
        snprintf(descr, DESCR_BUFSZ, _("inode %"PRIu64" (%u/%u)"),
                        (uint64_t)bstat->bs_ino, agno, agino);
        errno = old_errno;
@@ -77,7 +77,7 @@ xfs_scrub_inode(
        int                     error;
 
        xfs_action_list_init(&alist);
-       agno = bstat->bs_ino / (1ULL << (ctx->inopblog + ctx->agblklog));
+       agno = bstat->bs_ino / (1ULL << (ctx->mnt.inopblog + ctx->mnt.agblklog));
        background_sleep();
 
        /* Try to open the inode to pin it. */
index 748885d4891406bd4d1b1e71bc8293713b7ca203..36ec27b38704304d3211a93f37f8d6cecfa22cd2 100644 (file)
@@ -239,8 +239,8 @@ xfs_scrub_connections(
        int                     fd = -1;
        int                     error;
 
-       agno = bstat->bs_ino / (1ULL << (ctx->inopblog + ctx->agblklog));
-       agino = bstat->bs_ino % (1ULL << (ctx->inopblog + ctx->agblklog));
+       agno = bstat->bs_ino / (1ULL << (ctx->mnt.inopblog + ctx->mnt.agblklog));
+       agino = bstat->bs_ino % (1ULL << (ctx->mnt.inopblog + ctx->mnt.agblklog));
        snprintf(descr, DESCR_BUFSZ, _("inode %"PRIu64" (%u/%u)"),
                        (uint64_t)bstat->bs_ino, agno, agino);
        background_sleep();
index e5a0b3c1eb34e8aa2177b5f9f991d4e2d1e91455..489712702c4b3d2989d7f69a805a614274e56f4f 100644 (file)
@@ -547,7 +547,7 @@ xfs_estimate_verify_work(
        if (!moveon)
                return moveon;
 
-       *items = ((d_blocks - d_bfree) + (r_blocks - r_bfree)) << ctx->blocklog;
+       *items = ((d_blocks - d_bfree) + (r_blocks - r_bfree)) << ctx->mnt.blocklog;
        *nr_threads = disk_heads(ctx->datadev);
        *rshift = 20;
        return moveon;
index 13959ca88d35c360d6c28762a7653f136d01d1ac..41a7735649a2cf1c7e164af0dbfc28ad04e6d957 100644 (file)
@@ -148,11 +148,11 @@ xfs_scan_summary(
         * filesystem treats them as "free", but since we scanned
         * them, we'll consider them used.
         */
-       d_bfree -= totalcount.agbytes >> ctx->blocklog;
+       d_bfree -= totalcount.agbytes >> ctx->mnt.blocklog;
 
        /* Report on what we found. */
-       used_data = (d_blocks - d_bfree) << ctx->blocklog;
-       used_rt = (r_blocks - r_bfree) << ctx->blocklog;
+       used_data = (d_blocks - d_bfree) << ctx->mnt.blocklog;
+       used_rt = (r_blocks - r_bfree) << ctx->mnt.blocklog;
        used_files = f_files - f_free;
        stat_data = totalcount.dbytes;
        stat_rt = totalcount.rbytes;
index 2af106eadd8d7f418bcb0ef7fb65627885d75a34..6178f324bea5f6532d91aa0349c5dbe293755281 100644 (file)
@@ -63,10 +63,6 @@ struct scrub_ctx {
 
        /* XFS specific geometry */
        struct fs_path          fsinfo;
-       unsigned int            agblklog;
-       unsigned int            blocklog;
-       unsigned int            inodelog;
-       unsigned int            inopblog;
        void                    *fshandle;
        size_t                  fshandle_len;