aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs
diff options
context:
space:
mode:
authorNamjae Jeon <namjae.jeon@samsung.com>2013-04-19 12:28:40 -0400
committerJaegeuk Kim <jaegeuk.kim@samsung.com>2013-04-23 02:30:27 -0400
commita2a4a7e4abb27c833d4e09ac1d434ab48a64062c (patch)
treed23f6c9419d72e66f24c2094d79a43d6e17a6cb9 /fs/f2fs
parente66509f03e36ef4750bfab8f3a5cf632b313a39b (diff)
f2fs: add tracepoints for sync & inode operations
Add tracepoints in f2fs for tracing the syncing operations like filesystem sync, file sync enter/exit. It will helf to trace the code under debugging scenarios. Also add tracepoints for tracing the various inode operations like building inode, eviction of inode, link/unlike of inodes. Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com> Signed-off-by: Pankaj Kumar <pankaj.km@samsung.com> Acked-by: Steven Rostedt <rostedt@goodmis.org> [Jaegeuk: combine and modify the tracepoint structures] Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Diffstat (limited to 'fs/f2fs')
-rw-r--r--fs/f2fs/file.c7
-rw-r--r--fs/f2fs/inode.c13
-rw-r--r--fs/f2fs/namei.c3
-rw-r--r--fs/f2fs/super.c5
4 files changed, 24 insertions, 4 deletions
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 07be88ddb9f8..0b0ba26ba76e 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -25,6 +25,7 @@
25#include "segment.h" 25#include "segment.h"
26#include "xattr.h" 26#include "xattr.h"
27#include "acl.h" 27#include "acl.h"
28#include <trace/events/f2fs.h>
28 29
29static int f2fs_vm_page_mkwrite(struct vm_area_struct *vma, 30static int f2fs_vm_page_mkwrite(struct vm_area_struct *vma,
30 struct vm_fault *vmf) 31 struct vm_fault *vmf)
@@ -116,9 +117,12 @@ int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
116 if (inode->i_sb->s_flags & MS_RDONLY) 117 if (inode->i_sb->s_flags & MS_RDONLY)
117 return 0; 118 return 0;
118 119
120 trace_f2fs_sync_file_enter(inode);
119 ret = filemap_write_and_wait_range(inode->i_mapping, start, end); 121 ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
120 if (ret) 122 if (ret) {
123 trace_f2fs_sync_file_exit(inode, need_cp, datasync, ret);
121 return ret; 124 return ret;
125 }
122 126
123 /* guarantee free sections for fsync */ 127 /* guarantee free sections for fsync */
124 f2fs_balance_fs(sbi); 128 f2fs_balance_fs(sbi);
@@ -153,6 +157,7 @@ int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
153 } 157 }
154out: 158out:
155 mutex_unlock(&inode->i_mutex); 159 mutex_unlock(&inode->i_mutex);
160 trace_f2fs_sync_file_exit(inode, need_cp, datasync, ret);
156 return ret; 161 return ret;
157} 162}
158 163
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 60105b710958..91ac7f9d88ee 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -16,6 +16,8 @@
16#include "f2fs.h" 16#include "f2fs.h"
17#include "node.h" 17#include "node.h"
18 18
19#include <trace/events/f2fs.h>
20
19void f2fs_set_inode_flags(struct inode *inode) 21void f2fs_set_inode_flags(struct inode *inode)
20{ 22{
21 unsigned int flags = F2FS_I(inode)->i_flags; 23 unsigned int flags = F2FS_I(inode)->i_flags;
@@ -91,13 +93,16 @@ struct inode *f2fs_iget(struct super_block *sb, unsigned long ino)
91{ 93{
92 struct f2fs_sb_info *sbi = F2FS_SB(sb); 94 struct f2fs_sb_info *sbi = F2FS_SB(sb);
93 struct inode *inode; 95 struct inode *inode;
94 int ret; 96 int ret = 0;
95 97
96 inode = iget_locked(sb, ino); 98 inode = iget_locked(sb, ino);
97 if (!inode) 99 if (!inode)
98 return ERR_PTR(-ENOMEM); 100 return ERR_PTR(-ENOMEM);
99 if (!(inode->i_state & I_NEW)) 101
102 if (!(inode->i_state & I_NEW)) {
103 trace_f2fs_iget(inode);
100 return inode; 104 return inode;
105 }
101 if (ino == F2FS_NODE_INO(sbi) || ino == F2FS_META_INO(sbi)) 106 if (ino == F2FS_NODE_INO(sbi) || ino == F2FS_META_INO(sbi))
102 goto make_now; 107 goto make_now;
103 108
@@ -139,11 +144,12 @@ make_now:
139 goto bad_inode; 144 goto bad_inode;
140 } 145 }
141 unlock_new_inode(inode); 146 unlock_new_inode(inode);
142 147 trace_f2fs_iget(inode);
143 return inode; 148 return inode;
144 149
145bad_inode: 150bad_inode:
146 iget_failed(inode); 151 iget_failed(inode);
152 trace_f2fs_iget_exit(inode, ret);
147 return ERR_PTR(ret); 153 return ERR_PTR(ret);
148} 154}
149 155
@@ -239,6 +245,7 @@ void f2fs_evict_inode(struct inode *inode)
239 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); 245 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
240 int ilock; 246 int ilock;
241 247
248 trace_f2fs_evict_inode(inode);
242 truncate_inode_pages(&inode->i_data, 0); 249 truncate_inode_pages(&inode->i_data, 0);
243 250
244 if (inode->i_ino == F2FS_NODE_INO(sbi) || 251 if (inode->i_ino == F2FS_NODE_INO(sbi) ||
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 1dbf11d2bc87..c57fd18b769d 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -18,6 +18,7 @@
18#include "node.h" 18#include "node.h"
19#include "xattr.h" 19#include "xattr.h"
20#include "acl.h" 20#include "acl.h"
21#include <trace/events/f2fs.h>
21 22
22static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode) 23static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode)
23{ 24{
@@ -235,6 +236,7 @@ static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
235 int err = -ENOENT; 236 int err = -ENOENT;
236 int ilock; 237 int ilock;
237 238
239 trace_f2fs_unlink_enter(dir, dentry);
238 f2fs_balance_fs(sbi); 240 f2fs_balance_fs(sbi);
239 241
240 de = f2fs_find_entry(dir, &dentry->d_name, &page); 242 de = f2fs_find_entry(dir, &dentry->d_name, &page);
@@ -255,6 +257,7 @@ static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
255 /* In order to evict this inode, we set it dirty */ 257 /* In order to evict this inode, we set it dirty */
256 mark_inode_dirty(inode); 258 mark_inode_dirty(inode);
257fail: 259fail:
260 trace_f2fs_unlink_exit(inode, err);
258 return err; 261 return err;
259} 262}
260 263
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 541f21ffd8f2..b015b6cd7bd4 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -29,6 +29,9 @@
29#include "segment.h" 29#include "segment.h"
30#include "xattr.h" 30#include "xattr.h"
31 31
32#define CREATE_TRACE_POINTS
33#include <trace/events/f2fs.h>
34
32static struct kmem_cache *f2fs_inode_cachep; 35static struct kmem_cache *f2fs_inode_cachep;
33 36
34enum { 37enum {
@@ -134,6 +137,8 @@ int f2fs_sync_fs(struct super_block *sb, int sync)
134{ 137{
135 struct f2fs_sb_info *sbi = F2FS_SB(sb); 138 struct f2fs_sb_info *sbi = F2FS_SB(sb);
136 139
140 trace_f2fs_sync_fs(sb, sync);
141
137 if (!sbi->s_dirty && !get_pages(sbi, F2FS_DIRTY_NODES)) 142 if (!sbi->s_dirty && !get_pages(sbi, F2FS_DIRTY_NODES))
138 return 0; 143 return 0;
139 144