Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02fe4946 authored by Chuck Lever's avatar Chuck Lever Committed by Trond Myklebust
Browse files

NFS: Clean up new multi-segment direct I/O changes



Simplify calling sequence of nfs_direct_{read,write}_schedule(), and
rename them to reflect their new role.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent b9148c6b
Loading
Loading
Loading
Loading
+13 −9
Original line number Original line Diff line number Diff line
@@ -263,10 +263,14 @@ static const struct rpc_call_ops nfs_read_direct_ops = {
 * handled automatically by nfs_direct_read_result().  Otherwise, if
 * handled automatically by nfs_direct_read_result().  Otherwise, if
 * no requests have been sent, just return an error.
 * no requests have been sent, just return an error.
 */
 */
static ssize_t nfs_direct_read_schedule(struct nfs_direct_req *dreq, unsigned long user_addr, size_t count, loff_t pos)
static ssize_t nfs_direct_read_schedule_segment(struct nfs_direct_req *dreq,
						const struct iovec *iov,
						loff_t pos)
{
{
	struct nfs_open_context *ctx = dreq->ctx;
	struct nfs_open_context *ctx = dreq->ctx;
	struct inode *inode = ctx->path.dentry->d_inode;
	struct inode *inode = ctx->path.dentry->d_inode;
	unsigned long user_addr = (unsigned long)iov->iov_base;
	size_t count = iov->iov_len;
	size_t rsize = NFS_SERVER(inode)->rsize;
	size_t rsize = NFS_SERVER(inode)->rsize;
	unsigned int pgbase;
	unsigned int pgbase;
	int result;
	int result;
@@ -363,9 +367,7 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,


	for (seg = 0; seg < nr_segs; seg++) {
	for (seg = 0; seg < nr_segs; seg++) {
		const struct iovec *vec = &iov[seg];
		const struct iovec *vec = &iov[seg];
		result = nfs_direct_read_schedule(dreq,
		result = nfs_direct_read_schedule_segment(dreq, vec, pos);
					(unsigned long)vec->iov_base,
						  vec->iov_len, pos);
		if (result < 0)
		if (result < 0)
			break;
			break;
		requested_bytes += result;
		requested_bytes += result;
@@ -631,10 +633,14 @@ static const struct rpc_call_ops nfs_write_direct_ops = {
 * handled automatically by nfs_direct_write_result().  Otherwise, if
 * handled automatically by nfs_direct_write_result().  Otherwise, if
 * no requests have been sent, just return an error.
 * no requests have been sent, just return an error.
 */
 */
static ssize_t nfs_direct_write_schedule(struct nfs_direct_req *dreq, unsigned long user_addr, size_t count, loff_t pos, int sync)
static ssize_t nfs_direct_write_schedule_segment(struct nfs_direct_req *dreq,
						 const struct iovec *iov,
						 loff_t pos, int sync)
{
{
	struct nfs_open_context *ctx = dreq->ctx;
	struct nfs_open_context *ctx = dreq->ctx;
	struct inode *inode = ctx->path.dentry->d_inode;
	struct inode *inode = ctx->path.dentry->d_inode;
	unsigned long user_addr = (unsigned long)iov->iov_base;
	size_t count = iov->iov_len;
	size_t wsize = NFS_SERVER(inode)->wsize;
	size_t wsize = NFS_SERVER(inode)->wsize;
	unsigned int pgbase;
	unsigned int pgbase;
	int result;
	int result;
@@ -735,9 +741,7 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,


	for (seg = 0; seg < nr_segs; seg++) {
	for (seg = 0; seg < nr_segs; seg++) {
		const struct iovec *vec = &iov[seg];
		const struct iovec *vec = &iov[seg];
		result = nfs_direct_write_schedule(dreq,
		result = nfs_direct_write_schedule_segment(dreq, vec,
					(unsigned long)vec->iov_base,
						   vec->iov_len,
							   pos, sync);
							   pos, sync);
		if (result < 0)
		if (result < 0)
			break;
			break;