Commit 28998019 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: Start/stop io clock hands in read/write paths

This fixes a bug where the clock hands in the journal and superblock
didn't match, because we were still incrementing the read clock hand
while read-only.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 8d6b6222
...@@ -1267,18 +1267,6 @@ void bch2_recalc_capacity(struct bch_fs *c) ...@@ -1267,18 +1267,6 @@ void bch2_recalc_capacity(struct bch_fs *c)
c->bucket_size_max = bucket_size_max; c->bucket_size_max = bucket_size_max;
if (c->capacity) {
bch2_io_timer_add(&c->io_clock[READ],
&c->bucket_clock[READ].rescale);
bch2_io_timer_add(&c->io_clock[WRITE],
&c->bucket_clock[WRITE].rescale);
} else {
bch2_io_timer_del(&c->io_clock[READ],
&c->bucket_clock[READ].rescale);
bch2_io_timer_del(&c->io_clock[WRITE],
&c->bucket_clock[WRITE].rescale);
}
/* Wake up case someone was waiting for buckets */ /* Wake up case someone was waiting for buckets */
closure_wake_up(&c->freelist_wait); closure_wake_up(&c->freelist_wait);
} }
......
...@@ -182,6 +182,9 @@ static void __bch2_fs_read_only(struct bch_fs *c) ...@@ -182,6 +182,9 @@ static void __bch2_fs_read_only(struct bch_fs *c)
bch2_copygc_stop(c); bch2_copygc_stop(c);
bch2_gc_thread_stop(c); bch2_gc_thread_stop(c);
bch2_io_timer_del(&c->io_clock[READ], &c->bucket_clock[READ].rescale);
bch2_io_timer_del(&c->io_clock[WRITE], &c->bucket_clock[WRITE].rescale);
/* /*
* Flush journal before stopping allocators, because flushing journal * Flush journal before stopping allocators, because flushing journal
* blacklist entries involves allocating new btree nodes: * blacklist entries involves allocating new btree nodes:
...@@ -407,6 +410,9 @@ static int __bch2_fs_read_write(struct bch_fs *c, bool early) ...@@ -407,6 +410,9 @@ static int __bch2_fs_read_write(struct bch_fs *c, bool early)
bch2_dev_allocator_add(c, ca); bch2_dev_allocator_add(c, ca);
bch2_recalc_capacity(c); bch2_recalc_capacity(c);
bch2_io_timer_add(&c->io_clock[READ], &c->bucket_clock[READ].rescale);
bch2_io_timer_add(&c->io_clock[WRITE], &c->bucket_clock[WRITE].rescale);
for_each_rw_member(ca, c, i) { for_each_rw_member(ca, c, i) {
ret = bch2_dev_allocator_start(ca); ret = bch2_dev_allocator_start(ca);
if (ret) { if (ret) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment