diff options
author | Chao Yu <chao2.yu@samsung.com> | 2014-05-06 04:51:24 -0400 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk.kim@samsung.com> | 2014-05-06 21:21:59 -0400 |
commit | e57484343898094bb8f72a2aa1a50929d27aa027 (patch) | |
tree | 546dabf60fe27846c3a8ea2a834a9bb5bec4b42c | |
parent | ecda0de3430455378f1c02523bf3ad71d91d613a (diff) |
f2fs: add a tracepoint for f2fs_write_{meta,node,data}_pages
This patch adds a tracepoint for f2fs_write_{meta,node,data}_pages to trace when
pages are fsyncing/flushing.
Signed-off-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
-rw-r--r-- | fs/f2fs/checkpoint.c | 2 | ||||
-rw-r--r-- | fs/f2fs/data.c | 2 | ||||
-rw-r--r-- | fs/f2fs/node.c | 2 | ||||
-rw-r--r-- | include/trace/events/f2fs.h | 64 |
4 files changed, 70 insertions, 0 deletions
diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c index c95d62281d7e..fe968c7bfc90 100644 --- a/fs/f2fs/checkpoint.c +++ b/fs/f2fs/checkpoint.c | |||
@@ -186,6 +186,8 @@ static int f2fs_write_meta_pages(struct address_space *mapping, | |||
186 | struct f2fs_sb_info *sbi = F2FS_SB(mapping->host->i_sb); | 186 | struct f2fs_sb_info *sbi = F2FS_SB(mapping->host->i_sb); |
187 | long diff, written; | 187 | long diff, written; |
188 | 188 | ||
189 | trace_f2fs_writepages(mapping->host, wbc, META); | ||
190 | |||
189 | /* collect a number of dirty meta pages and write together */ | 191 | /* collect a number of dirty meta pages and write together */ |
190 | if (wbc->for_kupdate || | 192 | if (wbc->for_kupdate || |
191 | get_pages(sbi, F2FS_DIRTY_META) < nr_pages_to_skip(sbi, META)) | 193 | get_pages(sbi, F2FS_DIRTY_META) < nr_pages_to_skip(sbi, META)) |
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index b997d552880e..21bfafaafe83 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c | |||
@@ -860,6 +860,8 @@ static int f2fs_write_data_pages(struct address_space *mapping, | |||
860 | int ret; | 860 | int ret; |
861 | long diff; | 861 | long diff; |
862 | 862 | ||
863 | trace_f2fs_writepages(mapping->host, wbc, DATA); | ||
864 | |||
863 | /* deal with chardevs and other special file */ | 865 | /* deal with chardevs and other special file */ |
864 | if (!mapping->a_ops->writepage) | 866 | if (!mapping->a_ops->writepage) |
865 | return 0; | 867 | return 0; |
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 49bdddbcadea..3d60d3d34ed2 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c | |||
@@ -1242,6 +1242,8 @@ static int f2fs_write_node_pages(struct address_space *mapping, | |||
1242 | struct f2fs_sb_info *sbi = F2FS_SB(mapping->host->i_sb); | 1242 | struct f2fs_sb_info *sbi = F2FS_SB(mapping->host->i_sb); |
1243 | long diff; | 1243 | long diff; |
1244 | 1244 | ||
1245 | trace_f2fs_writepages(mapping->host, wbc, NODE); | ||
1246 | |||
1245 | /* balancing f2fs's metadata in background */ | 1247 | /* balancing f2fs's metadata in background */ |
1246 | f2fs_balance_fs_bg(sbi); | 1248 | f2fs_balance_fs_bg(sbi); |
1247 | 1249 | ||
diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h index d70991e69e58..91b1fcc5ec93 100644 --- a/include/trace/events/f2fs.h +++ b/include/trace/events/f2fs.h | |||
@@ -772,6 +772,70 @@ DEFINE_EVENT(f2fs__page, f2fs_vm_page_mkwrite, | |||
772 | TP_ARGS(page, type) | 772 | TP_ARGS(page, type) |
773 | ); | 773 | ); |
774 | 774 | ||
775 | TRACE_EVENT(f2fs_writepages, | ||
776 | |||
777 | TP_PROTO(struct inode *inode, struct writeback_control *wbc, int type), | ||
778 | |||
779 | TP_ARGS(inode, wbc, type), | ||
780 | |||
781 | TP_STRUCT__entry( | ||
782 | __field(dev_t, dev) | ||
783 | __field(ino_t, ino) | ||
784 | __field(int, type) | ||
785 | __field(int, dir) | ||
786 | __field(long, nr_to_write) | ||
787 | __field(long, pages_skipped) | ||
788 | __field(loff_t, range_start) | ||
789 | __field(loff_t, range_end) | ||
790 | __field(pgoff_t, writeback_index) | ||
791 | __field(int, sync_mode) | ||
792 | __field(char, for_kupdate) | ||
793 | __field(char, for_background) | ||
794 | __field(char, tagged_writepages) | ||
795 | __field(char, for_reclaim) | ||
796 | __field(char, range_cyclic) | ||
797 | __field(char, for_sync) | ||
798 | ), | ||
799 | |||
800 | TP_fast_assign( | ||
801 | __entry->dev = inode->i_sb->s_dev; | ||
802 | __entry->ino = inode->i_ino; | ||
803 | __entry->type = type; | ||
804 | __entry->dir = S_ISDIR(inode->i_mode); | ||
805 | __entry->nr_to_write = wbc->nr_to_write; | ||
806 | __entry->pages_skipped = wbc->pages_skipped; | ||
807 | __entry->range_start = wbc->range_start; | ||
808 | __entry->range_end = wbc->range_end; | ||
809 | __entry->writeback_index = inode->i_mapping->writeback_index; | ||
810 | __entry->sync_mode = wbc->sync_mode; | ||
811 | __entry->for_kupdate = wbc->for_kupdate; | ||
812 | __entry->for_background = wbc->for_background; | ||
813 | __entry->tagged_writepages = wbc->tagged_writepages; | ||
814 | __entry->for_reclaim = wbc->for_reclaim; | ||
815 | __entry->range_cyclic = wbc->range_cyclic; | ||
816 | __entry->for_sync = wbc->for_sync; | ||
817 | ), | ||
818 | |||
819 | TP_printk("dev = (%d,%d), ino = %lu, %s, %s, nr_to_write %ld, " | ||
820 | "skipped %ld, start %lld, end %lld, wb_idx %lu, sync_mode %d, " | ||
821 | "kupdate %u background %u tagged %u reclaim %u cyclic %u sync %u", | ||
822 | show_dev_ino(__entry), | ||
823 | show_block_type(__entry->type), | ||
824 | show_file_type(__entry->dir), | ||
825 | __entry->nr_to_write, | ||
826 | __entry->pages_skipped, | ||
827 | __entry->range_start, | ||
828 | __entry->range_end, | ||
829 | (unsigned long)__entry->writeback_index, | ||
830 | __entry->sync_mode, | ||
831 | __entry->for_kupdate, | ||
832 | __entry->for_background, | ||
833 | __entry->tagged_writepages, | ||
834 | __entry->for_reclaim, | ||
835 | __entry->range_cyclic, | ||
836 | __entry->for_sync) | ||
837 | ); | ||
838 | |||
775 | TRACE_EVENT(f2fs_submit_page_mbio, | 839 | TRACE_EVENT(f2fs_submit_page_mbio, |
776 | 840 | ||
777 | TP_PROTO(struct page *page, int rw, int type, block_t blk_addr), | 841 | TP_PROTO(struct page *page, int rw, int type, block_t blk_addr), |