On 4/17/23 13:56, Jason Gunthorpe wrote:
On Sat, Apr 15, 2023 at 12:27:45AM +0100, Lorenzo Stoakes wrote:
Commit edd478269640 ("io_uring/rsrc: disallow multi-source reg buffers")
prevents io_pin_pages() from pinning pages spanning multiple VMAs with
permitted characteristics (anon/huge), requiring that all VMAs share the
same vm_file.
That commmit doesn't really explain why io_uring is doing such a weird
thing.
What exactly is the problem with mixing struct pages from different
files and why of all the GUP users does only io_uring need to care
about this?
Simply because it doesn't seem sane to mix and register buffers of
different "nature" as one. It's not a huge deal for currently allowed
types, e.g. mixing normal and huge anon pages, but it's rather a matter
of time before it gets extended, and then I'll certainly become a
problem. We've been asked just recently to allow registering bufs
provided mapped by some specific driver, or there might be DMA mapped
memory in the future.
Rejecting based on vmas might be too conservative, I agree and am all
for if someone can help to make it right.