Commit 30690c44 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: Heap code fix

When deleting an entry from a heap that was at entry h->used - 1, we'd
end up calling heap_sift() on an entry outside the heap - the entry we
just removed - which would end up re-adding it to the heap and deleting
something we didn't want to delete. Oops...
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
parent fd1e9c69
......@@ -210,9 +210,11 @@ do { \
\
BUG_ON(_i >= (h)->used); \
(h)->used--; \
heap_swap(h, _i, (h)->used, set_backpointer); \
heap_sift_up(h, _i, cmp, set_backpointer); \
heap_sift_down(h, _i, cmp, set_backpointer); \
if ((_i) < (h)->used) { \
heap_swap(h, _i, (h)->used, set_backpointer); \
heap_sift_up(h, _i, cmp, set_backpointer); \
heap_sift_down(h, _i, cmp, set_backpointer); \
} \
} while (0)
#define heap_pop(h, d, cmp, set_backpointer) \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment