Re: [RFC PATCH 0/7] block, fs: convert Direct IO to FOLL_PIN
From: Jan Kara <jack@suse.cz>
Date: 2022-02-25 12:05:30
Also in:
linux-fsdevel, linux-mm, linux-xfs, lkml
On Fri 25-02-22 00:50:18, 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(). After quite some time exploring and consulting with people as well, it is clear that this cannot be done in just one patchset. That's because, not only is this large and time-consuming (for example, Chaitanya Kulkarni's first reaction, after looking into the details, was, "convert the remaining filesystems to use iomap, *then* convert to FOLL_PIN..."), but it is also spread across many filesystems.
With having modified fs/direct-io.c and fs/iomap/direct-io.c which filesystems do you know are missing conversion? Or is it that you just want to make sure with audit everything is fine? The only fs I could find unconverted by your changes is ceph. Am I missing something? Honza -- Jan Kara [off-list ref] SUSE Labs, CR