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: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
8d6b6222bf
commit
289980195f
@ -1267,18 +1267,6 @@ void bch2_recalc_capacity(struct bch_fs *c)
|
||||
|
||||
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 */
|
||||
closure_wake_up(&c->freelist_wait);
|
||||
}
|
||||
|
@ -182,6 +182,9 @@ static void __bch2_fs_read_only(struct bch_fs *c)
|
||||
bch2_copygc_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
|
||||
* blacklist entries involves allocating new btree nodes:
|
||||
@ -407,6 +410,9 @@ static int __bch2_fs_read_write(struct bch_fs *c, bool early)
|
||||
bch2_dev_allocator_add(c, ca);
|
||||
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) {
|
||||
ret = bch2_dev_allocator_start(ca);
|
||||
if (ret) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user