[RFC PATCH 0/2] iov_iter: Provide a function to extract/pin/get pages from an iteraor

From: David Howells
Date: Mon Oct 31 2022 - 10:50:41 EST



Hi Al,

Here's a patch to provide a function to extract a list of pages from an
iterator, getting pins of refs on them as appropriate.

I added a macro by which you can query an iterator to find out how the
extraction function will treat the pages (it returns 0, FOLL_GET or FOLL_PIN
as appropriate). Note that it's a macro to avoid #inclusion of linux/mm.h in
linux/uio.h.

I've added another crude, incomplete patch to make cifs use it a bit as an
example. Note that cifs won't work properly with this under all
circumstances, particularly if it decides to split the rdata or wdata record -
but it seems to work for small I/Os.

David
---
David Howells (2):
iov_iter: Add a function to extract a page list from an iterator
cifs: Test use of iov_iter_extract_pages() and iov_iter_extract_mode()


fs/cifs/cifsglob.h | 2 +
fs/cifs/file.c | 93 +++++++++----
include/linux/uio.h | 26 ++++
lib/iov_iter.c | 333 ++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 427 insertions(+), 27 deletions(-)