mbox series

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

Message ID 166722777223.2555743.162508599131141451.stgit@warthog.procyon.org.uk
Headers show
Series iov_iter: Provide a function to extract/pin/get pages from an iteraor | expand

Message

David Howells Oct. 31, 2022, 2:49 p.m. UTC
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(-)

Comments

Matthew Wilcox Oct. 31, 2022, 2:52 p.m. UTC | #1
On Mon, Oct 31, 2022 at 02:49:32PM +0000, David Howells wrote:
> 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'd support moving FOLL_* definitions to mm_types.h along with
FAULT_FLAG_* and VM_FAULT_*.
John Hubbard Oct. 31, 2022, 8:46 p.m. UTC | #2
On 10/31/22 07:52, Matthew Wilcox wrote:
> On Mon, Oct 31, 2022 at 02:49:32PM +0000, David Howells wrote:
>> 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'd support moving FOLL_* definitions to mm_types.h along with
> FAULT_FLAG_* and VM_FAULT_*.

+1, great idea. The use of FOLL_* without including it's .h directly was
the first thing that jumped out at me when I just started looking at
this. And these really are mm types, so yes.

thanks,