After commit 49520d317715 ("xarray: Replace exceptional entries"),
there are no RADIX_TREE_EXCEPTIONAL_{ENTRY,SHIFT} at all, remove them
as a workaround but erofs actually needs an extra bit for each entry.In the future, it should be converted to XArray of course. Cc: Matthew Wilcox <[email protected]> Signed-off-by: Gao Xiang <[email protected]> --- - Tested with images generated by mkfs.erofs: 1) mount and unmount operations 2) md5sum `find . -type f` drivers/staging/erofs/utils.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/drivers/staging/erofs/utils.c b/drivers/staging/erofs/utils.c index 595cf90..25ff39f 100644 --- a/drivers/staging/erofs/utils.c +++ b/drivers/staging/erofs/utils.c @@ -47,9 +47,7 @@ struct erofs_workgroup *erofs_find_workgroup( rcu_read_lock(); grp = radix_tree_lookup(&sbi->workstn_tree, index); if (grp != NULL) { - *tag = radix_tree_exceptional_entry(grp); - grp = (void *)((unsigned long)grp & - ~RADIX_TREE_EXCEPTIONAL_ENTRY); + *tag = 0; if (erofs_workgroup_get(grp, &oldcount)) { /* prefer to relax rcu read side */ @@ -68,7 +66,7 @@ struct erofs_workgroup *erofs_find_workgroup( int erofs_register_workgroup(struct super_block *sb, struct erofs_workgroup *grp, - bool tag) + bool __maybe_unused tag) { struct erofs_sb_info *sbi; int err; @@ -76,6 +74,11 @@ int erofs_register_workgroup(struct super_block *sb, /* grp->refcount should not < 1 */ BUG_ON(!atomic_read(&grp->refcount)); + if (tag) { + DBG_BUGON(1); + return -EINVAL; + } + err = radix_tree_preload(GFP_NOFS); if (err) return err; @@ -83,10 +86,6 @@ int erofs_register_workgroup(struct super_block *sb, sbi = EROFS_SB(sb); erofs_workstn_lock(sbi); - if (tag) - grp = (void *)((unsigned long)grp | - 1UL << RADIX_TREE_EXCEPTIONAL_SHIFT); - err = radix_tree_insert(&sbi->workstn_tree, grp->index, grp); @@ -131,9 +130,7 @@ unsigned long erofs_shrink_workstation(struct erofs_sb_info *sbi, for (i = 0; i < found; ++i) { int cnt; - struct erofs_workgroup *grp = (void *) - ((unsigned long)batch[i] & - ~RADIX_TREE_EXCEPTIONAL_ENTRY); + struct erofs_workgroup *grp = batch[i]; first_index = grp->index + 1; -- 1.9.1
