Re: [RFC v1] io_uring/rsrc: add fast path huge page handling in buffer registration
Christoph Hellwig <[email protected]>
| Newsgroups | org.kernel.vger.io-uring,org.kernel.vger.linux-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On Wed, Jun 10, 2026 at 11:54:01AM +0200, David Hildenbrand (Arm) wrote: > > Yes. iov_iter_extract_bvecs and thus the block direct I/O fast path > > would instantly benefit from that. > The tricky bit for such an interface is that, soon, some pages won't be folios, > but we could still end up with non-folio pages in the address space (e.g., > vm_insert_page()) and have to pin+return them. So using folios is not future-proof. I'm still doubtful on the "soon" beause of all the issues like this in the I/O path. > There are some long-term plans on providing an interface that would abstract how > you refcount something you GUP'ed. (because, some pages we GUP in the future > might not even have a dedicated refcount, all still fairly unclear). But it's > all not really finalized I think. > > For now, we could expose a folio+page/offset+nr_pages interface, where we, > long-term, would not be able to return non-folio pages (e.g., vm_insert_page()) > and would instead, in the future, fail the request if we stumble over a > non-folio thing in the page tables. That sounds reasonable for now. I think whatever we're going to use for direct I/O has to also support non-folio pages, especially PCI P2P memory. So coming up with an interface that support this ASAP would be helpful. > Another solution would be, exposing page-ranges (e.g., page + nr_pages), whereby > we'd say, that all pages in a range belong to the same compound page, and that > we took a single reference for all pages in the range. IOW, page_folio() would > for now be the same for all pages in a range. This does sound like a reasonable short-term improvement. One annoying issue with returning only order 0 page in the current interfaces is that it fills up the pages array in the caller for no good reason.