aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs
diff options
context:
space:
mode:
authorNamjae Jeon <namjae.jeon@samsung.com>2013-04-19 12:28:52 -0400
committerJaegeuk Kim <jaegeuk.kim@samsung.com>2013-04-23 03:40:38 -0400
commit51dd62493477923723c797c6da60121ed39900ed (patch)
tree7589f4396dc6caf0c043831d6677989babcfa7cf /fs/f2fs
parenta2a4a7e4abb27c833d4e09ac1d434ab48a64062c (diff)
f2fs: add tracepoints for truncate operation
add tracepoints for tracing the truncate operations like truncate node/data blocks, f2fs_truncate etc. Tracepoints are added at entry and exit of operation to trace the success & failure of operation. 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.c9
-rw-r--r--fs/f2fs/node.c20
2 files changed, 27 insertions, 2 deletions
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 0b0ba26ba76e..71efa373cc45 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -193,6 +193,9 @@ static int truncate_data_blocks_range(struct dnode_of_data *dn, int count)
193 sync_inode_page(dn); 193 sync_inode_page(dn);
194 } 194 }
195 dn->ofs_in_node = ofs; 195 dn->ofs_in_node = ofs;
196
197 trace_f2fs_truncate_data_blocks_range(dn->inode, dn->nid,
198 dn->ofs_in_node, nr_free);
196 return nr_free; 199 return nr_free;
197} 200}
198 201
@@ -229,6 +232,8 @@ static int truncate_blocks(struct inode *inode, u64 from)
229 int count = 0, ilock = -1; 232 int count = 0, ilock = -1;
230 int err; 233 int err;
231 234
235 trace_f2fs_truncate_blocks_enter(inode, from);
236
232 free_from = (pgoff_t) 237 free_from = (pgoff_t)
233 ((from + blocksize - 1) >> (sbi->log_blocksize)); 238 ((from + blocksize - 1) >> (sbi->log_blocksize));
234 239
@@ -239,6 +244,7 @@ static int truncate_blocks(struct inode *inode, u64 from)
239 if (err == -ENOENT) 244 if (err == -ENOENT)
240 goto free_next; 245 goto free_next;
241 mutex_unlock_op(sbi, ilock); 246 mutex_unlock_op(sbi, ilock);
247 trace_f2fs_truncate_blocks_exit(inode, err);
242 return err; 248 return err;
243 } 249 }
244 250
@@ -263,6 +269,7 @@ free_next:
263 /* lastly zero out the first data page */ 269 /* lastly zero out the first data page */
264 truncate_partial_data_page(inode, from); 270 truncate_partial_data_page(inode, from);
265 271
272 trace_f2fs_truncate_blocks_exit(inode, err);
266 return err; 273 return err;
267} 274}
268 275
@@ -272,6 +279,8 @@ void f2fs_truncate(struct inode *inode)
272 S_ISLNK(inode->i_mode))) 279 S_ISLNK(inode->i_mode)))
273 return; 280 return;
274 281
282 trace_f2fs_truncate(inode);
283
275 if (!truncate_blocks(inode, i_size_read(inode))) { 284 if (!truncate_blocks(inode, i_size_read(inode))) {
276 inode->i_mtime = inode->i_ctime = CURRENT_TIME; 285 inode->i_mtime = inode->i_ctime = CURRENT_TIME;
277 mark_inode_dirty(inode); 286 mark_inode_dirty(inode);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 5a7edf90ca45..5a825502b0b0 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -19,6 +19,7 @@
19#include "f2fs.h" 19#include "f2fs.h"
20#include "node.h" 20#include "node.h"
21#include "segment.h" 21#include "segment.h"
22#include <trace/events/f2fs.h>
22 23
23static struct kmem_cache *nat_entry_slab; 24static struct kmem_cache *nat_entry_slab;
24static struct kmem_cache *free_nid_slab; 25static struct kmem_cache *free_nid_slab;
@@ -508,6 +509,7 @@ invalidate:
508 509
509 f2fs_put_page(dn->node_page, 1); 510 f2fs_put_page(dn->node_page, 1);
510 dn->node_page = NULL; 511 dn->node_page = NULL;
512 trace_f2fs_truncate_node(dn->inode, dn->nid, ni.blk_addr);
511} 513}
512 514
513static int truncate_dnode(struct dnode_of_data *dn) 515static int truncate_dnode(struct dnode_of_data *dn)
@@ -548,9 +550,13 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
548 if (dn->nid == 0) 550 if (dn->nid == 0)
549 return NIDS_PER_BLOCK + 1; 551 return NIDS_PER_BLOCK + 1;
550 552
553 trace_f2fs_truncate_nodes_enter(dn->inode, dn->nid, dn->data_blkaddr);
554
551 page = get_node_page(sbi, dn->nid); 555 page = get_node_page(sbi, dn->nid);
552 if (IS_ERR(page)) 556 if (IS_ERR(page)) {
557 trace_f2fs_truncate_nodes_exit(dn->inode, PTR_ERR(page));
553 return PTR_ERR(page); 558 return PTR_ERR(page);
559 }
554 560
555 rn = (struct f2fs_node *)page_address(page); 561 rn = (struct f2fs_node *)page_address(page);
556 if (depth < 3) { 562 if (depth < 3) {
@@ -592,10 +598,12 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
592 } else { 598 } else {
593 f2fs_put_page(page, 1); 599 f2fs_put_page(page, 1);
594 } 600 }
601 trace_f2fs_truncate_nodes_exit(dn->inode, freed);
595 return freed; 602 return freed;
596 603
597out_err: 604out_err:
598 f2fs_put_page(page, 1); 605 f2fs_put_page(page, 1);
606 trace_f2fs_truncate_nodes_exit(dn->inode, ret);
599 return ret; 607 return ret;
600} 608}
601 609
@@ -650,6 +658,9 @@ static int truncate_partial_nodes(struct dnode_of_data *dn,
650fail: 658fail:
651 for (i = depth - 3; i >= 0; i--) 659 for (i = depth - 3; i >= 0; i--)
652 f2fs_put_page(pages[i], 1); 660 f2fs_put_page(pages[i], 1);
661
662 trace_f2fs_truncate_partial_nodes(dn->inode, nid, depth, err);
663
653 return err; 664 return err;
654} 665}
655 666
@@ -666,11 +677,15 @@ int truncate_inode_blocks(struct inode *inode, pgoff_t from)
666 struct dnode_of_data dn; 677 struct dnode_of_data dn;
667 struct page *page; 678 struct page *page;
668 679
680 trace_f2fs_truncate_inode_blocks_enter(inode, from);
681
669 level = get_node_path(from, offset, noffset); 682 level = get_node_path(from, offset, noffset);
670 683
671 page = get_node_page(sbi, inode->i_ino); 684 page = get_node_page(sbi, inode->i_ino);
672 if (IS_ERR(page)) 685 if (IS_ERR(page)) {
686 trace_f2fs_truncate_inode_blocks_exit(inode, PTR_ERR(page));
673 return PTR_ERR(page); 687 return PTR_ERR(page);
688 }
674 689
675 set_new_dnode(&dn, inode, page, NULL, 0); 690 set_new_dnode(&dn, inode, page, NULL, 0);
676 unlock_page(page); 691 unlock_page(page);
@@ -740,6 +755,7 @@ skip_partial:
740 } 755 }
741fail: 756fail:
742 f2fs_put_page(page, 0); 757 f2fs_put_page(page, 0);
758 trace_f2fs_truncate_inode_blocks_exit(inode, err);
743 return err > 0 ? 0 : err; 759 return err > 0 ? 0 : err;
744} 760}
745 761