]> www.infradead.org Git - users/willy/xarray.git/commitdiff
xfs: define printk_once variants for xfs messages
authorEric Sandeen <sandeen@redhat.com>
Mon, 27 Apr 2020 18:00:42 +0000 (11:00 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Mon, 4 May 2020 16:03:15 +0000 (09:03 -0700)
There are a couple places where we directly call printk_once() and one
of them doesn't follow the standard xfs subsystem printk format as a
result.

#define printk_once variants to go with our existing printk_ratelimited
#defines so we can do one-shot printks in a consistent manner.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/xfs/xfs_message.h
fs/xfs/xfs_mount.c
fs/xfs/xfs_pnfs.c

index 0b05e10995a085fc991b6fb592fad711481a39eb..802a96190d2282ce06f7f986bdd70f25abc39908 100644 (file)
@@ -31,15 +31,27 @@ void xfs_debug(const struct xfs_mount *mp, const char *fmt, ...)
 }
 #endif
 
-#define xfs_printk_ratelimited(func, dev, fmt, ...)            \
+#define xfs_printk_ratelimited(func, dev, fmt, ...)                    \
 do {                                                                   \
        static DEFINE_RATELIMIT_STATE(_rs,                              \
                                      DEFAULT_RATELIMIT_INTERVAL,       \
                                      DEFAULT_RATELIMIT_BURST);         \
        if (__ratelimit(&_rs))                                          \
-               func(dev, fmt, ##__VA_ARGS__);                  \
+               func(dev, fmt, ##__VA_ARGS__);                          \
 } while (0)
 
+#define xfs_printk_once(func, dev, fmt, ...)                   \
+({                                                             \
+       static bool __section(.data.once) __print_once;         \
+       bool __ret_print_once = !__print_once;                  \
+                                                               \
+       if (!__print_once) {                                    \
+               __print_once = true;                            \
+               func(dev, fmt, ##__VA_ARGS__);                  \
+       }                                                       \
+       unlikely(__ret_print_once);                             \
+})
+
 #define xfs_emerg_ratelimited(dev, fmt, ...)                           \
        xfs_printk_ratelimited(xfs_emerg, dev, fmt, ##__VA_ARGS__)
 #define xfs_alert_ratelimited(dev, fmt, ...)                           \
@@ -57,6 +69,11 @@ do {                                                                 \
 #define xfs_debug_ratelimited(dev, fmt, ...)                           \
        xfs_printk_ratelimited(xfs_debug, dev, fmt, ##__VA_ARGS__)
 
+#define xfs_warn_once(dev, fmt, ...)                           \
+       xfs_printk_once(xfs_warn, dev, fmt, ##__VA_ARGS__)
+#define xfs_notice_once(dev, fmt, ...)                         \
+       xfs_printk_once(xfs_notice, dev, fmt, ##__VA_ARGS__)
+
 void assfail(struct xfs_mount *mp, char *expr, char *f, int l);
 void asswarn(struct xfs_mount *mp, char *expr, char *f, int l);
 
index c5513e5a226aca54ca88f3a06c5b43a3b8d8dbc2..bb91f04266b9a05a02e6d77431aae3a270406aea 100644 (file)
@@ -1300,10 +1300,9 @@ xfs_mod_fdblocks(
                spin_unlock(&mp->m_sb_lock);
                return 0;
        }
-       printk_once(KERN_WARNING
-               "Filesystem \"%s\": reserve blocks depleted! "
-               "Consider increasing reserve pool size.",
-               mp->m_super->s_id);
+       xfs_warn_once(mp,
+"Reserve blocks depleted! Consider increasing reserve pool size.");
+
 fdblocks_enospc:
        spin_unlock(&mp->m_sb_lock);
        return -ENOSPC;
index bb3008d390aa9c95cd8c5c6ed74817a21279524a..b101feb2aab4528e772b4355c1d6205e9613a3f0 100644 (file)
@@ -58,9 +58,8 @@ xfs_fs_get_uuid(
 {
        struct xfs_mount        *mp = XFS_M(sb);
 
-       printk_once(KERN_NOTICE
-"XFS (%s): using experimental pNFS feature, use at your own risk!\n",
-               mp->m_super->s_id);
+       xfs_notice_once(mp,
+"Using experimental pNFS feature, use at your own risk!");
 
        if (*len < sizeof(uuid_t))
                return -EINVAL;