Hi Steve, Al, Here's an updated version of a subset of my branch to make the cifs/smb3 driver pass iov_iters down to the lowest layers where they can be passed to the network transport. Al: Could you look at the first two patches, that add extract_iter_to_iter() to see about decanting iterators of various types (but that might have to be lost) into iterators that can be held on to (pinning pages in the process), and iov_iter_scan() which passes each partial page of an iterator to a scanner function to do something with (such as create an sglist element for). Possibly I should add an extract_iter_to_sglist() - I'm doing that in a number of places. Steve: assuming Al is okay with the iov_iter patches, can you look at taking this into your tree (or should it go through mine?)? I've pushed the patches here also: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=cifs-for-viro David --- David Howells (7): iov_iter: Add a function to extract an iter's buffers to a bvec iter iov_iter: Add a general purpose iteration function cifs: Add some helper functions cifs: Add a function to read into an iter from a socket cifs: Change the I/O paths to use an iterator rather than a page list cifs: Remove unused code cifs: Add some RDMA send tracepoints fs/cifs/cifsencrypt.c | 40 +- fs/cifs/cifsfs.h | 3 + fs/cifs/cifsglob.h | 28 +- fs/cifs/cifsproto.h | 11 +- fs/cifs/cifssmb.c | 13 +- fs/cifs/connect.c | 16 + fs/cifs/file.c | 1653 ++++++++++++++++++----------------------- fs/cifs/fscache.c | 22 +- fs/cifs/fscache.h | 10 +- fs/cifs/misc.c | 108 --- fs/cifs/smb2ops.c | 369 +++++---- fs/cifs/smb2pdu.c | 44 +- fs/cifs/smbdirect.c | 335 ++++----- fs/cifs/smbdirect.h | 4 +- fs/cifs/trace.h | 95 +++ fs/cifs/transport.c | 54 +- include/linux/uio.h | 8 + lib/iov_iter.c | 159 +++- 18 files changed, 1391 insertions(+), 1581 deletions(-)