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

Commit 50828d7e authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFS: Cache rpc_ops in struct nfs_pageio_descriptor

parent 275acaaf
Loading
Loading
Loading
Loading
+8 −11
Original line number Diff line number Diff line
@@ -327,6 +327,7 @@ static int nfs_pagein_multi(struct nfs_pageio_descriptor *desc, struct list_head
	} while(nbytes != 0);
	atomic_set(&req->wb_complete, requests);
	ClearPageError(page);
	desc->pg_rpc_callops = &nfs_read_partial_ops;
	return ret;
out_bad:
	while (!list_empty(res)) {
@@ -367,6 +368,7 @@ static int nfs_pagein_one(struct nfs_pageio_descriptor *desc, struct list_head *

	nfs_read_rpcsetup(req, data, desc->pg_count, 0);
	list_add(&data->list, res);
	desc->pg_rpc_callops = &nfs_read_full_ops;
out:
	return ret;
}
@@ -376,19 +378,14 @@ int nfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc)
	LIST_HEAD(head);
	int ret;

	if (desc->pg_bsize < PAGE_CACHE_SIZE) {
	if (desc->pg_bsize < PAGE_CACHE_SIZE)
		ret = nfs_pagein_multi(desc, &head);
		if (ret == 0)
			ret = nfs_do_multiple_reads(&head,
					&nfs_read_partial_ops,
					desc->pg_lseg);
	} else {
	else
		ret = nfs_pagein_one(desc, &head);

	if (ret == 0)
			ret = nfs_do_multiple_reads(&head,
					&nfs_read_full_ops,
		ret = nfs_do_multiple_reads(&head, desc->pg_rpc_callops,
				desc->pg_lseg);
	}
	put_lseg(desc->pg_lseg);
	desc->pg_lseg = NULL;
	return ret;
+7 −13
Original line number Diff line number Diff line
@@ -975,6 +975,7 @@ static int nfs_flush_multi(struct nfs_pageio_descriptor *desc, struct list_head
		offset += len;
	} while (nbytes != 0);
	atomic_set(&req->wb_complete, requests);
	desc->pg_rpc_callops = &nfs_write_partial_ops;
	return ret;

out_bad:
@@ -1031,6 +1032,7 @@ static int nfs_flush_one(struct nfs_pageio_descriptor *desc, struct list_head *r
	/* Set up the argument struct */
	nfs_write_rpcsetup(req, data, desc->pg_count, 0, desc->pg_ioflags);
	list_add(&data->list, res);
	desc->pg_rpc_callops = &nfs_write_full_ops;
out:
	return ret;
}
@@ -1040,21 +1042,13 @@ int nfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc)
	LIST_HEAD(head);
	int ret;

	if (desc->pg_bsize < PAGE_CACHE_SIZE) {
	if (desc->pg_bsize < PAGE_CACHE_SIZE)
		ret = nfs_flush_multi(desc, &head);
		if (ret == 0)
			ret = nfs_do_multiple_writes(&head,
					&nfs_write_partial_ops,
					desc->pg_lseg,
					desc->pg_ioflags);
	} else {
	else
		ret = nfs_flush_one(desc, &head);
	if (ret == 0)
			ret = nfs_do_multiple_writes(&head,
					&nfs_write_full_ops,
					desc->pg_lseg,
					desc->pg_ioflags);
	}
		ret = nfs_do_multiple_writes(&head, desc->pg_rpc_callops,
				desc->pg_lseg, desc->pg_ioflags);
	put_lseg(desc->pg_lseg);
	desc->pg_lseg = NULL;
	return ret;
+1 −0
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ struct nfs_pageio_descriptor {
	const struct nfs_pageio_ops *pg_ops;
	int 			pg_ioflags;
	int			pg_error;
	const struct rpc_call_ops *pg_rpc_callops;
	struct pnfs_layout_segment *pg_lseg;
};