diff options
author | Vladimir Zapolskiy <vladimir@tuxera.com> | 2020-01-02 15:01:18 +0300 |
---|---|---|
committer | Gao Xiang <gaoxiang25@huawei.com> | 2020-01-07 05:09:21 +0300 |
commit | e3915ad94bfa0e2c1818837af618e9adec74eb1b (patch) | |
tree | 473a026f66346451170de0f8f0f636ab9b45d09a | |
parent | e5e9a432036a40756db171e7b22ee63e69c41ef1 (diff) | |
download | linux-e3915ad94bfa0e2c1818837af618e9adec74eb1b.tar.xz |
erofs: remove void tagging/untagging of workgroup pointers
Because workgroup pointers inserted to a radix tree are always tagged with
a single value of 0, it is possible to remove tagging and untagging of the
pointers completely.
Signed-off-by: Vladimir Zapolskiy <vladimir@tuxera.com>
Link: https://lore.kernel.org/r/20200102120118.14979-4-vladimir@tuxera.com
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
-rw-r--r-- | fs/erofs/utils.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/fs/erofs/utils.c b/fs/erofs/utils.c index 7b47c56b89b7..fddc5059c930 100644 --- a/fs/erofs/utils.c +++ b/fs/erofs/utils.c @@ -68,8 +68,6 @@ repeat: rcu_read_lock(); grp = radix_tree_lookup(&sbi->workstn_tree, index); if (grp) { - grp = xa_untag_pointer(grp); - if (erofs_workgroup_get(grp)) { /* prefer to relax rcu read side */ rcu_read_unlock(); @@ -101,8 +99,6 @@ int erofs_register_workgroup(struct super_block *sb, sbi = EROFS_SB(sb); xa_lock(&sbi->workstn_tree); - grp = xa_tag_pointer(grp, 0); - /* * Bump up reference count before making this workgroup * visible to other users in order to avoid potential UAF @@ -173,8 +169,7 @@ static bool erofs_try_to_release_workgroup(struct erofs_sb_info *sbi, * however in order to avoid some race conditions, add a * DBG_BUGON to observe this in advance. */ - DBG_BUGON(xa_untag_pointer(radix_tree_delete(&sbi->workstn_tree, - grp->index)) != grp); + DBG_BUGON(radix_tree_delete(&sbi->workstn_tree, grp->index) != grp); /* * If managed cache is on, last refcount should indicate @@ -199,7 +194,7 @@ repeat: batch, first_index, PAGEVEC_SIZE); for (i = 0; i < found; ++i) { - struct erofs_workgroup *grp = xa_untag_pointer(batch[i]); + struct erofs_workgroup *grp = batch[i]; first_index = grp->index + 1; |