• Brian Foster's avatar
    bcachefs: don't spin in rebalance when background target is not usable · 5bc74082
    Brian Foster authored
    If a bcachefs filesystem is configured with a background device
    (disk group), rebalance will relocate data to this device in the
    background by checking extent keys for whether they currently reside
    in the specified target. For keys that do not, rebalance performs a
    read/write cycle to allow the write path to properly relocate data.
    
    If the background target is not usable (read-only, for example),
    however, the write path doesn't actually move data to another
    device. Instead, rebalance spins indefinitely reading and rewriting
    the same data over and over to the same device. If the background
    target is made available again, the rebalance picks this up,
    relocates the data, and eventually terminates.
    
    To avoid this spinning behavior, update the rebalance background
    target logic to not only check whether the extent is not in the
    target, but whether the target is actually usable as well. If not,
    then don't mark the key for rewrite.
    Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
    5bc74082
disk_groups.h 2.6 KB