mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 04:31:50 +00:00
bcachefs: Fix for copygc getting stuck waiting for reserve to be filled
This fixes a regression from the patch bcachefs: Fix copygc dying on startup In general only the allocator thread itself should be updating ca->allocator_state, the thread waking up the allocator setting it is an ugly hack only needed to avoid racing with the copygc threads when we're first starting up. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
bae895a5a3
commit
2ee47eec44
@ -100,10 +100,8 @@ static inline void bch2_wake_allocator(struct bch_dev *ca)
|
||||
|
||||
rcu_read_lock();
|
||||
p = rcu_dereference(ca->alloc_thread);
|
||||
if (p) {
|
||||
if (p)
|
||||
wake_up_process(p);
|
||||
ca->allocator_state = ALLOCATOR_running;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
|
@ -908,9 +908,16 @@ int bch2_fs_start(struct bch_fs *c)
|
||||
/*
|
||||
* Allocator threads don't start filling copygc reserve until after we
|
||||
* set BCH_FS_STARTED - wake them now:
|
||||
*
|
||||
* XXX ugly hack:
|
||||
* Need to set ca->allocator_state here instead of relying on the
|
||||
* allocator threads to do it to avoid racing with the copygc threads
|
||||
* checking it and thinking they have no alloc reserve:
|
||||
*/
|
||||
for_each_online_member(ca, c, i)
|
||||
for_each_online_member(ca, c, i) {
|
||||
ca->allocator_state = ALLOCATOR_running;
|
||||
bch2_wake_allocator(ca);
|
||||
}
|
||||
|
||||
if (c->opts.read_only || c->opts.nochanges) {
|
||||
bch2_fs_read_only(c);
|
||||
|
Loading…
Reference in New Issue
Block a user