diff options
-rw-r--r-- | fs/bcachefs/disk_groups.h | 8 | ||||
-rw-r--r-- | fs/bcachefs/rebalance.c | 3 |
2 files changed, 10 insertions, 1 deletions
diff --git a/fs/bcachefs/disk_groups.h b/fs/bcachefs/disk_groups.h index bf39db3868bf..ec12584ceee7 100644 --- a/fs/bcachefs/disk_groups.h +++ b/fs/bcachefs/disk_groups.h @@ -68,6 +68,14 @@ static inline struct bch_devs_mask target_rw_devs(struct bch_fs *c, return devs; } +static inline bool bch2_target_accepts_data(struct bch_fs *c, + enum bch_data_type data_type, + u16 target) +{ + struct bch_devs_mask rw_devs = target_rw_devs(c, data_type, target); + return !bitmap_empty(rw_devs.d, BCH_SB_MEMBERS_MAX); +} + bool bch2_dev_in_target(struct bch_fs *, unsigned, unsigned); int bch2_disk_path_find(struct bch_sb_handle *, const char *); diff --git a/fs/bcachefs/rebalance.c b/fs/bcachefs/rebalance.c index 66c40999163d..989f37a3b46a 100644 --- a/fs/bcachefs/rebalance.c +++ b/fs/bcachefs/rebalance.c @@ -57,7 +57,8 @@ static bool rebalance_pred(struct bch_fs *c, void *arg, i = 0; bkey_for_each_ptr(ptrs, ptr) { if (!ptr->cached && - !bch2_dev_in_target(c, ptr->dev, io_opts->background_target)) + !bch2_dev_in_target(c, ptr->dev, io_opts->background_target) && + bch2_target_accepts_data(c, BCH_DATA_user, io_opts->background_target)) data_opts->rewrite_ptrs |= 1U << i; i++; } |