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

bcachefs: Don't issue writes that are more than 1 MB

the bcachefs io path in io.c can't bounce writes larger than that.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 6f2b9074
...@@ -1177,7 +1177,8 @@ static int __bch2_writepage(struct folio *folio, ...@@ -1177,7 +1177,8 @@ static int __bch2_writepage(struct folio *folio,
if (w->io && if (w->io &&
(w->io->op.res.nr_replicas != nr_replicas_this_write || (w->io->op.res.nr_replicas != nr_replicas_this_write ||
bio_full(&w->io->op.wbio.bio, PAGE_SIZE) || bio_full(&w->io->op.wbio.bio, PAGE_SIZE) ||
w->io->op.wbio.bio.bi_iter.bi_size >= (256U << 20) || w->io->op.wbio.bio.bi_iter.bi_size + (sectors << 9) >=
(BIO_MAX_VECS * PAGE_SIZE) ||
bio_end_sector(&w->io->op.wbio.bio) != sector)) bio_end_sector(&w->io->op.wbio.bio) != sector))
bch2_writepage_do_io(w); bch2_writepage_do_io(w);
...@@ -1794,12 +1795,22 @@ static long bch2_dio_write_loop(struct dio_write *dio) ...@@ -1794,12 +1795,22 @@ static long bch2_dio_write_loop(struct dio_write *dio)
goto loop; goto loop;
while (1) { while (1) {
size_t extra = dio->iter.count -
min(BIO_MAX_VECS * PAGE_SIZE, dio->iter.count);
if (kthread) if (kthread)
kthread_use_mm(dio->mm); kthread_use_mm(dio->mm);
BUG_ON(current->faults_disabled_mapping); BUG_ON(current->faults_disabled_mapping);
current->faults_disabled_mapping = mapping; current->faults_disabled_mapping = mapping;
/*
* Don't issue more than 2MB at once, the bcachefs io path in
* io.c can't bounce more than that:
*/
dio->iter.count -= extra;
ret = bio_iov_iter_get_pages(bio, &dio->iter); ret = bio_iov_iter_get_pages(bio, &dio->iter);
dio->iter.count += extra;
current->faults_disabled_mapping = NULL; current->faults_disabled_mapping = NULL;
if (kthread) if (kthread)
......
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