Here's a set of patches to make the following changes to the cifs filesystem driver: (1) Convert cifs to use I/O iterators to pass data/buffers from the the VM interface layer down to the socket rather than passing page lists about. (2) Convert cifs to use netfslib for buffered and direct read operations. (3) A partial conversion to folios. This branch is built on top of my netfs-lib branch[1]. The patches can be found here also: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=cifs-experimental David Link: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=netfs-lib [1] --- David Howells (14): cifs: Add some helper functions cifs: Add a function to read into an iter from a socket cifs: Check the IOCB_DIRECT flag, not O_DIRECT cifs: Change the I/O paths to use an iterator rather than a page list cifs: Remove unused code cifs: Use netfslib to handle reads cifs: Share server EOF pos with netfslib netfs: Allow the netfs to make the io (sub)request alloc larger cifs: Put credits into cifs_io_subrequest, not on the stack cifs: Hold the open file on netfs_io_request, not netfs_io_subrequest cifs: Clamp length according to credits and rsize cifs: Expose netfs subrequest debug ID and index in read tracepoints cifs: Split the smb3_add_credits tracepoint mm, netfs, fscache: Stop read optimisation when folio removed from pagecache fs/afs/file.c | 1 + fs/afs/inode.c | 1 + fs/afs/internal.h | 2 + fs/cifs/Kconfig | 1 + fs/cifs/cifsencrypt.c | 40 +- fs/cifs/cifsfs.c | 11 +- fs/cifs/cifsfs.h | 6 +- fs/cifs/cifsglob.h | 53 +- fs/cifs/cifsproto.h | 13 +- fs/cifs/cifssmb.c | 252 +++-- fs/cifs/connect.c | 18 +- fs/cifs/file.c | 2096 ++++++++++----------------------------- fs/cifs/fscache.c | 120 +-- fs/cifs/fscache.h | 70 -- fs/cifs/inode.c | 22 +- fs/cifs/misc.c | 109 -- fs/cifs/smb2ops.c | 387 ++++---- fs/cifs/smb2pdu.c | 85 +- fs/cifs/smb2proto.h | 2 +- fs/cifs/trace.h | 151 ++- fs/cifs/transport.c | 41 +- fs/netfs/internal.h | 1 + fs/netfs/io.c | 7 +- fs/netfs/misc.c | 13 +- fs/netfs/stats.c | 9 +- include/linux/fs.h | 2 + include/linux/netfs.h | 1 + include/linux/pagemap.h | 1 + mm/filemap.c | 15 + 29 files changed, 1203 insertions(+), 2327 deletions(-)