• Kent Overstreet's avatar
    bcachefs: Fix for bad stripe pointers · 39283c71
    Kent Overstreet authored
    The allocator usually doesn't increment bucket gens right away on
    buckets that it's about to hand out (for reasons that need to be
    documented), instead deferring that to whatever extent update first
    references that bucket.
    
    But stripe pointers reference buckets without changing bucket sector
    counts, meaning we could end up with a pointer in a stripe with a gen
    newer than the bucket it points to.
    
    Fix this by adding a transactional trigger for KEY_TYPE_stripe that just
    writes out the keys in the alloc btree for the buckets it points to.
    
    Also - consolidate the code that checks pointer validity.
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
    39283c71
alloc_background.c 32.8 KB