diff options
author | Chao Yu <chao2.yu@samsung.com> | 2016-01-08 07:22:52 -0500 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2016-01-08 14:57:11 -0500 |
commit | 68e353851002dc07555b067a0baff1cc2f709c04 (patch) | |
tree | 702bfaa3ff203a120cb550550d41aef77c636952 /fs/f2fs/extent_cache.c | |
parent | da5af127a1a17bac121c6889c88cc90f8a278a84 (diff) |
f2fs: use atomic type for node count in extent tree
1. rename field in struct extent_tree from count to node_cnt for
readability.
2. alter to use atomic type for node_cnt.
Signed-off-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/extent_cache.c')
-rw-r--r-- | fs/f2fs/extent_cache.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c index 4dee2be9a648..9febbc622bf5 100644 --- a/fs/f2fs/extent_cache.c +++ b/fs/f2fs/extent_cache.c | |||
@@ -36,7 +36,7 @@ static struct extent_node *__attach_extent_node(struct f2fs_sb_info *sbi, | |||
36 | 36 | ||
37 | rb_link_node(&en->rb_node, parent, p); | 37 | rb_link_node(&en->rb_node, parent, p); |
38 | rb_insert_color(&en->rb_node, &et->root); | 38 | rb_insert_color(&en->rb_node, &et->root); |
39 | et->count++; | 39 | atomic_inc(&et->node_cnt); |
40 | atomic_inc(&sbi->total_ext_node); | 40 | atomic_inc(&sbi->total_ext_node); |
41 | return en; | 41 | return en; |
42 | } | 42 | } |
@@ -45,7 +45,7 @@ static void __detach_extent_node(struct f2fs_sb_info *sbi, | |||
45 | struct extent_tree *et, struct extent_node *en) | 45 | struct extent_tree *et, struct extent_node *en) |
46 | { | 46 | { |
47 | rb_erase(&en->rb_node, &et->root); | 47 | rb_erase(&en->rb_node, &et->root); |
48 | et->count--; | 48 | atomic_dec(&et->node_cnt); |
49 | atomic_dec(&sbi->total_ext_node); | 49 | atomic_dec(&sbi->total_ext_node); |
50 | 50 | ||
51 | if (et->cached_en == en) | 51 | if (et->cached_en == en) |
@@ -69,7 +69,7 @@ static struct extent_tree *__grab_extent_tree(struct inode *inode) | |||
69 | et->cached_en = NULL; | 69 | et->cached_en = NULL; |
70 | rwlock_init(&et->lock); | 70 | rwlock_init(&et->lock); |
71 | INIT_LIST_HEAD(&et->list); | 71 | INIT_LIST_HEAD(&et->list); |
72 | et->count = 0; | 72 | atomic_set(&et->node_cnt, 0); |
73 | atomic_inc(&sbi->total_ext_tree); | 73 | atomic_inc(&sbi->total_ext_tree); |
74 | } else { | 74 | } else { |
75 | atomic_dec(&sbi->total_zombie_tree); | 75 | atomic_dec(&sbi->total_zombie_tree); |
@@ -133,7 +133,7 @@ static unsigned int __free_extent_tree(struct f2fs_sb_info *sbi, | |||
133 | { | 133 | { |
134 | struct rb_node *node, *next; | 134 | struct rb_node *node, *next; |
135 | struct extent_node *en; | 135 | struct extent_node *en; |
136 | unsigned int count = et->count; | 136 | unsigned int count = atomic_read(&et->node_cnt); |
137 | 137 | ||
138 | node = rb_first(&et->root); | 138 | node = rb_first(&et->root); |
139 | while (node) { | 139 | while (node) { |
@@ -154,7 +154,7 @@ static unsigned int __free_extent_tree(struct f2fs_sb_info *sbi, | |||
154 | node = next; | 154 | node = next; |
155 | } | 155 | } |
156 | 156 | ||
157 | return count - et->count; | 157 | return count - atomic_read(&et->node_cnt); |
158 | } | 158 | } |
159 | 159 | ||
160 | static void __drop_largest_extent(struct inode *inode, | 160 | static void __drop_largest_extent(struct inode *inode, |
@@ -192,7 +192,7 @@ bool f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext) | |||
192 | le32_to_cpu(i_ext->blk), le32_to_cpu(i_ext->len)); | 192 | le32_to_cpu(i_ext->blk), le32_to_cpu(i_ext->len)); |
193 | 193 | ||
194 | write_lock(&et->lock); | 194 | write_lock(&et->lock); |
195 | if (et->count) | 195 | if (atomic_read(&et->node_cnt)) |
196 | goto out; | 196 | goto out; |
197 | 197 | ||
198 | en = __init_extent_tree(sbi, et, &ei); | 198 | en = __init_extent_tree(sbi, et, &ei); |
@@ -660,7 +660,8 @@ void f2fs_destroy_extent_tree(struct inode *inode) | |||
660 | if (!et) | 660 | if (!et) |
661 | return; | 661 | return; |
662 | 662 | ||
663 | if (inode->i_nlink && !is_bad_inode(inode) && et->count) { | 663 | if (inode->i_nlink && !is_bad_inode(inode) && |
664 | atomic_read(&et->node_cnt)) { | ||
664 | down_write(&sbi->extent_tree_lock); | 665 | down_write(&sbi->extent_tree_lock); |
665 | list_add_tail(&et->list, &sbi->zombie_list); | 666 | list_add_tail(&et->list, &sbi->zombie_list); |
666 | atomic_inc(&sbi->total_zombie_tree); | 667 | atomic_inc(&sbi->total_zombie_tree); |
@@ -673,7 +674,7 @@ void f2fs_destroy_extent_tree(struct inode *inode) | |||
673 | 674 | ||
674 | /* delete extent tree entry in radix tree */ | 675 | /* delete extent tree entry in radix tree */ |
675 | down_write(&sbi->extent_tree_lock); | 676 | down_write(&sbi->extent_tree_lock); |
676 | f2fs_bug_on(sbi, et->count); | 677 | f2fs_bug_on(sbi, atomic_read(&et->node_cnt)); |
677 | radix_tree_delete(&sbi->extent_tree_root, inode->i_ino); | 678 | radix_tree_delete(&sbi->extent_tree_root, inode->i_ino); |
678 | kmem_cache_free(extent_tree_slab, et); | 679 | kmem_cache_free(extent_tree_slab, et); |
679 | atomic_dec(&sbi->total_ext_tree); | 680 | atomic_dec(&sbi->total_ext_tree); |