• Kent Overstreet's avatar
    bcachefs: Rework btree node pinning · 7a51608d
    Kent Overstreet authored
    In backpointers fsck, we do a seqential scan of one btree, and check
    references to another: extents <-> backpointers
    
    Checking references generates random lookups, so we want to pin that
    btree in memory (or only a range, if it doesn't fit in ram).
    
    Previously, this was done with a simple check in the shrinker - "if
    btree node is in range being pinned, don't free it" - but this generated
    OOMs, as our shrinker wasn't well behaved if there was less memory
    available than expected.
    
    Instead, we now have two different shrinkers and lru lists; the second
    shrinker being for pinned nodes, with seeks set much higher than normal
    - so they can still be freed if necessary, but we'll prefer not to.
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
    7a51608d
btree_update_interior.c 73.7 KB