Commit ecc8065d authored by Darrick J. Wong's avatar Darrick J. Wong
Browse files

xfs: standardize EXPERIMENTAL warning generation



Refactor the open-coded warnings about EXPERIMENTAL feature use into a
standard helper before we go adding more experimental features.

Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent 4d272929
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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) {
+1 −3
Original line number Diff line number Diff line
@@ -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);
+47 −0
Original line number Diff line number Diff line
@@ -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);
}
+13 −6
Original line number Diff line number Diff line
@@ -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 */
+14 −6
Original line number Diff line number Diff line
@@ -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) \
Loading