diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2021-05-22 17:37:25 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2021-05-22 22:35:20 -0400 |
commit | 8c073d7db480ea88d37d2f7ceae46820491e243f (patch) | |
tree | 57d80c12f10ff4a9094ee1513209dfe332767d48 /fs/bcachefs/btree_io.c | |
parent | 296000cda89885b9c333233607af080fea589af4 (diff) |
bcachefs: Add a workqueue for btree io completions
Also, clean up workqueue usage - we shouldn't be using system
workqueues, pretty much everything we do needs to be on our own
WQ_MEM_RECLAIM workqueues.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'fs/bcachefs/btree_io.c')
-rw-r--r-- | fs/bcachefs/btree_io.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/fs/bcachefs/btree_io.c b/fs/bcachefs/btree_io.c index c1ff18a625be..4896187dc67f 100644 --- a/fs/bcachefs/btree_io.c +++ b/fs/bcachefs/btree_io.c @@ -1101,7 +1101,7 @@ static void btree_node_read_endio(struct bio *bio) bch2_latency_acct(ca, rb->start_time, READ); } - queue_work(system_unbound_wq, &rb->work); + queue_work(c->io_complete_wq, &rb->work); } struct btree_node_read_all { @@ -1340,7 +1340,8 @@ static int btree_node_read_all_replicas(struct bch_fs *c, struct btree *b, bool closure_sync(&ra->cl); btree_node_read_all_replicas_done(&ra->cl); } else { - continue_at(&ra->cl, btree_node_read_all_replicas_done, system_unbound_wq); + continue_at(&ra->cl, btree_node_read_all_replicas_done, + c->io_complete_wq); } return 0; @@ -1410,7 +1411,7 @@ void bch2_btree_node_read(struct bch_fs *c, struct btree *b, if (sync) btree_node_read_work(&rb->work); else - queue_work(system_unbound_wq, &rb->work); + queue_work(c->io_complete_wq, &rb->work); } } @@ -1577,7 +1578,7 @@ static void btree_node_write_work(struct work_struct *work) bio_list_add(&c->btree_write_error_list, &wbio->wbio.bio); spin_unlock_irqrestore(&c->btree_write_error_lock, flags); - queue_work(c->wq, &c->btree_write_error_work); + queue_work(c->btree_update_wq, &c->btree_write_error_work); return; } @@ -1616,7 +1617,7 @@ static void btree_node_write_endio(struct bio *bio) container_of(orig, struct btree_write_bio, wbio); INIT_WORK(&wb->work, btree_node_write_work); - queue_work(system_unbound_wq, &wb->work); + queue_work(c->io_complete_wq, &wb->work); } } @@ -1876,7 +1877,7 @@ void __bch2_btree_node_write(struct bch_fs *c, struct btree *b) atomic64_add(sectors_to_write, &c->btree_writes_sectors); INIT_WORK(&wbio->work, btree_write_submit); - schedule_work(&wbio->work); + queue_work(c->io_complete_wq, &wbio->work); return; err: set_btree_node_noevict(b); |