Messages in this thread | | | Date | Mon, 29 Aug 2022 12:59:26 -0700 | Subject | Re: [PATCH 5/6] NFS: direct-io: convert to FOLL_PIN pages | From | John Hubbard <> |
| |
On 8/29/22 09:08, Jan Kara wrote: >> However, the core block/bio conversion in patch 4 still does depend upon >> a key assumption, which I got from a 2019 email discussion with >> Christoph Hellwig and others here [1], which says: >> >> "All pages released by bio_release_pages should come from >> get_get_user_pages...". >> >> I really hope that still holds true. Otherwise this whole thing is in >> trouble. >> >> [1] https://lore.kernel.org/kvm/20190724053053.GA18330@infradead.org/ > > Well as far as I've checked that discussion, Christoph was aware of pipe > pages etc. (i.e., bvecs) entering direct IO code. But he had some patches > [2] which enabled GUP to work for bvecs as well (using the kernel mapping > under the hood AFAICT from a quick glance at the series). I suppose we > could also handle this in __iov_iter_get_pages_alloc() by grabbing pin > reference instead of plain get_page() for the case of bvec iter. That way > we should have only pinned pages in bio_release_pages() even for the bvec > case.
OK, thanks, that looks viable. So, that approach assumes that the remaining two cases in __iov_iter_get_pages_alloc() will never end up being released via bio_release_pages():
iov_iter_is_pipe(i) iov_iter_is_xarray(i)
I'm actually a little worried about ITER_XARRAY, which is a recent addition. It seems to be used in ways that are similar to ITER_BVEC, and cephfs is using it. It's probably OK for now, for this series, which doesn't yet convert cephfs.
> > [2] http://git.infradead.org/users/hch/misc.git/shortlog/refs/heads/gup-bvec
Yes, I had looked through that again before sending this. The problem for me was that that it didn't have to deal with releasing pages differently (and therefore, differentiating between FOLL_PIN and FOLL_GET pages). But it did enable GUP to handle bvecs, so with that applied, one could then make the original claim about bio_release_pages() and GUP, yes.
thanks,
-- John Hubbard NVIDIA
| |