• Kent Overstreet's avatar
    bcachefs: Redo data_update interface · 7f5c5d20
    Kent Overstreet authored
    This patch significantly cleans up and simplifies the data_update
    interface. Instead of only being able to specify a single pointer by
    device to rewrite, we're now able to specify any or all of the pointers
    in the original extent to be rewrited, as a bitmask.
    
    data_cmd is no more: the various pred functions now just return true if
    the extent should be moved/updated. All the data_update path does is
    rewrite existing replicas, or add new ones.
    
    This fixes a bug where with background compression on replicated
    filesystems, where rebalance -> data_update would incorrectly drop the
    wrong old replica, and keep trying to recompress an extent pointer and
    each time failing to drop the right replica. Oops.
    
    Now, the data update path doesn't look at the io options to decide which
    pointers to keep and which to drop - it only goes off of the
    data_update_options passed to it.
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
    7f5c5d20
move.c 17 KB