f2fs: support printk_ratelimited() in f2fs_printk()
authorChao Yu <chao@kernel.org>
Fri, 26 Jan 2024 15:19:16 +0000 (23:19 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 6 Feb 2024 02:58:40 +0000 (18:58 -0800)
This patch supports using printk_ratelimited() in f2fs_printk(), and
wrap ratelimited f2fs_printk() into f2fs_{err,warn,info}_ratelimited(),
then, use these new helps to clean up codes.

Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/compress.c
fs/f2fs/dir.c
fs/f2fs/f2fs.h
fs/f2fs/super.c

index ff26b49c0d71ffb21e58a0fcfd76d5b6a7c605f1..0fd839358c157638a7934d24262b648d3f7534ef 100644 (file)
@@ -512,8 +512,8 @@ static int lzorle_compress_pages(struct compress_ctx *cc)
        ret = lzorle1x_1_compress(cc->rbuf, cc->rlen, cc->cbuf->cdata,
                                        &cc->clen, cc->private);
        if (ret != LZO_E_OK) {
-               printk_ratelimited("%sF2FS-fs (%s): lzo-rle compress failed, ret:%d\n",
-                               KERN_ERR, F2FS_I_SB(cc->inode)->sb->s_id, ret);
+               f2fs_err_ratelimited(F2FS_I_SB(cc->inode),
+                               "lzo-rle compress failed, ret:%d", ret);
                return -EIO;
        }
        return 0;
@@ -780,9 +780,9 @@ void f2fs_decompress_cluster(struct decompress_io_ctx *dic, bool in_task)
                if (provided != calculated) {
                        if (!is_inode_flag_set(dic->inode, FI_COMPRESS_CORRUPT)) {
                                set_inode_flag(dic->inode, FI_COMPRESS_CORRUPT);
-                               printk_ratelimited(
-                                       "%sF2FS-fs (%s): checksum invalid, nid = %lu, %x vs %x",
-                                       KERN_INFO, sbi->sb->s_id, dic->inode->i_ino,
+                               f2fs_info_ratelimited(sbi,
+                                       "checksum invalid, nid = %lu, %x vs %x",
+                                       dic->inode->i_ino,
                                        provided, calculated);
                        }
                        set_sbi_flag(sbi, SBI_NEED_FSCK);
index 042593aed1ec0a79cdae8846d0e79c06674d97ca..3f20d94e12f90aed0c6b50f4bfbfcb5e53828187 100644 (file)
@@ -995,9 +995,8 @@ int f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
                de = &d->dentry[bit_pos];
                if (de->name_len == 0) {
                        if (found_valid_dirent || !bit_pos) {
-                               printk_ratelimited(
-                                       "%sF2FS-fs (%s): invalid namelen(0), ino:%u, run fsck to fix.",
-                                       KERN_WARNING, sbi->sb->s_id,
+                               f2fs_warn_ratelimited(sbi,
+                                       "invalid namelen(0), ino:%u, run fsck to fix.",
                                        le32_to_cpu(de->ino));
                                set_sbi_flag(sbi, SBI_NEED_FSCK);
                        }
index 4481f68d64181ccb71ea327ec93aea865bee4846..b4b737e43a6b3ac4e62839387b25df7e1cb94a30 100644 (file)
@@ -1812,6 +1812,27 @@ struct f2fs_sb_info {
 #endif
 };
 
+__printf(3, 4)
+void f2fs_printk(struct f2fs_sb_info *sbi, bool limit_rate, const char *fmt, ...);
+
+#define f2fs_err(sbi, fmt, ...)                                                \
+       f2fs_printk(sbi, false, KERN_ERR fmt, ##__VA_ARGS__)
+#define f2fs_warn(sbi, fmt, ...)                                       \
+       f2fs_printk(sbi, false, KERN_WARNING fmt, ##__VA_ARGS__)
+#define f2fs_notice(sbi, fmt, ...)                                     \
+       f2fs_printk(sbi, false, KERN_NOTICE fmt, ##__VA_ARGS__)
+#define f2fs_info(sbi, fmt, ...)                                       \
+       f2fs_printk(sbi, false, KERN_INFO fmt, ##__VA_ARGS__)
+#define f2fs_debug(sbi, fmt, ...)                                      \
+       f2fs_printk(sbi, false, KERN_DEBUG fmt, ##__VA_ARGS__)
+
+#define f2fs_err_ratelimited(sbi, fmt, ...)                            \
+       f2fs_printk(sbi, true, KERN_ERR fmt, ##__VA_ARGS__)
+#define f2fs_warn_ratelimited(sbi, fmt, ...)                           \
+       f2fs_printk(sbi, true, KERN_WARNING fmt, ##__VA_ARGS__)
+#define f2fs_info_ratelimited(sbi, fmt, ...)                           \
+       f2fs_printk(sbi, true, KERN_INFO fmt, ##__VA_ARGS__)
+
 #ifdef CONFIG_F2FS_FAULT_INJECTION
 #define time_to_inject(sbi, type) __time_to_inject(sbi, type, __func__,        \
                                                                        __builtin_return_address(0))
@@ -1829,9 +1850,8 @@ static inline bool __time_to_inject(struct f2fs_sb_info *sbi, int type,
        atomic_inc(&ffi->inject_ops);
        if (atomic_read(&ffi->inject_ops) >= ffi->inject_rate) {
                atomic_set(&ffi->inject_ops, 0);
-               printk_ratelimited("%sF2FS-fs (%s) : inject %s in %s of %pS\n",
-                       KERN_INFO, sbi->sb->s_id, f2fs_fault_name[type],
-                       func, parent_func);
+               f2fs_info_ratelimited(sbi, "inject %s in %s of %pS",
+                               f2fs_fault_name[type], func, parent_func);
                return true;
        }
        return false;
@@ -2325,20 +2345,6 @@ release_quota:
        return -ENOSPC;
 }
 
-__printf(2, 3)
-void f2fs_printk(struct f2fs_sb_info *sbi, const char *fmt, ...);
-
-#define f2fs_err(sbi, fmt, ...)                                                \
-       f2fs_printk(sbi, KERN_ERR fmt, ##__VA_ARGS__)
-#define f2fs_warn(sbi, fmt, ...)                                       \
-       f2fs_printk(sbi, KERN_WARNING fmt, ##__VA_ARGS__)
-#define f2fs_notice(sbi, fmt, ...)                                     \
-       f2fs_printk(sbi, KERN_NOTICE fmt, ##__VA_ARGS__)
-#define f2fs_info(sbi, fmt, ...)                                       \
-       f2fs_printk(sbi, KERN_INFO fmt, ##__VA_ARGS__)
-#define f2fs_debug(sbi, fmt, ...)                                      \
-       f2fs_printk(sbi, KERN_DEBUG fmt, ##__VA_ARGS__)
-
 #define PAGE_PRIVATE_GET_FUNC(name, flagname) \
 static inline bool page_private_##name(struct page *page) \
 { \
index e2c066fbc0fa11e4b908c49050d1c41ccbb61bf5..3e2a5e3b3e991932ba926d890278aa923d14ea89 100644 (file)
@@ -264,7 +264,8 @@ static match_table_t f2fs_tokens = {
        {Opt_err, NULL},
 };
 
-void f2fs_printk(struct f2fs_sb_info *sbi, const char *fmt, ...)
+void f2fs_printk(struct f2fs_sb_info *sbi, bool limit_rate,
+                                               const char *fmt, ...)
 {
        struct va_format vaf;
        va_list args;
@@ -275,8 +276,12 @@ void f2fs_printk(struct f2fs_sb_info *sbi, const char *fmt, ...)
        level = printk_get_level(fmt);
        vaf.fmt = printk_skip_level(fmt);
        vaf.va = &args;
-       printk("%c%cF2FS-fs (%s): %pV\n",
-              KERN_SOH_ASCII, level, sbi->sb->s_id, &vaf);
+       if (limit_rate)
+               printk_ratelimited("%c%cF2FS-fs (%s): %pV\n",
+                       KERN_SOH_ASCII, level, sbi->sb->s_id, &vaf);
+       else
+               printk("%c%cF2FS-fs (%s): %pV\n",
+                       KERN_SOH_ASCII, level, sbi->sb->s_id, &vaf);
 
        va_end(args);
 }