]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
libxfs: use opstate flags and functions for libxfs mount options
authorDarrick J. Wong <djwong@kernel.org>
Mon, 31 Jan 2022 22:27:45 +0000 (17:27 -0500)
committerEric Sandeen <sandeen@redhat.com>
Mon, 31 Jan 2022 22:27:45 +0000 (17:27 -0500)
Port the three LIBXFS_MOUNT flags that actually do anything to set
opstate flags in preparation for removing m_flags in a later patch.
Retain the LIBXFS_MOUNT #defines so that libxfs clients can pass them
into libxfs_mount.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
[sandeen: drop now-unused flags arg from rtmount_init]
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
include/xfs_mount.h
libxfs/init.c
libxfs/libxfs_priv.h
repair/xfs_repair.c

index 5403c7eeedbb4abbe05e03da66ee5e06744f453f..90fd652b314d19662187b81566e8d51535f7c962 100644 (file)
@@ -213,6 +213,9 @@ __XFS_UNSUPP_FEAT(readonly)
 
 /* Operational mount state flags */
 #define XFS_OPSTATE_INODE32            0       /* inode32 allocator active */
+#define XFS_OPSTATE_DEBUGGER           1       /* is this the debugger? */
+#define XFS_OPSTATE_REPORT_CORRUPTION  2       /* report buffer corruption? */
+#define XFS_OPSTATE_PERAG_DATA_LOADED  3       /* per-AG data initialized? */
 
 #define __XFS_IS_OPSTATE(name, NAME) \
 static inline bool xfs_is_ ## name (struct xfs_mount *mp) \
@@ -235,6 +238,9 @@ static inline bool xfs_set_ ## name (struct xfs_mount *mp) \
 }
 
 __XFS_IS_OPSTATE(inode32, INODE32)
+__XFS_IS_OPSTATE(debugger, DEBUGGER)
+__XFS_IS_OPSTATE(reporting_corruption, REPORT_CORRUPTION)
+__XFS_IS_OPSTATE(perag_data_loaded, PERAG_DATA_LOADED)
 
 #define __XFS_UNSUPP_OPSTATE(name) \
 static inline bool xfs_is_ ## name (struct xfs_mount *mp) \
@@ -250,7 +256,6 @@ __XFS_UNSUPP_OPSTATE(shutdown)
 #define LIBXFS_MOUNT_COMPAT_ATTR       0x0008
 #define LIBXFS_MOUNT_ATTR2             0x0010
 #define LIBXFS_MOUNT_WANT_CORRUPTED    0x0020
-#define LIBXFS_MOUNT_PERAG_DATA_LOADED 0x0040
 
 #define LIBXFS_BHASHSIZE(sbp)          (1<<10)
 
index b63c204dfc7226eb73b55b447dae7fcfc8164a8a..48d5f6925735e511830d2b61b5e923556f7ff144 100644 (file)
@@ -425,8 +425,7 @@ done:
  */
 static int
 rtmount_init(
-       xfs_mount_t     *mp,    /* file system mount structure */
-       int             flags)
+       xfs_mount_t     *mp)    /* file system mount structure */
 {
        struct xfs_buf  *bp;    /* buffer for last block of subvolume */
        xfs_daddr_t     d;      /* address of last block of subvolume */
@@ -449,7 +448,7 @@ rtmount_init(
                return -1;
        }
 
-       if (mp->m_rtdev_targp->bt_bdev == 0 && !(flags & LIBXFS_MOUNT_DEBUGGER)) {
+       if (mp->m_rtdev_targp->bt_bdev == 0 && !xfs_is_debugger(mp)) {
                fprintf(stderr, _("%s: filesystem has a realtime subvolume\n"),
                        progname);
                return -1;
@@ -464,7 +463,7 @@ rtmount_init(
        /*
         * Allow debugger to be run without the realtime device present.
         */
-       if (flags & LIBXFS_MOUNT_DEBUGGER)
+       if (xfs_is_debugger(mp))
                return 0;
 
        /*
@@ -723,10 +722,13 @@ libxfs_mount(
        struct xfs_buf          *bp;
        struct xfs_sb           *sbp;
        xfs_daddr_t             d;
-       bool                    debugger = (flags & LIBXFS_MOUNT_DEBUGGER);
        int                     error;
 
        mp->m_features = xfs_sb_version_to_features(sb);
+       if (flags & LIBXFS_MOUNT_DEBUGGER)
+               xfs_set_debugger(mp);
+       if (flags & LIBXFS_MOUNT_WANT_CORRUPTED)
+               xfs_set_reporting_corruption(mp);
        libxfs_buftarg_init(mp, dev, logdev, rtdev);
 
        mp->m_finobt_nores = true;
@@ -761,7 +763,7 @@ libxfs_mount(
        d = (xfs_daddr_t) XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks);
        if (XFS_BB_TO_FSB(mp, d) != mp->m_sb.sb_dblocks) {
                fprintf(stderr, _("%s: size check failed\n"), progname);
-               if (!(flags & LIBXFS_MOUNT_DEBUGGER))
+               if (!xfs_is_debugger(mp))
                        return NULL;
        }
 
@@ -810,7 +812,7 @@ libxfs_mount(
                        XFS_FSS_TO_BB(mp, 1), 0, &bp, NULL);
        if (error) {
                fprintf(stderr, _("%s: data size check failed\n"), progname);
-               if (!debugger)
+               if (!xfs_is_debugger(mp))
                        return NULL;
        } else
                libxfs_buf_relse(bp);
@@ -824,7 +826,7 @@ libxfs_mount(
                                0, &bp, NULL)) {
                        fprintf(stderr, _("%s: log size checks failed\n"),
                                        progname);
-                       if (!debugger)
+                       if (!xfs_is_debugger(mp))
                                return NULL;
                }
                if (bp)
@@ -832,7 +834,7 @@ libxfs_mount(
        }
 
        /* Initialize realtime fields in the mount structure */
-       if (rtmount_init(mp, flags)) {
+       if (rtmount_init(mp)) {
                fprintf(stderr, _("%s: realtime device init failed\n"),
                        progname);
                        return NULL;
@@ -852,7 +854,7 @@ libxfs_mount(
                if (error) {
                        fprintf(stderr, _("%s: read of AG %u failed\n"),
                                                progname, sbp->sb_agcount);
-                       if (!debugger)
+                       if (!xfs_is_debugger(mp))
                                return NULL;
                        fprintf(stderr, _("%s: limiting reads to AG 0\n"),
                                                                progname);
@@ -867,7 +869,7 @@ libxfs_mount(
                        progname);
                exit(1);
        }
-       mp->m_flags |= LIBXFS_MOUNT_PERAG_DATA_LOADED;
+       xfs_set_perag_data_loaded(mp);
 
        return mp;
 }
@@ -989,7 +991,7 @@ libxfs_umount(
         * Only try to free the per-AG structures if we set them up in the
         * first place.
         */
-       if (mp->m_flags & LIBXFS_MOUNT_PERAG_DATA_LOADED)
+       if (xfs_is_perag_data_loaded(mp))
                libxfs_free_perag(mp);
 
        kmem_free(mp->m_attr_geo);
index fd15ed7824f5ee17e25a0428bb47d010a13dd809..2b72751d16f6e288337b4faf2308b365af9c7231 100644 (file)
@@ -153,7 +153,7 @@ enum ce { CE_DEBUG, CE_CONT, CE_NOTE, CE_WARN, CE_ALERT, CE_PANIC };
 } while (0)
 
 #define XFS_WARN_CORRUPT(mp, expr) \
-       ( ((mp)->m_flags & LIBXFS_MOUNT_WANT_CORRUPTED) ? \
+       ( xfs_is_reporting_corruption(mp) ? \
           (printf("%s: XFS_WARN_CORRUPT at %s:%d", #expr, \
                   __func__, __LINE__), true) : true)
 
index abde6fe88320eb86b161e41d48e81f4f2538ad4a..bcd44cd5e82047883f2ae396fdc1aadde185c6ce 100644 (file)
@@ -979,7 +979,7 @@ main(int argc, char **argv)
 
        /* Spit out function & line on these corruption macros */
        if (verbose > 2)
-               mp->m_flags |= LIBXFS_MOUNT_WANT_CORRUPTED;
+               xfs_set_reporting_corruption(mp);
 
        /* Capture the first writeback so that we can set needsrepair. */
        if (xfs_has_crc(mp))