mirror of
https://github.com/torvalds/linux.git
synced 2026-07-30 11:11:26 +02:00
bcachefs: simplify eytzinger0_find_le
Replace the over-complicated implementation of eytzinger0_find_le() by an equivalent, simpler version. Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
d148d804f2
commit
d384dada0e
|
|
@ -254,26 +254,12 @@ static inline int eytzinger0_find_le(void *base, size_t nr, size_t size,
|
|||
cmp_func_t cmp, const void *search)
|
||||
{
|
||||
void *base1 = base - size;
|
||||
unsigned i, n = 1;
|
||||
unsigned n = 1;
|
||||
|
||||
if (!nr)
|
||||
return -1;
|
||||
|
||||
do {
|
||||
i = n;
|
||||
n = eytzinger1_child(i, cmp(base1 + i * size, search) <= 0);
|
||||
} while (n <= nr);
|
||||
|
||||
if (!(n & 1)) {
|
||||
/*
|
||||
* @i was greater than @search, return previous node:
|
||||
*
|
||||
* if @i was leftmost/smallest element,
|
||||
* eytzinger1_prev(eytzinger1_first())) returns 0, as expected
|
||||
*/
|
||||
i = eytzinger1_prev(i, nr);
|
||||
}
|
||||
return i - 1;
|
||||
while (n <= nr)
|
||||
n = eytzinger1_child(n, cmp(base1 + n * size, search) <= 0);
|
||||
n >>= __ffs(n) + 1;
|
||||
return n - 1;
|
||||
}
|
||||
|
||||
static inline int eytzinger0_find_gt(void *base, size_t nr, size_t size,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user