Re: [PATCH v3 2/2] lib: bitmap: reduce the number of goto again in bitmap_find_next_zero_area_off()

From: Yury Norov

Date: Thu May 14 2026 - 13:22:30 EST


On Thu, May 14, 2026 at 05:06:07PM +0800, Yi Sun wrote:
> Finding a contiguous free region in a highly fragmented
> bitmap is not easy and may require many repeated attempts.
> Therefore, find_next_bit(map, end, index) is not the optimal choice.
> This is because there may be multiple scattered free regions
> within the range [index, end) and none of them will meet the length
> requirement of @nr.
> Instead, it's sufficient to directly find the last bit within
> the range [index, end), thus reducing unnecessary "goto again" calls.

This is the good place to put your perf numbers. Does it have a real
impact, other than the micro-benchmark?

> Signed-off-by: Yi Sun <yi.sun@xxxxxxxxxx>

There is a for_each_set_bit_range() iterators family. They are similar
to the bitmap_find_next_zero_area_off(), and may also benefit from the
rework.

I think the most questionable part of this work is that you switch a
single function to the new API. Can you check the above and other
possible candidates please, before we move forward?

Thanks,
Yury

> ---
> lib/bitmap.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/lib/bitmap.c b/lib/bitmap.c
> index b9bfa157e095..9b589643f72a 100644
> --- a/lib/bitmap.c
> +++ b/lib/bitmap.c
> @@ -442,7 +442,7 @@ unsigned long bitmap_find_next_zero_area_off(unsigned long *map,
> end = index + nr;
> if (end > size)
> return end;
> - i = find_next_bit(map, end, index);
> + i = find_last_bit_from(map, end, index);
> if (i < end) {
> start = i + 1;
> goto again;
> --
> 2.34.1