diff options
author | Chao Yu <chao2.yu@samsung.com> | 2015-02-05 04:59:59 -0500 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2015-03-03 12:58:47 -0500 |
commit | 1ec4610c522cc51219cc022ef120a928828fa934 (patch) | |
tree | bb287725a378bd5ebc4474bab98e2e95708ee527 /fs/f2fs/data.c | |
parent | 4bf6fd9fedf14a8bab75f3710cd63e7bc8928014 (diff) |
f2fs: add trace for rb-tree extent cache ops
This patch adds trace for lookup/update/shrink/destroy ops in rb-tree extent cache.
Signed-off-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/data.c')
-rw-r--r-- | fs/f2fs/data.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index acdc0767f77c..d7ff4ca5be18 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c | |||
@@ -533,6 +533,8 @@ static bool f2fs_lookup_extent_tree(struct inode *inode, pgoff_t pgofs, | |||
533 | if (is_inode_flag_set(F2FS_I(inode), FI_NO_EXTENT)) | 533 | if (is_inode_flag_set(F2FS_I(inode), FI_NO_EXTENT)) |
534 | return false; | 534 | return false; |
535 | 535 | ||
536 | trace_f2fs_lookup_extent_tree_start(inode, pgofs); | ||
537 | |||
536 | down_read(&sbi->extent_tree_lock); | 538 | down_read(&sbi->extent_tree_lock); |
537 | et = radix_tree_lookup(&sbi->extent_tree_root, inode->i_ino); | 539 | et = radix_tree_lookup(&sbi->extent_tree_root, inode->i_ino); |
538 | if (!et) { | 540 | if (!et) { |
@@ -555,6 +557,8 @@ static bool f2fs_lookup_extent_tree(struct inode *inode, pgoff_t pgofs, | |||
555 | stat_inc_total_hit(sbi->sb); | 557 | stat_inc_total_hit(sbi->sb); |
556 | read_unlock(&et->lock); | 558 | read_unlock(&et->lock); |
557 | 559 | ||
560 | trace_f2fs_lookup_extent_tree_end(inode, pgofs, en); | ||
561 | |||
558 | atomic_dec(&et->refcount); | 562 | atomic_dec(&et->refcount); |
559 | return en ? true : false; | 563 | return en ? true : false; |
560 | } | 564 | } |
@@ -573,6 +577,8 @@ static void f2fs_update_extent_tree(struct inode *inode, pgoff_t fofs, | |||
573 | if (is_inode_flag_set(F2FS_I(inode), FI_NO_EXTENT)) | 577 | if (is_inode_flag_set(F2FS_I(inode), FI_NO_EXTENT)) |
574 | return; | 578 | return; |
575 | 579 | ||
580 | trace_f2fs_update_extent_tree(inode, fofs, blkaddr); | ||
581 | |||
576 | down_write(&sbi->extent_tree_lock); | 582 | down_write(&sbi->extent_tree_lock); |
577 | et = radix_tree_lookup(&sbi->extent_tree_root, ino); | 583 | et = radix_tree_lookup(&sbi->extent_tree_root, ino); |
578 | if (!et) { | 584 | if (!et) { |
@@ -665,6 +671,7 @@ void f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink) | |||
665 | struct radix_tree_iter iter; | 671 | struct radix_tree_iter iter; |
666 | void **slot; | 672 | void **slot; |
667 | unsigned int found; | 673 | unsigned int found; |
674 | unsigned int node_cnt = 0, tree_cnt = 0; | ||
668 | 675 | ||
669 | if (!test_opt(sbi, EXTENT_CACHE)) | 676 | if (!test_opt(sbi, EXTENT_CACHE)) |
670 | return; | 677 | return; |
@@ -691,7 +698,7 @@ void f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink) | |||
691 | 698 | ||
692 | atomic_inc(&et->refcount); | 699 | atomic_inc(&et->refcount); |
693 | write_lock(&et->lock); | 700 | write_lock(&et->lock); |
694 | __free_extent_tree(sbi, et, false); | 701 | node_cnt += __free_extent_tree(sbi, et, false); |
695 | write_unlock(&et->lock); | 702 | write_unlock(&et->lock); |
696 | atomic_dec(&et->refcount); | 703 | atomic_dec(&et->refcount); |
697 | } | 704 | } |
@@ -707,15 +714,19 @@ void f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink) | |||
707 | radix_tree_delete(&sbi->extent_tree_root, et->ino); | 714 | radix_tree_delete(&sbi->extent_tree_root, et->ino); |
708 | kmem_cache_free(extent_tree_slab, et); | 715 | kmem_cache_free(extent_tree_slab, et); |
709 | sbi->total_ext_tree--; | 716 | sbi->total_ext_tree--; |
717 | tree_cnt++; | ||
710 | } | 718 | } |
711 | } | 719 | } |
712 | up_write(&sbi->extent_tree_lock); | 720 | up_write(&sbi->extent_tree_lock); |
721 | |||
722 | trace_f2fs_shrink_extent_tree(sbi, node_cnt, tree_cnt); | ||
713 | } | 723 | } |
714 | 724 | ||
715 | void f2fs_destroy_extent_tree(struct inode *inode) | 725 | void f2fs_destroy_extent_tree(struct inode *inode) |
716 | { | 726 | { |
717 | struct f2fs_sb_info *sbi = F2FS_I_SB(inode); | 727 | struct f2fs_sb_info *sbi = F2FS_I_SB(inode); |
718 | struct extent_tree *et; | 728 | struct extent_tree *et; |
729 | unsigned int node_cnt = 0; | ||
719 | 730 | ||
720 | if (!test_opt(sbi, EXTENT_CACHE)) | 731 | if (!test_opt(sbi, EXTENT_CACHE)) |
721 | return; | 732 | return; |
@@ -731,7 +742,7 @@ void f2fs_destroy_extent_tree(struct inode *inode) | |||
731 | 742 | ||
732 | /* free all extent info belong to this extent tree */ | 743 | /* free all extent info belong to this extent tree */ |
733 | write_lock(&et->lock); | 744 | write_lock(&et->lock); |
734 | __free_extent_tree(sbi, et, true); | 745 | node_cnt = __free_extent_tree(sbi, et, true); |
735 | write_unlock(&et->lock); | 746 | write_unlock(&et->lock); |
736 | 747 | ||
737 | atomic_dec(&et->refcount); | 748 | atomic_dec(&et->refcount); |
@@ -749,6 +760,7 @@ void f2fs_destroy_extent_tree(struct inode *inode) | |||
749 | sbi->total_ext_tree--; | 760 | sbi->total_ext_tree--; |
750 | up_write(&sbi->extent_tree_lock); | 761 | up_write(&sbi->extent_tree_lock); |
751 | out: | 762 | out: |
763 | trace_f2fs_destroy_extent_tree(inode, node_cnt); | ||
752 | return; | 764 | return; |
753 | } | 765 | } |
754 | 766 | ||