Chuck Silvers c2ea3d44bf Fix hang due to missing unbusy in sendfile when an async data I/O fails.
r359473 removed the page unbusy logic from sendfile_iodone() because when
vm_pager_get_pages_async() would return an error after failing to start
the async I/O (eg. because VOP_BMAP failed), sendfile_swapin() would also
unbusy the pages, and it was wrong to unbusy twice.  However this breaks
the case where vm_pager_get_pages_async() succeeds in starting an async I/O
and the async I/O is what fails.  In this case, sendfile_iodone() must
unbusy the pages, and because sendfile_iodone() doesn't know which case
it is in, sendfile_iodone() must always unbusy pages and relookup pages
which have been substituted with bogus_page, which in turn means that
sendfile_swapin() must never do unbusy or relookup for pages which have
been given to vm_pager_get_pages_async(), even if there is an error.

Reviewed by:	kib, markj
Sponsored by:	Netflix
Differential Revision:	https://reviews.freebsd.org/D25136
2020-06-06 00:02:50 +00:00
..
2020-02-26 16:22:28 +00:00
2020-03-02 15:30:52 +00:00
2020-03-02 15:30:52 +00:00
2020-03-02 15:30:52 +00:00
2019-03-12 05:10:41 +00:00
2020-03-02 15:30:52 +00:00
2020-05-09 15:56:02 +00:00
2019-02-20 09:38:19 +00:00
2020-01-12 23:52:16 +00:00
2020-03-20 20:09:00 +00:00
2020-02-15 01:28:42 +00:00
2020-05-21 01:55:35 +00:00
2020-02-23 03:32:11 +00:00