|
@@ -184,6 +184,22 @@ static const char * const logtypes[] = {
|
|
|
"debug",
|
|
|
};
|
|
|
|
|
|
+
|
|
|
+/*
|
|
|
+ * Use one ratelimit state per log level so that a flood of less important
|
|
|
+ * messages doesn't cause more important ones to be dropped.
|
|
|
+ */
|
|
|
+static struct ratelimit_state printk_limits[] = {
|
|
|
+ RATELIMIT_STATE_INIT(printk_limits[0], DEFAULT_RATELIMIT_INTERVAL, 100),
|
|
|
+ RATELIMIT_STATE_INIT(printk_limits[1], DEFAULT_RATELIMIT_INTERVAL, 100),
|
|
|
+ RATELIMIT_STATE_INIT(printk_limits[2], DEFAULT_RATELIMIT_INTERVAL, 100),
|
|
|
+ RATELIMIT_STATE_INIT(printk_limits[3], DEFAULT_RATELIMIT_INTERVAL, 100),
|
|
|
+ RATELIMIT_STATE_INIT(printk_limits[4], DEFAULT_RATELIMIT_INTERVAL, 100),
|
|
|
+ RATELIMIT_STATE_INIT(printk_limits[5], DEFAULT_RATELIMIT_INTERVAL, 100),
|
|
|
+ RATELIMIT_STATE_INIT(printk_limits[6], DEFAULT_RATELIMIT_INTERVAL, 100),
|
|
|
+ RATELIMIT_STATE_INIT(printk_limits[7], DEFAULT_RATELIMIT_INTERVAL, 100),
|
|
|
+};
|
|
|
+
|
|
|
void btrfs_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
|
|
|
{
|
|
|
struct super_block *sb = fs_info->sb;
|
|
@@ -192,6 +208,7 @@ void btrfs_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
|
|
|
va_list args;
|
|
|
const char *type = logtypes[4];
|
|
|
int kern_level;
|
|
|
+ struct ratelimit_state *ratelimit;
|
|
|
|
|
|
va_start(args, fmt);
|
|
|
|
|
@@ -202,13 +219,18 @@ void btrfs_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
|
|
|
lvl[size] = '\0';
|
|
|
fmt += size;
|
|
|
type = logtypes[kern_level - '0'];
|
|
|
- } else
|
|
|
+ ratelimit = &printk_limits[kern_level - '0'];
|
|
|
+ } else {
|
|
|
*lvl = '\0';
|
|
|
+ /* Default to debug output */
|
|
|
+ ratelimit = &printk_limits[7];
|
|
|
+ }
|
|
|
|
|
|
vaf.fmt = fmt;
|
|
|
vaf.va = &args;
|
|
|
|
|
|
- printk("%sBTRFS %s (device %s): %pV\n", lvl, type, sb->s_id, &vaf);
|
|
|
+ if (__ratelimit(ratelimit))
|
|
|
+ printk("%sBTRFS %s (device %s): %pV\n", lvl, type, sb->s_id, &vaf);
|
|
|
|
|
|
va_end(args);
|
|
|
}
|