netfs: Add support for DIO buffering
authorDavid Howells <dhowells@redhat.com>
Fri, 9 Jul 2021 07:41:17 +0000 (08:41 +0100)
committerDavid Howells <dhowells@redhat.com>
Thu, 28 Dec 2023 09:42:44 +0000 (09:42 +0000)
commit21d706d5cf570917594b21edee81893bdce09ab8
treea692b502c516bfafba77a2d98088155fe314ea0c
parent92b6cc5d1e7cbe569f00e9c1249ac8214fd5e2d2
netfs: Add support for DIO buffering

Add a bvec array pointer and an iterator to netfs_io_request for either
holding a copy of a DIO iterator or a list of all the bits of buffer
pointed to by a DIO iterator.

There are two problems:  Firstly, if an iovec-class iov_iter is passed to
->read_iter() or ->write_iter(), this cannot be passed directly to
kernel_sendmsg() or kernel_recvmsg() as that may cause locking recursion if
a fault is generated, so we need to keep track of the pages involved
separately.

Secondly, if the I/O is asynchronous, we must copy the iov_iter describing
the buffer before returning to the caller as it may be immediately
deallocated.

Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
cc: linux-cachefs@redhat.com
cc: linux-fsdevel@vger.kernel.org
cc: linux-mm@kvack.org
fs/netfs/objects.c
include/linux/netfs.h