bcachefs: Redo data_update interface
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 13 Jun 2022 23:17:45 +0000 (19:17 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:34 +0000 (17:09 -0400)
commit7f5c5d20f01483ba53233e3e2c54848e0b2d9ecd
treea9c7e0a8c7c53933b961b8abe0c7f38569a1a049
parent47ab0c5f6a1e6ac1e9387181585fb39393fec4ea
bcachefs: Redo data_update interface

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: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/data_update.c
fs/bcachefs/data_update.h
fs/bcachefs/extents.c
fs/bcachefs/extents.h
fs/bcachefs/io.c
fs/bcachefs/move.c
fs/bcachefs/move.h
fs/bcachefs/movinggc.c
fs/bcachefs/rebalance.c