diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2021-05-22 17:37:25 -0400 |
---|---|---|
committer | Stijn Tintel <stijn@linux-ipv6.be> | 2021-05-24 15:55:25 +0300 |
commit | d36d3ec82d65a44f193d2795abf0a7fc10c77d8d (patch) | |
tree | e7dcfd7e4b4faa55ed8f2cfc0c30e83ed2dcd520 /fs/bcachefs/io.c | |
parent | 94c9bb28c0eb8bc146dd9cf480691502463729ce (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/io.c')
-rw-r--r-- | fs/bcachefs/io.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/bcachefs/io.c b/fs/bcachefs/io.c index 9b6aece794f2..157b2a0fc582 100644 --- a/fs/bcachefs/io.c +++ b/fs/bcachefs/io.c @@ -1439,7 +1439,7 @@ static void promote_start(struct promote_op *op, struct bch_read_bio *rbio) bch2_migrate_read_done(&op->write, rbio); closure_init(cl, NULL); - closure_call(&op->write.op.cl, bch2_write, c->wq, cl); + closure_call(&op->write.op.cl, bch2_write, c->btree_update_wq, cl); closure_return_with_destructor(cl, promote_done); } @@ -1822,6 +1822,13 @@ static void __bch2_read_endio(struct work_struct *work) if (bch2_crc_cmp(csum, rbio->pick.crc.csum)) goto csum_err; + /* + * XXX + * We need to rework the narrow_crcs path to deliver the read completion + * first, and then punt to a different workqueue, otherwise we're + * holding up reads while doing btree updates which is bad for memory + * reclaim. + */ if (unlikely(rbio->narrow_crcs)) bch2_rbio_narrow_crcs(rbio); |