bcachefs: Fix undefined behaviour in eytzinger1_first()
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 3 Jul 2024 15:56:19 +0000 (11:56 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Wed, 10 Jul 2024 13:53:39 +0000 (09:53 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/eytzinger.h

index 24840aee335c0ffeabd3ad69c79665cc005e28d8..795f4fc0bab17708fbc584042853b5a6bf6705bc 100644 (file)
@@ -48,7 +48,7 @@ static inline unsigned eytzinger1_right_child(unsigned i)
 
 static inline unsigned eytzinger1_first(unsigned size)
 {
-       return rounddown_pow_of_two(size);
+       return size ? rounddown_pow_of_two(size) : 0;
 }
 
 static inline unsigned eytzinger1_last(unsigned size)
@@ -101,7 +101,9 @@ static inline unsigned eytzinger1_prev(unsigned i, unsigned size)
 
 static inline unsigned eytzinger1_extra(unsigned size)
 {
-       return (size + 1 - rounddown_pow_of_two(size)) << 1;
+       return size
+               ? (size + 1 - rounddown_pow_of_two(size)) << 1
+               : 0;
 }
 
 static inline unsigned __eytzinger1_to_inorder(unsigned i, unsigned size,