Skip to content
/ linux Public
forked from torvalds/linux

Commit

Permalink
erofs: remove void tagging/untagging of workgroup pointers
Browse files Browse the repository at this point in the history
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 <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Reviewed-by: Chao Yu <[email protected]>
Signed-off-by: Gao Xiang <[email protected]>
  • Loading branch information
Vladimir Zapolskiy authored and Gao Xiang committed Jan 7, 2020
1 parent e5e9a43 commit e3915ad
Showing 1 changed file with 2 additions and 7 deletions.
9 changes: 2 additions & 7 deletions fs/erofs/utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,6 @@ struct erofs_workgroup *erofs_find_workgroup(struct super_block *sb,
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();
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -199,7 +194,7 @@ static unsigned long erofs_shrink_workstation(struct erofs_sb_info *sbi,
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;

Expand Down

0 comments on commit e3915ad

Please sign in to comment.