[PATCH v3 3/8] bitmap: fix opencoded bitmap_allocate_region()

Yury Norov posted 8 patches 2 years, 4 months ago
There is a newer version of this series
[PATCH v3 3/8] bitmap: fix opencoded bitmap_allocate_region()
Posted by Yury Norov 2 years, 4 months ago
bitmap_find_region() opencodes bitmap_allocate_region(). Fix it.

Signed-off-by: Yury Norov <yury.norov@gmail.com>
---
 lib/bitmap.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/lib/bitmap.c b/lib/bitmap.c
index 76bf79261107..4c9f119240cc 100644
--- a/lib/bitmap.c
+++ b/lib/bitmap.c
@@ -1319,10 +1319,8 @@ int bitmap_find_free_region(unsigned long *bitmap, unsigned int bits, int order)
 	unsigned int pos, end;		/* scans bitmap by regions of size order */
 
 	for (pos = 0; (end = pos + BIT(order)) <= bits; pos = end) {
-		if (!__reg_op(bitmap, pos, order, REG_OP_ISFREE))
-			continue;
-		__reg_op(bitmap, pos, order, REG_OP_ALLOC);
-		return pos;
+		if (!bitmap_allocate_region(bitmap, pos, order))
+			return pos;
 	}
 	return -ENOMEM;
 }
-- 
2.39.2
Re: [PATCH v3 3/8] bitmap: fix opencoded bitmap_allocate_region()
Posted by Andy Shevchenko 2 years, 4 months ago
On Tue, Aug 15, 2023 at 04:36:23PM -0700, Yury Norov wrote:
> bitmap_find_region() opencodes bitmap_allocate_region(). Fix it.

...

>  	for (pos = 0; (end = pos + BIT(order)) <= bits; pos = end) {
> -		if (!__reg_op(bitmap, pos, order, REG_OP_ISFREE))
> -			continue;
> -		__reg_op(bitmap, pos, order, REG_OP_ALLOC);
> -		return pos;
> +		if (!bitmap_allocate_region(bitmap, pos, order))
> +			return pos;

You can also leave more code untouched, by replacing only first conditional
with

		if (bitmap_allocate_region(bitmap, pos, order))
			continue;
		return pos;

>  	}
>  	return -ENOMEM;

-- 
With Best Regards,
Andy Shevchenko
Re: [PATCH v3 3/8] bitmap: fix opencoded bitmap_allocate_region()
Posted by Yury Norov 2 years, 3 months ago
On Thu, Aug 17, 2023 at 12:45:23PM +0300, Andy Shevchenko wrote:
> On Tue, Aug 15, 2023 at 04:36:23PM -0700, Yury Norov wrote:
> > bitmap_find_region() opencodes bitmap_allocate_region(). Fix it.
> 
> ...
> 
> >  	for (pos = 0; (end = pos + BIT(order)) <= bits; pos = end) {
> > -		if (!__reg_op(bitmap, pos, order, REG_OP_ISFREE))
> > -			continue;
> > -		__reg_op(bitmap, pos, order, REG_OP_ALLOC);
> > -		return pos;
> > +		if (!bitmap_allocate_region(bitmap, pos, order))
> > +			return pos;
> 
> You can also leave more code untouched, by replacing only first conditional
> with
> 
> 		if (bitmap_allocate_region(bitmap, pos, order))
> 			continue;
> 		return pos;

This looks weird, and doesn't help preserving history because the
following patch moves everything from c-file to the header. I'd prefer
to keep this as is.

> 
> >  	}
> >  	return -ENOMEM;
> 
> -- 
> With Best Regards,
> Andy Shevchenko
>