Re: [RFC PATCH 0/7] block, fs: convert Direct IO to FOLL_PIN
From: David Hildenbrand <hidden>
Date: 2022-02-25 13:12:47
Also in:
linux-fsdevel, linux-mm, linux-xfs, lkml
From: David Hildenbrand <hidden>
Date: 2022-02-25 13:12:47
Also in:
linux-fsdevel, linux-mm, linux-xfs, lkml
On 25.02.22 09:50, John Hubbard wrote:
Hi, Summary: This puts some prerequisites in place, including a CONFIG parameter, making it possible to start converting and testing the Direct IO part of each filesystem, from get_user_pages_fast(), to pin_user_pages_fast(). It will take "a few" kernel releases to get the whole thing done. Details: As part of fixing the "get_user_pages() + file-backed memory" problem [1], and to support various COW-related fixes as well [2], we need to convert the Direct IO code from get_user_pages_fast(), to pin_user_pages_fast(). Because pin_user_pages*() calls require a corresponding call to unpin_user_page(), the conversion is more elaborate than just substitution. Further complicating the conversion, the block/bio layers get their Direct IO pages via iov_iter_get_pages() and iov_iter_get_pages_alloc(), each of which has a large number of callers. All of those callers need to be audited and changed so that they call unpin_user_page(), rather than put_page().
vmsplice is another candidate that uses iov_iter_get_pages() and should be converted to FOLL_PIN. For that particular user, we have to also pass FOLL_LONGTERM -- vmsplice as it stands can block memory hotunplug / CMA / ... for all eternity. -- Thanks, David / dhildenb