ext4: export msg_count and warning_count via sysfs
This numbers can be analized by system automation similar to errors_count. In ideal world it would be nice to have separate counters for different log-levels, but this makes this patch too intrusive. Signed-off-by: Dmitry Monakhov <dmtrmonakhov@yandex-team.ru> Link: https://lore.kernel.org/r/20200725123313.4467-1-dmtrmonakhov@yandex-team.ru Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
6dbd300129
commit
1cf006ed19
|
@ -1591,6 +1591,8 @@ struct ext4_sb_info {
|
|||
struct ratelimit_state s_err_ratelimit_state;
|
||||
struct ratelimit_state s_warning_ratelimit_state;
|
||||
struct ratelimit_state s_msg_ratelimit_state;
|
||||
atomic_t s_warning_count;
|
||||
atomic_t s_msg_count;
|
||||
|
||||
/* Encryption context for '-o test_dummy_encryption' */
|
||||
struct fscrypt_dummy_context s_dummy_enc_ctx;
|
||||
|
|
|
@ -744,6 +744,7 @@ void __ext4_msg(struct super_block *sb,
|
|||
struct va_format vaf;
|
||||
va_list args;
|
||||
|
||||
atomic_inc(&EXT4_SB(sb)->s_msg_count);
|
||||
if (!___ratelimit(&(EXT4_SB(sb)->s_msg_ratelimit_state), "EXT4-fs"))
|
||||
return;
|
||||
|
||||
|
@ -754,9 +755,12 @@ void __ext4_msg(struct super_block *sb,
|
|||
va_end(args);
|
||||
}
|
||||
|
||||
#define ext4_warning_ratelimit(sb) \
|
||||
___ratelimit(&(EXT4_SB(sb)->s_warning_ratelimit_state), \
|
||||
"EXT4-fs warning")
|
||||
static int ext4_warning_ratelimit(struct super_block *sb)
|
||||
{
|
||||
atomic_inc(&EXT4_SB(sb)->s_warning_count);
|
||||
return ___ratelimit(&(EXT4_SB(sb)->s_warning_ratelimit_state),
|
||||
"EXT4-fs warning");
|
||||
}
|
||||
|
||||
void __ext4_warning(struct super_block *sb, const char *function,
|
||||
unsigned int line, const char *fmt, ...)
|
||||
|
@ -4840,6 +4844,8 @@ no_journal:
|
|||
ratelimit_state_init(&sbi->s_err_ratelimit_state, 5 * HZ, 10);
|
||||
ratelimit_state_init(&sbi->s_warning_ratelimit_state, 5 * HZ, 10);
|
||||
ratelimit_state_init(&sbi->s_msg_ratelimit_state, 5 * HZ, 10);
|
||||
atomic_set(&sbi->s_warning_count, 0);
|
||||
atomic_set(&sbi->s_msg_count, 0);
|
||||
|
||||
kfree(orig_data);
|
||||
return 0;
|
||||
|
|
|
@ -189,6 +189,9 @@ static struct ext4_attr ext4_attr_##_name = { \
|
|||
#define EXT4_RW_ATTR_SBI_UL(_name,_elname) \
|
||||
EXT4_ATTR_OFFSET(_name, 0644, pointer_ul, ext4_sb_info, _elname)
|
||||
|
||||
#define EXT4_RO_ATTR_SBI_ATOMIC(_name,_elname) \
|
||||
EXT4_ATTR_OFFSET(_name, 0444, pointer_atomic, ext4_sb_info, _elname)
|
||||
|
||||
#define EXT4_ATTR_PTR(_name,_mode,_id,_ptr) \
|
||||
static struct ext4_attr ext4_attr_##_name = { \
|
||||
.attr = {.name = __stringify(_name), .mode = _mode }, \
|
||||
|
@ -226,6 +229,8 @@ EXT4_RW_ATTR_SBI_UI(msg_ratelimit_burst, s_msg_ratelimit_state.burst);
|
|||
#ifdef CONFIG_EXT4_DEBUG
|
||||
EXT4_RW_ATTR_SBI_UL(simulate_fail, s_simulate_fail);
|
||||
#endif
|
||||
EXT4_RO_ATTR_SBI_ATOMIC(warning_count, s_warning_count);
|
||||
EXT4_RO_ATTR_SBI_ATOMIC(msg_count, s_msg_count);
|
||||
EXT4_RO_ATTR_ES_UI(errors_count, s_error_count);
|
||||
EXT4_RO_ATTR_ES_U8(first_error_errcode, s_first_error_errcode);
|
||||
EXT4_RO_ATTR_ES_U8(last_error_errcode, s_last_error_errcode);
|
||||
|
@ -269,6 +274,8 @@ static struct attribute *ext4_attrs[] = {
|
|||
ATTR_LIST(msg_ratelimit_interval_ms),
|
||||
ATTR_LIST(msg_ratelimit_burst),
|
||||
ATTR_LIST(errors_count),
|
||||
ATTR_LIST(warning_count),
|
||||
ATTR_LIST(msg_count),
|
||||
ATTR_LIST(first_error_ino),
|
||||
ATTR_LIST(last_error_ino),
|
||||
ATTR_LIST(first_error_block),
|
||||
|
|
Loading…
Reference in New Issue