mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-19 21:21:09 +00:00
dm: fix printk() rate limiting code
Using the same rate limiting state for different kinds of messages
is wrong because this can cause a high frequency message to suppress
a report of a low frequency message. Hence use a unique rate limiting
state per message type.
Fixes: 71a16736a1
("dm: use local printk ratelimit")
Cc: stable@vger.kernel.org
Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
68515cc721
commit
604407890e
2 changed files with 12 additions and 39 deletions
|
@ -549,46 +549,29 @@ void *dm_vcalloc(unsigned long nmemb, unsigned long elem_size);
|
|||
*---------------------------------------------------------------*/
|
||||
#define DM_NAME "device-mapper"
|
||||
|
||||
#ifdef CONFIG_PRINTK
|
||||
extern struct ratelimit_state dm_ratelimit_state;
|
||||
|
||||
#define dm_ratelimit() __ratelimit(&dm_ratelimit_state)
|
||||
#else
|
||||
#define dm_ratelimit() 0
|
||||
#endif
|
||||
#define DM_RATELIMIT(pr_func, fmt, ...) \
|
||||
do { \
|
||||
static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL, \
|
||||
DEFAULT_RATELIMIT_BURST); \
|
||||
\
|
||||
if (__ratelimit(&rs)) \
|
||||
pr_func(DM_FMT(fmt), ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define DM_FMT(fmt) DM_NAME ": " DM_MSG_PREFIX ": " fmt "\n"
|
||||
|
||||
#define DMCRIT(fmt, ...) pr_crit(DM_FMT(fmt), ##__VA_ARGS__)
|
||||
|
||||
#define DMERR(fmt, ...) pr_err(DM_FMT(fmt), ##__VA_ARGS__)
|
||||
#define DMERR_LIMIT(fmt, ...) \
|
||||
do { \
|
||||
if (dm_ratelimit()) \
|
||||
DMERR(fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define DMERR_LIMIT(fmt, ...) DM_RATELIMIT(pr_err, fmt, ##__VA_ARGS__)
|
||||
#define DMWARN(fmt, ...) pr_warn(DM_FMT(fmt), ##__VA_ARGS__)
|
||||
#define DMWARN_LIMIT(fmt, ...) \
|
||||
do { \
|
||||
if (dm_ratelimit()) \
|
||||
DMWARN(fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define DMWARN_LIMIT(fmt, ...) DM_RATELIMIT(pr_warn, fmt, ##__VA_ARGS__)
|
||||
#define DMINFO(fmt, ...) pr_info(DM_FMT(fmt), ##__VA_ARGS__)
|
||||
#define DMINFO_LIMIT(fmt, ...) \
|
||||
do { \
|
||||
if (dm_ratelimit()) \
|
||||
DMINFO(fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
#define DMINFO_LIMIT(fmt, ...) DM_RATELIMIT(pr_info, fmt, ##__VA_ARGS__)
|
||||
|
||||
#ifdef CONFIG_DM_DEBUG
|
||||
#define DMDEBUG(fmt, ...) printk(KERN_DEBUG DM_FMT(fmt), ##__VA_ARGS__)
|
||||
#define DMDEBUG_LIMIT(fmt, ...) \
|
||||
do { \
|
||||
if (dm_ratelimit()) \
|
||||
DMDEBUG(fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
#define DMDEBUG_LIMIT(fmt, ...) DM_RATELIMIT(pr_debug, fmt, ##__VA_ARGS__)
|
||||
#else
|
||||
#define DMDEBUG(fmt, ...) no_printk(fmt, ##__VA_ARGS__)
|
||||
#define DMDEBUG_LIMIT(fmt, ...) no_printk(fmt, ##__VA_ARGS__)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue