cifs: DIO to/from KVEC-type iterators should now work dave-h-patches-for-next-2-14-2023
authorDavid Howells <dhowells@redhat.com>
Mon, 16 Jan 2023 14:19:29 +0000 (14:19 +0000)
committerSteve French <stfrench@microsoft.com>
Tue, 14 Feb 2023 23:03:36 +0000 (17:03 -0600)
DIO to/from KVEC-type iterators should now work as the iterator is passed
down to the socket in non-RDMA/non-crypto mode and in RDMA or crypto mode
care is taken to handle vmap/vmalloc correctly and not take page refs when
building a scatterlist.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Steve French <sfrench@samba.org>
cc: Shyam Prasad N <nspmangalore@gmail.com>
cc: Rohith Surabattula <rohiths.msft@gmail.com>
cc: Tom Talpey <tom@talpey.com>
cc: Jeff Layton <jlayton@kernel.org>
cc: linux-cifs@vger.kernel.org
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/file.c

index 60949fc352ed73df00c3f1d9b99eee4a6be7c88f..6969699632dc2bc182515266a0092341b91b13cc 100644 (file)
@@ -3549,16 +3549,6 @@ static ssize_t __cifs_writev(
        struct cifs_aio_ctx *ctx;
        int rc;
 
-       /*
-        * iov_iter_get_pages_alloc doesn't work with ITER_KVEC.
-        * In this case, fall back to non-direct write function.
-        * this could be improved by getting pages directly in ITER_KVEC
-        */
-       if (direct && iov_iter_is_kvec(from)) {
-               cifs_dbg(FYI, "use non-direct cifs_writev for kvec I/O\n");
-               direct = false;
-       }
-
        rc = generic_write_checks(iocb, from);
        if (rc <= 0)
                return rc;
@@ -4092,16 +4082,6 @@ static ssize_t __cifs_readv(
        loff_t offset = iocb->ki_pos;
        struct cifs_aio_ctx *ctx;
 
-       /*
-        * iov_iter_get_pages_alloc() doesn't work with ITER_KVEC,
-        * fall back to data copy read path
-        * this could be improved by getting pages directly in ITER_KVEC
-        */
-       if (direct && iov_iter_is_kvec(to)) {
-               cifs_dbg(FYI, "use non-direct cifs_user_readv for kvec I/O\n");
-               direct = false;
-       }
-
        len = iov_iter_count(to);
        if (!len)
                return 0;