f2fs: allocate trace path buffer from names_cache
authorWu Bo <bo.wu@vivo.com>
Fri, 14 Apr 2023 10:43:08 +0000 (18:43 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Thu, 20 Apr 2023 16:38:12 +0000 (09:38 -0700)
It would be better to use the dedicated slab to store path.

Signed-off-by: Wu Bo <bo.wu@vivo.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/f2fs.h
fs/f2fs/file.c

index 6cae94d..d870445 100644 (file)
@@ -3347,6 +3347,19 @@ static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi,
        return kmalloc(size, flags);
 }
 
+static inline void *f2fs_getname(struct f2fs_sb_info *sbi)
+{
+       if (time_to_inject(sbi, FAULT_KMALLOC))
+               return NULL;
+
+       return __getname();
+}
+
+static inline void f2fs_putname(char *buf)
+{
+       __putname(buf);
+}
+
 static inline void *f2fs_kzalloc(struct f2fs_sb_info *sbi,
                                        size_t size, gfp_t flags)
 {
index 1b44112..5ac53d2 100644 (file)
@@ -4372,7 +4372,7 @@ static void f2fs_trace_rw_file_path(struct kiocb *iocb, size_t count, int rw)
        struct inode *inode = file_inode(iocb->ki_filp);
        char *buf, *path;
 
-       buf = f2fs_kmalloc(F2FS_I_SB(inode), PATH_MAX, GFP_KERNEL);
+       buf = f2fs_getname(F2FS_I_SB(inode));
        if (!buf)
                return;
        path = dentry_path_raw(file_dentry(iocb->ki_filp), buf, PATH_MAX);
@@ -4385,7 +4385,7 @@ static void f2fs_trace_rw_file_path(struct kiocb *iocb, size_t count, int rw)
                trace_f2fs_dataread_start(inode, iocb->ki_pos, count,
                                current->pid, path, current->comm);
 free_buf:
-       kfree(buf);
+       f2fs_putname(buf);
 }
 
 static ssize_t f2fs_file_read_iter(struct kiocb *iocb, struct iov_iter *to)