summaryrefslogtreecommitdiffstats
path: root/fs/f2fs
diff options
context:
space:
mode:
authorYunlei He <heyunlei@huawei.com>2017-02-23 06:39:59 -0500
committerJaegeuk Kim <jaegeuk@kernel.org>2017-02-27 12:59:53 -0500
commit5e8256ac2e378089a1bf3fae87370811b1d31625 (patch)
tree43a8db726ba16de12521ab9a3913540fed8b28a8 /fs/f2fs
parent3f2be04304cf10f2ef074399f8dd565bd00ddcae (diff)
f2fs: replace rw semaphore extent_tree_lock with mutex lock
This patch replace rw semaphore extent_tree_lock with mutex lock for no read cases with this lock. Signed-off-by: Yunlei He <heyunlei@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs')
-rw-r--r--fs/f2fs/extent_cache.c22
-rw-r--r--fs/f2fs/f2fs.h2
2 files changed, 12 insertions, 12 deletions
diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
index 6ed6424807b6..0ab5518e45c2 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -77,7 +77,7 @@ static struct extent_tree *__grab_extent_tree(struct inode *inode)
77 struct extent_tree *et; 77 struct extent_tree *et;
78 nid_t ino = inode->i_ino; 78 nid_t ino = inode->i_ino;
79 79
80 down_write(&sbi->extent_tree_lock); 80 mutex_lock(&sbi->extent_tree_lock);
81 et = radix_tree_lookup(&sbi->extent_tree_root, ino); 81 et = radix_tree_lookup(&sbi->extent_tree_root, ino);
82 if (!et) { 82 if (!et) {
83 et = f2fs_kmem_cache_alloc(extent_tree_slab, GFP_NOFS); 83 et = f2fs_kmem_cache_alloc(extent_tree_slab, GFP_NOFS);
@@ -94,7 +94,7 @@ static struct extent_tree *__grab_extent_tree(struct inode *inode)
94 atomic_dec(&sbi->total_zombie_tree); 94 atomic_dec(&sbi->total_zombie_tree);
95 list_del_init(&et->list); 95 list_del_init(&et->list);
96 } 96 }
97 up_write(&sbi->extent_tree_lock); 97 mutex_unlock(&sbi->extent_tree_lock);
98 98
99 /* never died until evict_inode */ 99 /* never died until evict_inode */
100 F2FS_I(inode)->extent_tree = et; 100 F2FS_I(inode)->extent_tree = et;
@@ -548,7 +548,7 @@ unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink)
548 if (!atomic_read(&sbi->total_zombie_tree)) 548 if (!atomic_read(&sbi->total_zombie_tree))
549 goto free_node; 549 goto free_node;
550 550
551 if (!down_write_trylock(&sbi->extent_tree_lock)) 551 if (!mutex_trylock(&sbi->extent_tree_lock))
552 goto out; 552 goto out;
553 553
554 /* 1. remove unreferenced extent tree */ 554 /* 1. remove unreferenced extent tree */
@@ -570,11 +570,11 @@ unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink)
570 goto unlock_out; 570 goto unlock_out;
571 cond_resched(); 571 cond_resched();
572 } 572 }
573 up_write(&sbi->extent_tree_lock); 573 mutex_unlock(&sbi->extent_tree_lock);
574 574
575free_node: 575free_node:
576 /* 2. remove LRU extent entries */ 576 /* 2. remove LRU extent entries */
577 if (!down_write_trylock(&sbi->extent_tree_lock)) 577 if (!mutex_trylock(&sbi->extent_tree_lock))
578 goto out; 578 goto out;
579 579
580 remained = nr_shrink - (node_cnt + tree_cnt); 580 remained = nr_shrink - (node_cnt + tree_cnt);
@@ -604,7 +604,7 @@ free_node:
604 spin_unlock(&sbi->extent_lock); 604 spin_unlock(&sbi->extent_lock);
605 605
606unlock_out: 606unlock_out:
607 up_write(&sbi->extent_tree_lock); 607 mutex_unlock(&sbi->extent_tree_lock);
608out: 608out:
609 trace_f2fs_shrink_extent_tree(sbi, node_cnt, tree_cnt); 609 trace_f2fs_shrink_extent_tree(sbi, node_cnt, tree_cnt);
610 610
@@ -651,10 +651,10 @@ void f2fs_destroy_extent_tree(struct inode *inode)
651 651
652 if (inode->i_nlink && !is_bad_inode(inode) && 652 if (inode->i_nlink && !is_bad_inode(inode) &&
653 atomic_read(&et->node_cnt)) { 653 atomic_read(&et->node_cnt)) {
654 down_write(&sbi->extent_tree_lock); 654 mutex_lock(&sbi->extent_tree_lock);
655 list_add_tail(&et->list, &sbi->zombie_list); 655 list_add_tail(&et->list, &sbi->zombie_list);
656 atomic_inc(&sbi->total_zombie_tree); 656 atomic_inc(&sbi->total_zombie_tree);
657 up_write(&sbi->extent_tree_lock); 657 mutex_unlock(&sbi->extent_tree_lock);
658 return; 658 return;
659 } 659 }
660 660
@@ -662,12 +662,12 @@ void f2fs_destroy_extent_tree(struct inode *inode)
662 node_cnt = f2fs_destroy_extent_node(inode); 662 node_cnt = f2fs_destroy_extent_node(inode);
663 663
664 /* delete extent tree entry in radix tree */ 664 /* delete extent tree entry in radix tree */
665 down_write(&sbi->extent_tree_lock); 665 mutex_lock(&sbi->extent_tree_lock);
666 f2fs_bug_on(sbi, atomic_read(&et->node_cnt)); 666 f2fs_bug_on(sbi, atomic_read(&et->node_cnt));
667 radix_tree_delete(&sbi->extent_tree_root, inode->i_ino); 667 radix_tree_delete(&sbi->extent_tree_root, inode->i_ino);
668 kmem_cache_free(extent_tree_slab, et); 668 kmem_cache_free(extent_tree_slab, et);
669 atomic_dec(&sbi->total_ext_tree); 669 atomic_dec(&sbi->total_ext_tree);
670 up_write(&sbi->extent_tree_lock); 670 mutex_unlock(&sbi->extent_tree_lock);
671 671
672 F2FS_I(inode)->extent_tree = NULL; 672 F2FS_I(inode)->extent_tree = NULL;
673 673
@@ -714,7 +714,7 @@ void f2fs_update_extent_cache_range(struct dnode_of_data *dn,
714void init_extent_cache_info(struct f2fs_sb_info *sbi) 714void init_extent_cache_info(struct f2fs_sb_info *sbi)
715{ 715{
716 INIT_RADIX_TREE(&sbi->extent_tree_root, GFP_NOIO); 716 INIT_RADIX_TREE(&sbi->extent_tree_root, GFP_NOIO);
717 init_rwsem(&sbi->extent_tree_lock); 717 mutex_init(&sbi->extent_tree_lock);
718 INIT_LIST_HEAD(&sbi->extent_list); 718 INIT_LIST_HEAD(&sbi->extent_list);
719 spin_lock_init(&sbi->extent_lock); 719 spin_lock_init(&sbi->extent_lock);
720 atomic_set(&sbi->total_ext_tree, 0); 720 atomic_set(&sbi->total_ext_tree, 0);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 6efb2d91f5a1..e26cc6909a54 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -844,7 +844,7 @@ struct f2fs_sb_info {
844 844
845 /* for extent tree cache */ 845 /* for extent tree cache */
846 struct radix_tree_root extent_tree_root;/* cache extent cache entries */ 846 struct radix_tree_root extent_tree_root;/* cache extent cache entries */
847 struct rw_semaphore extent_tree_lock; /* locking extent radix tree */ 847 struct mutex extent_tree_lock; /* locking extent radix tree */
848 struct list_head extent_list; /* lru list for shrinker */ 848 struct list_head extent_list; /* lru list for shrinker */
849 spinlock_t extent_lock; /* locking extent lru list */ 849 spinlock_t extent_lock; /* locking extent lru list */
850 atomic_t total_ext_tree; /* extent tree count */ 850 atomic_t total_ext_tree; /* extent tree count */