sbitmap: remove unnecessary calculation of alloc_hint in __sbitmap_get_shallow
authorKemeng Shi <shikemeng@huaweicloud.com>
Mon, 16 Jan 2023 20:50:55 +0000 (04:50 +0800)
committerJens Axboe <axboe@kernel.dk>
Mon, 30 Jan 2023 03:03:01 +0000 (20:03 -0700)
Updates to alloc_hint in the loop in __sbitmap_get_shallow() are mostly
pointless and equivalent to setting alloc_hint to zero (because
SB_NR_TO_BIT() considers only low sb->shift bits from alloc_hint). So
simplify the logic.

Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Link: https://lore.kernel.org/r/20230116205059.3821738-2-shikemeng@huaweicloud.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
lib/sbitmap.c

index 1fcede2..462873a 100644 (file)
@@ -243,6 +243,7 @@ static int __sbitmap_get_shallow(struct sbitmap *sb,
        int nr = -1;
 
        index = SB_NR_TO_INDEX(sb, alloc_hint);
+       alloc_hint = SB_NR_TO_BIT(sb, alloc_hint);
 
        for (i = 0; i < sb->map_nr; i++) {
 again:
@@ -250,7 +251,7 @@ again:
                                        min_t(unsigned int,
                                              __map_depth(sb, index),
                                              shallow_depth),
-                                       SB_NR_TO_BIT(sb, alloc_hint), true);
+                                       alloc_hint, true);
                if (nr != -1) {
                        nr += index << sb->shift;
                        break;
@@ -260,13 +261,9 @@ again:
                        goto again;
 
                /* Jump to next index. */
-               index++;
-               alloc_hint = index << sb->shift;
-
-               if (index >= sb->map_nr) {
+               alloc_hint = 0;
+               if (++index >= sb->map_nr)
                        index = 0;
-                       alloc_hint = 0;
-               }
        }
 
        return nr;