On 10/13/21 9:54 AM, Jens Axboe wrote:
If we come across bits that are already set, then it's quicker to test
that first and gate the test_and_set_bit() operation on the result of
the bit test.
Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
---
lib/sbitmap.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/sbitmap.c b/lib/sbitmap.c
index c6e2f1f2c4d2..11b244a8d00f 100644
--- a/lib/sbitmap.c
+++ b/lib/sbitmap.c
@@ -166,7 +166,7 @@ static int __sbitmap_get_word(unsigned long *word, unsigned long depth,
return -1;
}
- if (!test_and_set_bit_lock(nr, word))
+ if (!test_bit(nr, word) && !test_and_set_bit_lock(nr, word))
break;
hint = nr + 1;
Hi Jens,
Are numbers available about how much this change improves performance?
I'm asking this since my understanding is that this patch only helps if
bit 'nr' is set after find_next_zero_bit() finished and before
test_and_set_bit() is called. Isn't that a very short time window? Am I
perhaps missing something?
Thanks,
Bart.