summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorDaniel Hill <daniel@gluo.nz>2023-11-26 19:33:31 +1300
committerKent Overstreet <kent.overstreet@linux.dev>2024-01-01 11:47:39 -0500
commit0c069781ddfa4e31c169a8eced1ee90b8929d522 (patch)
tree42d4dd63da54901fd5386c306d9f8cc66ffc1882 /fs
parent74529338805d514a07ba4e6feb25997c4be3bddd (diff)
downloadlinux-0c069781ddfa4e31c169a8eced1ee90b8929d522.tar.gz
linux-0c069781ddfa4e31c169a8eced1ee90b8929d522.tar.bz2
linux-0c069781ddfa4e31c169a8eced1ee90b8929d522.zip
bcachefs: rebalance should wakeup on shutdown if disabled
Signed-off-by: Daniel Hill <daniel@gluo.nz> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs')
-rw-r--r--fs/bcachefs/move.c2
-rw-r--r--fs/bcachefs/move.h1
-rw-r--r--fs/bcachefs/rebalance.c12
3 files changed, 12 insertions, 3 deletions
diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c
index 638603d774b5..847ab0eba2da 100644
--- a/fs/bcachefs/move.c
+++ b/fs/bcachefs/move.c
@@ -159,7 +159,7 @@ void bch2_move_ctxt_wait_for_io(struct moving_context *ctxt)
atomic_read(&ctxt->write_sectors) != sectors_pending);
}
-static void bch2_moving_ctxt_flush_all(struct moving_context *ctxt)
+void bch2_moving_ctxt_flush_all(struct moving_context *ctxt)
{
move_ctxt_wait_event(ctxt, list_empty(&ctxt->reads));
bch2_trans_unlock_long(ctxt->trans);
diff --git a/fs/bcachefs/move.h b/fs/bcachefs/move.h
index 6a38fed85738..9baf3093a678 100644
--- a/fs/bcachefs/move.h
+++ b/fs/bcachefs/move.h
@@ -83,6 +83,7 @@ void bch2_moving_ctxt_init(struct moving_context *, struct bch_fs *,
struct write_point_specifier, bool);
struct moving_io *bch2_moving_ctxt_next_pending_write(struct moving_context *);
void bch2_moving_ctxt_do_pending_writes(struct moving_context *);
+void bch2_moving_ctxt_flush_all(struct moving_context *);
void bch2_move_ctxt_wait_for_io(struct moving_context *);
int bch2_move_ratelimit(struct moving_context *);
diff --git a/fs/bcachefs/rebalance.c b/fs/bcachefs/rebalance.c
index 1846f38cea38..9c415e14ff9c 100644
--- a/fs/bcachefs/rebalance.c
+++ b/fs/bcachefs/rebalance.c
@@ -332,8 +332,16 @@ static int do_rebalance(struct moving_context *ctxt)
BTREE_ID_rebalance_work, POS_MIN,
BTREE_ITER_ALL_SNAPSHOTS);
- while (!bch2_move_ratelimit(ctxt) &&
- !kthread_wait_freezable(r->enabled)) {
+ while (!bch2_move_ratelimit(ctxt)) {
+ if (!r->enabled) {
+ bch2_moving_ctxt_flush_all(ctxt);
+ kthread_wait_freezable(r->enabled ||
+ kthread_should_stop());
+ }
+
+ if (kthread_should_stop())
+ break;
+
bch2_trans_begin(trans);
ret = bkey_err(k = next_rebalance_entry(trans, &rebalance_work_iter));