We must terminate at the first overlapping bit, we can't
just mask off non-sequential ranges.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
if (overlap == mask)
return true;
if (overlap == mask)
return true;
- while (overlap) {
- unsigned long clear_mask = ~(1UL << ffz(~overlap));
+ if (overlap) {
+ const int __bit = ffz(~overlap);
- mask &= clear_mask;
- overlap &= clear_mask;
- nr_bits--;
+ if (__bit == bit)
+ return true;
+
+ nr_bits = __bit - bit;
+ mask = bit_masks[nr_bits] << bit;
}
assert(mask);
assert(!(al->map[offset] & mask));
}
assert(mask);
assert(!(al->map[offset] & mask));
al->map[offset] |= mask;
if (!al->level)
al->map[offset] |= mask;
if (!al->level)