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 4cbcf7a..8a5c3af 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 82812a4..28dde21 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 8f495cc..c7aa16a 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 cc32377..5be8be7 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 1b69887..b82977f 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 23d1618..6f4479d 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 457c2d7..b709172 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 eaf8492..0f641a9 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;
 }