From: Kent Overstreet Date: Mon, 10 Jul 2023 21:23:59 +0000 (-0400) Subject: bcachefs: Don't start copygc until recovery is finished X-Git-Tag: io_uring-6.7-2023-11-10~119^2~204 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=ea28c86722954a58e3bab24eec3e7624e8d4956b;p=linux-block.git bcachefs: Don't start copygc until recovery is finished With "bcachefs: Snapshot depth, skiplist fields", we now can't run data move operations until after bch2_check_snapshots() is complete. Ideally we'd have the copygc (and rebalance) threads wait until c->curr_recovery_pass has advanced, but the waitlist handling is tricky - so for now, move starting copygc back to read_write_late(). Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/super.c b/fs/bcachefs/super.c index 6ab98c2299dd..63e9dafa8395 100644 --- a/fs/bcachefs/super.c +++ b/fs/bcachefs/super.c @@ -344,6 +344,19 @@ static int bch2_fs_read_write_late(struct bch_fs *c) { int ret; + /* + * Data move operations can't run until after check_snapshots has + * completed, and bch2_snapshot_is_ancestor() is available. + * + * Ideally we'd start copygc/rebalance earlier instead of waiting for + * all of recovery/fsck to complete: + */ + ret = bch2_copygc_start(c); + if (ret) { + bch_err(c, "error starting copygc thread"); + return ret; + } + ret = bch2_rebalance_start(c); if (ret) { bch_err(c, "error starting rebalance thread"); @@ -403,12 +416,6 @@ static int __bch2_fs_read_write(struct bch_fs *c, bool early) return ret; } - ret = bch2_copygc_start(c); - if (ret) { - bch_err(c, "error starting copygc thread"); - return ret; - } - if (!early) { ret = bch2_fs_read_write_late(c); if (ret)