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>
This commit is contained in:
parent
e5e9a43203
commit
e3915ad94b
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue