f2fs: deprecate f2fs_trace_io
authorJaegeuk Kim <jaegeuk@kernel.org>
Thu, 14 Jan 2021 21:59:09 +0000 (13:59 -0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 27 Jan 2021 23:20:07 +0000 (15:20 -0800)
This patch deprecates f2fs_trace_io, since f2fs uses page->private more broadly,
resulting in more buggy cases.

Acked-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/Kconfig
fs/f2fs/Makefile
fs/f2fs/checkpoint.c
fs/f2fs/data.c
fs/f2fs/file.c
fs/f2fs/node.c
fs/f2fs/segment.c
fs/f2fs/super.c
fs/f2fs/trace.c [deleted file]
fs/f2fs/trace.h [deleted file]

index 63c1fc1..62e638a 100644 (file)
@@ -76,16 +76,6 @@ config F2FS_CHECK_FS
 
          If you want to improve the performance, say N.
 
-config F2FS_IO_TRACE
-       bool "F2FS IO tracer"
-       depends on F2FS_FS
-       depends on FUNCTION_TRACER
-       help
-         F2FS IO trace is based on a function trace, which gathers process
-         information and block IO patterns in the filesystem level.
-
-         If unsure, say N.
-
 config F2FS_FAULT_INJECTION
        bool "F2FS fault injection facility"
        depends on F2FS_FS
index ee7316b..e529574 100644 (file)
@@ -7,6 +7,5 @@ f2fs-y          += shrinker.o extent_cache.o sysfs.o
 f2fs-$(CONFIG_F2FS_STAT_FS) += debug.o
 f2fs-$(CONFIG_F2FS_FS_XATTR) += xattr.o
 f2fs-$(CONFIG_F2FS_FS_POSIX_ACL) += acl.o
-f2fs-$(CONFIG_F2FS_IO_TRACE) += trace.o
 f2fs-$(CONFIG_FS_VERITY) += verity.o
 f2fs-$(CONFIG_F2FS_FS_COMPRESSION) += compress.o
index 897edb7..8c79ba0 100644 (file)
@@ -17,7 +17,6 @@
 #include "f2fs.h"
 #include "node.h"
 #include "segment.h"
-#include "trace.h"
 #include <trace/events/f2fs.h>
 
 static struct kmem_cache *ino_entry_slab;
@@ -443,7 +442,6 @@ static int f2fs_set_meta_page_dirty(struct page *page)
                __set_page_dirty_nobuffers(page);
                inc_page_count(F2FS_P_SB(page), F2FS_DIRTY_META);
                f2fs_set_page_private(page, 0);
-               f2fs_trace_pid(page);
                return 1;
        }
        return 0;
@@ -1017,7 +1015,6 @@ void f2fs_update_dirty_page(struct inode *inode, struct page *page)
        spin_unlock(&sbi->inode_lock[type]);
 
        f2fs_set_page_private(page, 0);
-       f2fs_trace_pid(page);
 }
 
 void f2fs_remove_dirty_inode(struct inode *inode)
index d9a063d..38476d0 100644 (file)
@@ -25,7 +25,6 @@
 #include "f2fs.h"
 #include "node.h"
 #include "segment.h"
-#include "trace.h"
 #include <trace/events/f2fs.h>
 
 #define NUM_PREALLOC_POST_READ_CTXS    128
@@ -679,7 +678,6 @@ int f2fs_submit_page_bio(struct f2fs_io_info *fio)
                return -EFSCORRUPTED;
 
        trace_f2fs_submit_page_bio(page, fio);
-       f2fs_trace_ios(fio, 0);
 
        /* Allocate a new bio */
        bio = __bio_alloc(fio, 1);
@@ -884,7 +882,6 @@ int f2fs_merge_page_bio(struct f2fs_io_info *fio)
                return -EFSCORRUPTED;
 
        trace_f2fs_submit_page_bio(page, fio);
-       f2fs_trace_ios(fio, 0);
 
        if (bio && !page_is_mergeable(fio->sbi, bio, *fio->last_block,
                                                fio->new_blkaddr))
@@ -981,7 +978,6 @@ alloc_new:
                wbc_account_cgroup_owner(fio->io_wbc, bio_page, PAGE_SIZE);
 
        io->last_block_in_bio = fio->new_blkaddr;
-       f2fs_trace_ios(fio, 0);
 
        trace_f2fs_submit_page_write(fio->page, fio);
 skip:
index e768371..7db27c8 100644 (file)
@@ -29,7 +29,6 @@
 #include "xattr.h"
 #include "acl.h"
 #include "gc.h"
-#include "trace.h"
 #include <trace/events/f2fs.h>
 #include <uapi/linux/f2fs.h>
 
@@ -369,7 +368,6 @@ flush_out:
        f2fs_update_time(sbi, REQ_TIME);
 out:
        trace_f2fs_sync_file_exit(inode, cp_reason, datasync, ret);
-       f2fs_trace_ios(NULL, 1);
        return ret;
 }
 
index 5e3faba..a8a0fb8 100644 (file)
@@ -17,7 +17,6 @@
 #include "node.h"
 #include "segment.h"
 #include "xattr.h"
-#include "trace.h"
 #include <trace/events/f2fs.h>
 
 #define on_f2fs_build_free_nids(nmi) mutex_is_locked(&(nm_i)->build_lock)
@@ -2089,7 +2088,6 @@ static int f2fs_set_node_page_dirty(struct page *page)
                __set_page_dirty_nobuffers(page);
                inc_page_count(F2FS_P_SB(page), F2FS_DIRTY_NODES);
                f2fs_set_page_private(page, 0);
-               f2fs_trace_pid(page);
                return 1;
        }
        return 0;
index deca74c..7d34f1c 100644 (file)
@@ -20,7 +20,6 @@
 #include "segment.h"
 #include "node.h"
 #include "gc.h"
-#include "trace.h"
 #include <trace/events/f2fs.h>
 
 #define __reverse_ffz(x) __reverse_ffs(~(x))
@@ -187,8 +186,6 @@ void f2fs_register_inmem_page(struct inode *inode, struct page *page)
 {
        struct inmem_pages *new;
 
-       f2fs_trace_pid(page);
-
        f2fs_set_page_private(page, ATOMIC_WRITTEN_PAGE);
 
        new = f2fs_kmem_cache_alloc(inmem_entry_slab, GFP_NOFS);
index 6a30876..fc34324 100644 (file)
@@ -33,7 +33,6 @@
 #include "segment.h"
 #include "xattr.h"
 #include "gc.h"
-#include "trace.h"
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/f2fs.h>
@@ -1448,8 +1447,6 @@ int f2fs_sync_fs(struct super_block *sb, int sync)
                err = f2fs_write_checkpoint(sbi, &cpc);
                up_write(&sbi->gc_lock);
        }
-       f2fs_trace_ios(NULL, 1);
-
        return err;
 }
 
@@ -4127,8 +4124,6 @@ static int __init init_f2fs_fs(void)
                return -EINVAL;
        }
 
-       f2fs_build_trace_ios();
-
        err = init_inodecache();
        if (err)
                goto fail;
@@ -4221,7 +4216,6 @@ static void __exit exit_f2fs_fs(void)
        f2fs_destroy_segment_manager_caches();
        f2fs_destroy_node_manager_caches();
        destroy_inodecache();
-       f2fs_destroy_trace_ios();
 }
 
 module_init(init_f2fs_fs)
diff --git a/fs/f2fs/trace.c b/fs/f2fs/trace.c
deleted file mode 100644 (file)
index d0ab533..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * f2fs IO tracer
- *
- * Copyright (c) 2014 Motorola Mobility
- * Copyright (c) 2014 Jaegeuk Kim <jaegeuk@kernel.org>
- */
-#include <linux/fs.h>
-#include <linux/f2fs_fs.h>
-#include <linux/sched.h>
-#include <linux/radix-tree.h>
-
-#include "f2fs.h"
-#include "trace.h"
-
-static RADIX_TREE(pids, GFP_ATOMIC);
-static spinlock_t pids_lock;
-static struct last_io_info last_io;
-
-static inline void __print_last_io(void)
-{
-       if (!last_io.len)
-               return;
-
-       trace_printk("%3x:%3x %4x %-16s %2x %5x %5x %12x %4x\n",
-                       last_io.major, last_io.minor,
-                       last_io.pid, "----------------",
-                       last_io.type,
-                       last_io.fio.op, last_io.fio.op_flags,
-                       last_io.fio.new_blkaddr,
-                       last_io.len);
-       memset(&last_io, 0, sizeof(last_io));
-}
-
-static int __file_type(struct inode *inode, pid_t pid)
-{
-       if (f2fs_is_atomic_file(inode))
-               return __ATOMIC_FILE;
-       else if (f2fs_is_volatile_file(inode))
-               return __VOLATILE_FILE;
-       else if (S_ISDIR(inode->i_mode))
-               return __DIR_FILE;
-       else if (inode->i_ino == F2FS_NODE_INO(F2FS_I_SB(inode)))
-               return __NODE_FILE;
-       else if (inode->i_ino == F2FS_META_INO(F2FS_I_SB(inode)))
-               return __META_FILE;
-       else if (pid)
-               return __NORMAL_FILE;
-       else
-               return __MISC_FILE;
-}
-
-void f2fs_trace_pid(struct page *page)
-{
-       struct inode *inode = page->mapping->host;
-       pid_t pid = task_pid_nr(current);
-       void *p;
-
-       set_page_private(page, (unsigned long)pid);
-
-retry:
-       if (radix_tree_preload(GFP_NOFS))
-               return;
-
-       spin_lock(&pids_lock);
-       p = radix_tree_lookup(&pids, pid);
-       if (p == current)
-               goto out;
-       if (p)
-               radix_tree_delete(&pids, pid);
-
-       if (radix_tree_insert(&pids, pid, current)) {
-               spin_unlock(&pids_lock);
-               radix_tree_preload_end();
-               cond_resched();
-               goto retry;
-       }
-
-       trace_printk("%3x:%3x %4x %-16s\n",
-                       MAJOR(inode->i_sb->s_dev), MINOR(inode->i_sb->s_dev),
-                       pid, current->comm);
-out:
-       spin_unlock(&pids_lock);
-       radix_tree_preload_end();
-}
-
-void f2fs_trace_ios(struct f2fs_io_info *fio, int flush)
-{
-       struct inode *inode;
-       pid_t pid;
-       int major, minor;
-
-       if (flush) {
-               __print_last_io();
-               return;
-       }
-
-       inode = fio->page->mapping->host;
-       pid = page_private(fio->page);
-
-       major = MAJOR(inode->i_sb->s_dev);
-       minor = MINOR(inode->i_sb->s_dev);
-
-       if (last_io.major == major && last_io.minor == minor &&
-                       last_io.pid == pid &&
-                       last_io.type == __file_type(inode, pid) &&
-                       last_io.fio.op == fio->op &&
-                       last_io.fio.op_flags == fio->op_flags &&
-                       last_io.fio.new_blkaddr + last_io.len ==
-                                                       fio->new_blkaddr) {
-               last_io.len++;
-               return;
-       }
-
-       __print_last_io();
-
-       last_io.major = major;
-       last_io.minor = minor;
-       last_io.pid = pid;
-       last_io.type = __file_type(inode, pid);
-       last_io.fio = *fio;
-       last_io.len = 1;
-       return;
-}
-
-void f2fs_build_trace_ios(void)
-{
-       spin_lock_init(&pids_lock);
-}
-
-#define PIDVEC_SIZE    128
-static unsigned int gang_lookup_pids(pid_t *results, unsigned long first_index,
-                                                       unsigned int max_items)
-{
-       struct radix_tree_iter iter;
-       void **slot;
-       unsigned int ret = 0;
-
-       if (unlikely(!max_items))
-               return 0;
-
-       radix_tree_for_each_slot(slot, &pids, &iter, first_index) {
-               results[ret] = iter.index;
-               if (++ret == max_items)
-                       break;
-       }
-       return ret;
-}
-
-void f2fs_destroy_trace_ios(void)
-{
-       pid_t pid[PIDVEC_SIZE];
-       pid_t next_pid = 0;
-       unsigned int found;
-
-       spin_lock(&pids_lock);
-       while ((found = gang_lookup_pids(pid, next_pid, PIDVEC_SIZE))) {
-               unsigned idx;
-
-               next_pid = pid[found - 1] + 1;
-               for (idx = 0; idx < found; idx++)
-                       radix_tree_delete(&pids, pid[idx]);
-       }
-       spin_unlock(&pids_lock);
-}
diff --git a/fs/f2fs/trace.h b/fs/f2fs/trace.h
deleted file mode 100644 (file)
index 789f6aa..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * f2fs IO tracer
- *
- * Copyright (c) 2014 Motorola Mobility
- * Copyright (c) 2014 Jaegeuk Kim <jaegeuk@kernel.org>
- */
-#ifndef __F2FS_TRACE_H__
-#define __F2FS_TRACE_H__
-
-#ifdef CONFIG_F2FS_IO_TRACE
-#include <trace/events/f2fs.h>
-
-enum file_type {
-       __NORMAL_FILE,
-       __DIR_FILE,
-       __NODE_FILE,
-       __META_FILE,
-       __ATOMIC_FILE,
-       __VOLATILE_FILE,
-       __MISC_FILE,
-};
-
-struct last_io_info {
-       int major, minor;
-       pid_t pid;
-       enum file_type type;
-       struct f2fs_io_info fio;
-       block_t len;
-};
-
-extern void f2fs_trace_pid(struct page *);
-extern void f2fs_trace_ios(struct f2fs_io_info *, int);
-extern void f2fs_build_trace_ios(void);
-extern void f2fs_destroy_trace_ios(void);
-#else
-#define f2fs_trace_pid(p)
-#define f2fs_trace_ios(i, n)
-#define f2fs_build_trace_ios()
-#define f2fs_destroy_trace_ios()
-
-#endif
-#endif /* __F2FS_TRACE_H__ */