]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: convert xfs_fs_geometry to use mount feature checks
authorDave Chinner <dchinner@redhat.com>
Mon, 31 Jan 2022 22:27:44 +0000 (17:27 -0500)
committerEric Sandeen <sandeen@redhat.com>
Mon, 31 Jan 2022 22:27:44 +0000 (17:27 -0500)
Source kernel commit: 03288b19093b9bcff72f0d5f90c578daf053f759

Reporting filesystem features to userspace is currently superblock
based. Now we have a general mount-based feature infrastructure,
switch to using the xfs_mount rather than the superblock directly.

This reduces the size of the function by over 300 bytes.

$ size -t fs/xfs/built-in.a
text    data     bss     dec     hex filename
before  1127855  311352     484 1439691  15f7cb (TOTALS)
after   1127535  311352     484 1439371  15f68b (TOTALS)

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
db/info.c
libxfs/xfs_sb.c
libxfs/xfs_sb.h
mkfs/xfs_mkfs.c

index fdee76ba50ab21521ede0d01b97a7f68b3f49ff7..b69bae9192b0edeac319cf5671c87f106dd3b68c 100644 (file)
--- a/db/info.c
+++ b/db/info.c
@@ -29,7 +29,7 @@ info_f(
 {
        struct xfs_fsop_geom    geo;
 
-       libxfs_fs_geometry(&mp->m_sb, &geo, XFS_FS_GEOM_MAX_STRUCT_VER);
+       libxfs_fs_geometry(mp, &geo, XFS_FS_GEOM_MAX_STRUCT_VER);
        xfs_report_geom(&geo, fsdevice, x.logname, x.rtname);
        return 0;
 }
index d2de96d149ca50b7e7942a870643134db56572b3..bc22620848a1d74208a4ba86d477b68d06623351 100644 (file)
@@ -1014,10 +1014,12 @@ out:
 
 void
 xfs_fs_geometry(
-       struct xfs_sb           *sbp,
+       struct xfs_mount        *mp,
        struct xfs_fsop_geom    *geo,
        int                     struct_version)
 {
+       struct xfs_sb           *sbp = &mp->m_sb;
+
        memset(geo, 0, sizeof(struct xfs_fsop_geom));
 
        geo->blocksize = sbp->sb_blocksize;
@@ -1048,51 +1050,51 @@ xfs_fs_geometry(
        geo->flags = XFS_FSOP_GEOM_FLAGS_NLINK |
                     XFS_FSOP_GEOM_FLAGS_DIRV2 |
                     XFS_FSOP_GEOM_FLAGS_EXTFLG;
-       if (xfs_sb_version_hasattr(sbp))
+       if (xfs_has_attr(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_ATTR;
-       if (xfs_sb_version_hasquota(sbp))
+       if (xfs_has_quota(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_QUOTA;
-       if (xfs_sb_version_hasalign(sbp))
+       if (xfs_has_align(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_IALIGN;
-       if (xfs_sb_version_hasdalign(sbp))
+       if (xfs_has_dalign(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_DALIGN;
-       if (xfs_sb_version_hassector(sbp))
-               geo->flags |= XFS_FSOP_GEOM_FLAGS_SECTOR;
-       if (xfs_sb_version_hasasciici(sbp))
+       if (xfs_has_asciici(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_DIRV2CI;
-       if (xfs_sb_version_haslazysbcount(sbp))
+       if (xfs_has_lazysbcount(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_LAZYSB;
-       if (xfs_sb_version_hasattr2(sbp))
+       if (xfs_has_attr2(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_ATTR2;
-       if (xfs_sb_version_hasprojid32(sbp))
+       if (xfs_has_projid32(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_PROJID32;
-       if (xfs_sb_version_hascrc(sbp))
+       if (xfs_has_crc(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_V5SB;
-       if (xfs_sb_version_hasftype(sbp))
+       if (xfs_has_ftype(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_FTYPE;
-       if (xfs_sb_version_hasfinobt(sbp))
+       if (xfs_has_finobt(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_FINOBT;
-       if (xfs_sb_version_hassparseinodes(sbp))
+       if (xfs_has_sparseinodes(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_SPINODES;
-       if (xfs_sb_version_hasrmapbt(sbp))
+       if (xfs_has_rmapbt(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_RMAPBT;
-       if (xfs_sb_version_hasreflink(sbp))
+       if (xfs_has_reflink(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_REFLINK;
-       if (xfs_sb_version_hasbigtime(sbp))
+       if (xfs_has_bigtime(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_BIGTIME;
-       if (xfs_sb_version_hasinobtcounts(sbp))
+       if (xfs_has_inobtcounts(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_INOBTCNT;
-       if (xfs_sb_version_hassector(sbp))
+       if (xfs_has_sector(mp)) {
+               geo->flags |= XFS_FSOP_GEOM_FLAGS_SECTOR;
                geo->logsectsize = sbp->sb_logsectsize;
-       else
+       } else {
                geo->logsectsize = BBSIZE;
+       }
        geo->rtsectsize = sbp->sb_blocksize;
        geo->dirblocksize = xfs_dir2_dirblock_bytes(sbp);
 
        if (struct_version < 4)
                return;
 
-       if (xfs_sb_version_haslogv2(sbp))
+       if (xfs_has_logv2(mp))
                geo->flags |= XFS_FSOP_GEOM_FLAGS_LOGV2;
 
        geo->logsunit = sbp->sb_logsunit;
index d2dd99cb6921cf2a64c9f036e6ce4c91e9b7c08a..8902f4bfa5dfa0fae7a105b3e10e95987cc849b5 100644 (file)
@@ -25,7 +25,7 @@ extern uint64_t       xfs_sb_version_to_features(struct xfs_sb *sbp);
 extern int     xfs_update_secondary_sbs(struct xfs_mount *mp);
 
 #define XFS_FS_GEOM_MAX_STRUCT_VER     (4)
-extern void    xfs_fs_geometry(struct xfs_sb *sbp, struct xfs_fsop_geom *geo,
+extern void    xfs_fs_geometry(struct xfs_mount *mp, struct xfs_fsop_geom *geo,
                                int struct_version);
 extern int     xfs_sb_read_secondary(struct xfs_mount *mp,
                                struct xfs_trans *tp, xfs_agnumber_t agno,
index 2340b7b134cd0c8097e91c61e26f9d1a874a261e..63895f28d6be5dd96eda6b46d99392b6f6c12995 100644 (file)
@@ -4038,7 +4038,7 @@ main(
        if (!quiet || dry_run) {
                struct xfs_fsop_geom    geo;
 
-               libxfs_fs_geometry(sbp, &geo, XFS_FS_GEOM_MAX_STRUCT_VER);
+               libxfs_fs_geometry(mp, &geo, XFS_FS_GEOM_MAX_STRUCT_VER);
                xfs_report_geom(&geo, dfile, logfile, rtfile);
                if (dry_run)
                        exit(0);