qemu/kvm with cache=none (common) and aio=threads (default) is required to trigger the bug. aio=native (another common option) does not trigger it in our testing.
We applied the following patches on top of Ubuntu-4.15.0-36.39.
commit 0aa69fd32a5f766e997ca8ab4723c5a1146efa8b - block: add a lower-level bio_add_page interface
commit b403ea2404889e1227812fa9657667a1deb9c694 - block: bio_iov_iter_get_pages: fix size of last iovec
commit 9362dd1109f87a9d0a798fbc890cb339c171ed35 - blkdev: __blkdev_direct_IO_simple: fix leak in error case
commit 17d51b10d7773e4618bcac64648f30f12d4078fb - block: bio_iov_iter_get_pages: pin more pages for multi-segment IOs
The first one introduces a helper function, and the next three are the upstream patchset that fixes the issue.
Thank you for looking at this bug report.
We have some additional information.
qemu/kvm with cache=none (common) and aio=threads (default) is required to trigger the bug. aio=native (another common option) does not trigger it in our testing.
We applied the following patches on top of Ubuntu- 4.15.0- 36.39.
commit 0aa69fd32a5f766 e997ca8ab4723c5 a1146efa8b - block: add a lower-level bio_add_page interface 227812fa9657667 a1deb9c694 - block: bio_iov_ iter_get_ pages: fix size of last iovec d0a798fbc890cb3 39c171ed35 - blkdev: __blkdev_ direct_ IO_simple: fix leak in error case 618bcac64648f30 f12d4078fb - block: bio_iov_ iter_get_ pages: pin more pages for multi-segment IOs
commit b403ea2404889e1
commit 9362dd1109f87a9
commit 17d51b10d7773e4
The first one introduces a helper function, and the next three are the upstream patchset that fixes the issue.