]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
erofs: remove void tagging/untagging of workgroup pointers
authorVladimir Zapolskiy <vladimir@tuxera.com>
Thu, 2 Jan 2020 12:01:18 +0000 (14:01 +0200)
committerGao Xiang <gaoxiang25@huawei.com>
Tue, 7 Jan 2020 02:09:21 +0000 (10:09 +0800)
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>
fs/erofs/utils.c

index 7b47c56b89b7e11cff9d4fabefcc33ae42854ccb..fddc5059c9302ad325c73815742e0b64bc232827 100644 (file)
@@ -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();
@@ -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 @@ 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;