From: Darrick J. Wong Date: Mon, 31 Jan 2022 22:27:45 +0000 (-0500) Subject: libxfs: use opstate flags and functions for libxfs mount options X-Git-Tag: v5.15.0-rc0~8 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=2420d095f195a4b591bac945b3830348cd6476c5;p=thirdparty%2Fxfsprogs-dev.git libxfs: use opstate flags and functions for libxfs mount options 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 [sandeen: drop now-unused flags arg from rtmount_init] Reviewed-by: Eric Sandeen Signed-off-by: Eric Sandeen --- diff --git a/include/xfs_mount.h b/include/xfs_mount.h index 5403c7eee..90fd652b3 100644 --- a/include/xfs_mount.h +++ b/include/xfs_mount.h @@ -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) diff --git a/libxfs/init.c b/libxfs/init.c index b63c204df..48d5f6925 100644 --- a/libxfs/init.c +++ b/libxfs/init.c @@ -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); diff --git a/libxfs/libxfs_priv.h b/libxfs/libxfs_priv.h index fd15ed782..2b72751d1 100644 --- a/libxfs/libxfs_priv.h +++ b/libxfs/libxfs_priv.h @@ -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) diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c index abde6fe88..bcd44cd5e 100644 --- a/repair/xfs_repair.c +++ b/repair/xfs_repair.c @@ -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))