On 2/27/22 14:15, Al Viro wrote:
On Sun, Feb 27, 2022 at 01:34:31AM -0800, jhubbard.send.patches@xxxxxxxxx wrote:
From: John Hubbard <jhubbard@xxxxxxxxxx>
Upcoming changes to Direct IO will change it from acquiring pages via
get_user_pages_fast(), to calling pin_user_pages_fast() instead.
Place a few assertions at key points, that the pages are IOVEC (user
pages), to enforce the assumptions that there are no kernel or pipe or
other odd variations being passed.
Umm... And what should happen when O_DIRECT file gets passed to splice()?
OK, right, this is not going to work as-is.
Any of the remaining iov_iter_get_pages*() callers that do direct IO
(vmsplice, ceph, ...) will end up calling bio_release_pages(), which is
now unconditionally calling unpin_user_pages(). So this is just
completely broken.
And so, once again, I'm back to, "must convert the whole pile of
iov_iter_get_page*() callers at once".
Back to the drawing board.
thanks,
--
John Hubbard
NVIDIA