Messages in this thread | | | Date | Thu, 20 Jan 2022 13:35:23 -0800 | Subject | Re: Phyr Starter | From | John Hubbard <> |
| |
On 1/20/22 6:12 AM, Christoph Hellwig wrote: > On Tue, Jan 11, 2022 at 12:17:18AM -0800, John Hubbard wrote: >> Zooming in on the pinning aspect for a moment: last time I attempted to >> convert O_DIRECT callers from gup to pup, I recall wanting very much to >> record, in each bio_vec, whether these pages were acquired via FOLL_PIN, >> or some non-FOLL_PIN method. Because at the end of the IO, it is not >> easy to disentangle which pages require put_page() and which require >> unpin_user_page*(). > > I don't think that is a problem. Pinning only need to happen for > ITER_IOVEC, and the only non-user pages there is the ZERO_PAGE added > for padding that can be special cased.
I am really glad to hear you say that. Because I just worked through it again in detail yesterday (including your and others' old emails about this), and tentatively reached the same conclusion from seeing the call paths. But I wanted to confirm with someone who actually knows this code well, and that's not me. :)
Things like dio_refill_pages() are mixing in the zero page, but like you say, that can be handled. I have a few ideas for that.
Now that the goal is a considerably narrower as compared to in 2019 ("convert DIO callers to pup", instead of "convert the world to pup", ha), this looks quite feasible after all.
thanks, -- John Hubbard NVIDIA
| |