On 11/30/18 2:34 PM, Jens Axboe wrote: > On 11/30/18 2:25 PM, Al Viro wrote: >> On Fri, Nov 30, 2018 at 02:16:38PM -0700, Jens Axboe wrote: >>>>> Would this make you happy: >>>>> >>>>> if (!is_vmalloc_addr(kv->iov_base)) >>>>> page = virt_to_page(kv->iov_base); >>>>> else >>>>> page = vmalloc_to_page(kv->iov_base); >>>> >>>> Free advice: don't ever let Linus see anything along those lines. Results >>>> tend to be colourful... >>> >>> We already have those lines in the kernel, XFS for instance. Al, could you >>> please try to be helpful instead of being deliberately obtuse? >> >> Again, the last time something like that had been suggested, Linus had replied >> with a very impressive rant. I *did* propose pretty much that, and reaction >> was basically "hell no, not in general-purpose primitives". Precisely about >> iov_iter stuff. A part of that was due to touching page refcounts, but quite >> a bit wasn't. > > Nobody is touching the page count here, and for the aio user mapped IO, > nobody is touching them at the end either. > > As far as I can tell, the above is fine. It's either a vmalloc'ed > address and should be treated specially, or we can do virt_to_page() on > it. > > Do you have a link to said rant? I found the rant. I think the solution here is to switch it to using ITER_BVEC instead. With ITER_KVEC, we don't necessarily know if we can map it, for bvec we already have the pages. And from the aio point of view, we know the pages are sane. -- Jens Axboe