xfs: standardize EXPERIMENTAL warning generation
authorDarrick J. Wong <djwong@kernel.org>
Mon, 4 Nov 2024 04:18:49 +0000 (20:18 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 5 Nov 2024 21:38:30 +0000 (13:38 -0800)
Refactor the open-coded warnings about EXPERIMENTAL feature use into a
standard helper before we go adding more experimental features.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/scrub/scrub.c
fs/xfs/xfs_fsops.c
fs/xfs/xfs_message.c
fs/xfs/xfs_message.h
fs/xfs/xfs_mount.h
fs/xfs/xfs_pnfs.c
fs/xfs/xfs_super.c
fs/xfs/xfs_xattr.c

index 4cbcf7a86dbec5920af6b2070d9e5e5e287225e8..8a5c3af4cfda38f09dd6214d24653edbfb251f80 100644 (file)
@@ -605,8 +605,7 @@ xfs_scrub_metadata(
        if (error)
                goto out;
 
-       xfs_warn_mount(mp, XFS_OPSTATE_WARNED_SCRUB,
- "EXPERIMENTAL online scrub feature in use. Use at your own risk!");
+       xfs_warn_experimental(mp, XFS_EXPERIMENTAL_SCRUB);
 
        sc = kzalloc(sizeof(struct xfs_scrub), XCHK_GFP_FLAGS);
        if (!sc) {
index 82812a458cf10f6bcc8270aafcbee74dcc956de9..28dde215c899530ceb0efb25f9aa3507f085db4e 100644 (file)
@@ -162,9 +162,7 @@ xfs_growfs_data_private(
                error = xfs_resizefs_init_new_ags(tp, &id, oagcount, nagcount,
                                delta, last_pag, &lastag_extended);
        } else {
-               xfs_warn_mount(mp, XFS_OPSTATE_WARNED_SHRINK,
-       "EXPERIMENTAL online shrink feature in use. Use at your own risk!");
-
+               xfs_warn_experimental(mp, XFS_EXPERIMENTAL_SHRINK);
                error = xfs_ag_shrink_space(last_pag, &tp, -delta);
        }
        xfs_perag_put(last_pag);
index 8f495cc23903b221691632a9034c93141a29e3c9..c7aa16af6f0996a1dfc069ae457c70e2202a91af 100644 (file)
@@ -131,3 +131,50 @@ xfs_buf_alert_ratelimited(
        __xfs_printk(KERN_ALERT, mp, &vaf);
        va_end(args);
 }
+
+void
+xfs_warn_experimental(
+       struct xfs_mount                *mp,
+       enum xfs_experimental_feat      feat)
+{
+       static const struct {
+               const char              *name;
+               long                    opstate;
+       } features[] = {
+               [XFS_EXPERIMENTAL_PNFS] = {
+                       .opstate        = XFS_OPSTATE_WARNED_PNFS,
+                       .name           = "pNFS",
+               },
+               [XFS_EXPERIMENTAL_SCRUB] = {
+                       .opstate        = XFS_OPSTATE_WARNED_SCRUB,
+                       .name           = "online scrub",
+               },
+               [XFS_EXPERIMENTAL_SHRINK] = {
+                       .opstate        = XFS_OPSTATE_WARNED_SHRINK,
+                       .name           = "online shrink",
+               },
+               [XFS_EXPERIMENTAL_LARP] = {
+                       .opstate        = XFS_OPSTATE_WARNED_LARP,
+                       .name           = "logged extended attributes",
+               },
+               [XFS_EXPERIMENTAL_LBS] = {
+                       .opstate        = XFS_OPSTATE_WARNED_LBS,
+                       .name           = "large block size",
+               },
+               [XFS_EXPERIMENTAL_EXCHRANGE] = {
+                       .opstate        = XFS_OPSTATE_WARNED_EXCHRANGE,
+                       .name           = "exchange range",
+               },
+               [XFS_EXPERIMENTAL_PPTR] = {
+                       .opstate        = XFS_OPSTATE_WARNED_PPTR,
+                       .name           = "parent pointer",
+               },
+       };
+       ASSERT(feat >= 0 && feat < XFS_EXPERIMENTAL_MAX);
+       BUILD_BUG_ON(ARRAY_SIZE(features) != XFS_EXPERIMENTAL_MAX);
+
+       if (xfs_should_warn(mp, features[feat].opstate))
+               xfs_warn(mp,
+ "EXPERIMENTAL %s feature enabled.  Use at your own risk!",
+                               features[feat].name);
+}
index cc323775a12c31b366d72472efc2da44e186ed7a..5be8be72f225a6ff76d5c6bf9e1ff1a5c9059343 100644 (file)
@@ -75,12 +75,6 @@ do {                                                                 \
 #define xfs_debug_ratelimited(dev, fmt, ...)                           \
        xfs_printk_ratelimited(xfs_debug, dev, fmt, ##__VA_ARGS__)
 
-#define xfs_warn_mount(mp, warntag, fmt, ...)                          \
-do {                                                                   \
-       if (xfs_should_warn((mp), (warntag)))                           \
-               xfs_warn((mp), (fmt), ##__VA_ARGS__);                   \
-} while (0)
-
 #define xfs_warn_once(dev, fmt, ...)                           \
        xfs_printk_once(xfs_warn, dev, fmt, ##__VA_ARGS__)
 #define xfs_notice_once(dev, fmt, ...)                         \
@@ -96,4 +90,17 @@ extern void xfs_hex_dump(const void *p, int length);
 void xfs_buf_alert_ratelimited(struct xfs_buf *bp, const char *rlmsg,
                               const char *fmt, ...);
 
+enum xfs_experimental_feat {
+       XFS_EXPERIMENTAL_PNFS,
+       XFS_EXPERIMENTAL_SCRUB,
+       XFS_EXPERIMENTAL_SHRINK,
+       XFS_EXPERIMENTAL_LARP,
+       XFS_EXPERIMENTAL_LBS,
+       XFS_EXPERIMENTAL_EXCHRANGE,
+       XFS_EXPERIMENTAL_PPTR,
+
+       XFS_EXPERIMENTAL_MAX,
+};
+void xfs_warn_experimental(struct xfs_mount *mp, enum xfs_experimental_feat f);
+
 #endif /* __XFS_MESSAGE_H */
index 1b698878f40cb1b931e58ab5488cc5864aea3112..b82977f654a5e5f4b77431eff937c53083386e90 100644 (file)
@@ -467,18 +467,26 @@ __XFS_HAS_FEAT(nouuid, NOUUID)
  */
 #define XFS_OPSTATE_BLOCKGC_ENABLED    6
 
+/* Kernel has logged a warning about pNFS being used on this fs. */
+#define XFS_OPSTATE_WARNED_PNFS                7
 /* Kernel has logged a warning about online fsck being used on this fs. */
-#define XFS_OPSTATE_WARNED_SCRUB       7
+#define XFS_OPSTATE_WARNED_SCRUB       8
 /* Kernel has logged a warning about shrink being used on this fs. */
-#define XFS_OPSTATE_WARNED_SHRINK      8
+#define XFS_OPSTATE_WARNED_SHRINK      9
 /* Kernel has logged a warning about logged xattr updates being used. */
-#define XFS_OPSTATE_WARNED_LARP                9
+#define XFS_OPSTATE_WARNED_LARP                10
 /* Mount time quotacheck is running */
-#define XFS_OPSTATE_QUOTACHECK_RUNNING 10
+#define XFS_OPSTATE_QUOTACHECK_RUNNING 11
 /* Do we want to clear log incompat flags? */
-#define XFS_OPSTATE_UNSET_LOG_INCOMPAT 11
+#define XFS_OPSTATE_UNSET_LOG_INCOMPAT 12
 /* Filesystem can use logged extended attributes */
-#define XFS_OPSTATE_USE_LARP           12
+#define XFS_OPSTATE_USE_LARP           13
+/* Kernel has logged a warning about blocksize > pagesize on this fs. */
+#define XFS_OPSTATE_WARNED_LBS         14
+/* Kernel has logged a warning about exchange-range being used on this fs. */
+#define XFS_OPSTATE_WARNED_EXCHRANGE   15
+/* Kernel has logged a warning about parent pointers being used on this fs. */
+#define XFS_OPSTATE_WARNED_PPTR                16
 
 #define __XFS_IS_OPSTATE(name, NAME) \
 static inline bool xfs_is_ ## name (struct xfs_mount *mp) \
index 23d16186e1a34addd3f96129ec0842a1a0375e93..6f4479deac6d6847b0ca4b3f1fa31eef1ffd988b 100644 (file)
@@ -58,8 +58,7 @@ xfs_fs_get_uuid(
 {
        struct xfs_mount        *mp = XFS_M(sb);
 
-       xfs_notice_once(mp,
-"Using experimental pNFS feature, use at your own risk!");
+       xfs_warn_experimental(mp, XFS_EXPERIMENTAL_PNFS);
 
        if (*len < sizeof(uuid_t))
                return -EINVAL;
index 457c2d70968d9aa6aebd9a143946a2764cd2faca..b7091728791bf555b8fc0c3fe8f0b00768fa982e 100644 (file)
@@ -1657,9 +1657,7 @@ xfs_fs_fill_super(
                        goto out_free_sb;
                }
 
-               xfs_warn(mp,
-"EXPERIMENTAL: V5 Filesystem with Large Block Size (%d bytes) enabled.",
-                       mp->m_sb.sb_blocksize);
+               xfs_warn_experimental(mp, XFS_EXPERIMENTAL_LBS);
        }
 
        /* Ensure this filesystem fits in the page cache limits */
@@ -1755,12 +1753,10 @@ xfs_fs_fill_super(
        }
 
        if (xfs_has_exchange_range(mp))
-               xfs_warn(mp,
-       "EXPERIMENTAL exchange-range feature enabled. Use at your own risk!");
+               xfs_warn_experimental(mp, XFS_EXPERIMENTAL_EXCHRANGE);
 
        if (xfs_has_parent(mp))
-               xfs_warn(mp,
-       "EXPERIMENTAL parent pointer feature enabled. Use at your own risk!");
+               xfs_warn_experimental(mp, XFS_EXPERIMENTAL_PPTR);
 
        error = xfs_mountfs(mp);
        if (error)
index eaf849260bd672fc1ce02040902b4fff9c5676ce..0f641a9091ecbf17a086b13ab13844639169c027 100644 (file)
@@ -51,8 +51,7 @@ xfs_attr_grab_log_assist(
                return error;
        xfs_set_using_logged_xattrs(mp);
 
-       xfs_warn_mount(mp, XFS_OPSTATE_WARNED_LARP,
- "EXPERIMENTAL logged extended attributes feature in use. Use at your own risk!");
+       xfs_warn_experimental(mp, XFS_EXPERIMENTAL_LARP);
 
        return 0;
 }