• Linus Torvalds's avatar
    aio: clean up and fix aio_setup_ring page mapping · 3dc9acb6
    Linus Torvalds authored
    Since commit 36bc08cc ("fs/aio: Add support to aio ring pages
    migration") the aio ring setup code has used a special per-ring backing
    inode for the page allocations, rather than just using random anonymous
    pages.
    
    However, rather than remembering the pages as it allocated them, it
    would allocate the pages, insert them into the file mapping (dirty, so
    that they couldn't be free'd), and then forget about them.  And then to
    look them up again, it would mmap the mapping, and then use
    "get_user_pages()" to get back an array of the pages we just created.
    
    Now, not only is that incredibly inefficient, it also leaked all the
    pages if the mmap failed (which could happen due to excessive number of
    mappings, for example).
    
    So clean it all up, making it much more straightforward.  Also remove
    some left-overs of the previous (broken) mm_populate() usage that was
    removed in commit d6c355c7 ("aio: fix race in ring buffer page
    lookup introduced by page migration support") but left the pointless and
    now misleading MAP_POPULATE flag around.
    Tested-and-acked-by: default avatarBenjamin LaHaise <bcrl@kvack.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    3dc9acb6
aio.c 37 KB