NFS: support large reads and writes on the wire
Most NFS server implementations allow up to 64KB reads and writes on the wire. The Solaris NFS server allows up to a megabyte, for instance. Now the Linux NFS client supports transfer sizes up to 1MB, too. This will help reduce protocol and context switch overhead on read/write intensive NFS workloads, and support larger atomic read and write operations on servers that support them. Test-plan: Connectathon and iozone on mount point with wsize=rsize>32768 over TCP. Tests with NFS over UDP to verify the maximum RPC payload size cap. Signed-off-by: Chuck Lever <cel@netapp.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
committed by
Trond Myklebust
parent
325cfed9ae
commit
40859d7ee6
+3
-3
@@ -83,7 +83,7 @@ static int nfs_readpage_sync(struct nfs_open_context *ctx, struct inode *inode,
|
||||
int result;
|
||||
struct nfs_read_data *rdata;
|
||||
|
||||
rdata = nfs_readdata_alloc();
|
||||
rdata = nfs_readdata_alloc(1);
|
||||
if (!rdata)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -283,7 +283,7 @@ static int nfs_pagein_multi(struct list_head *head, struct inode *inode)
|
||||
|
||||
nbytes = req->wb_bytes;
|
||||
for(;;) {
|
||||
data = nfs_readdata_alloc();
|
||||
data = nfs_readdata_alloc(1);
|
||||
if (!data)
|
||||
goto out_bad;
|
||||
INIT_LIST_HEAD(&data->pages);
|
||||
@@ -339,7 +339,7 @@ static int nfs_pagein_one(struct list_head *head, struct inode *inode)
|
||||
if (NFS_SERVER(inode)->rsize < PAGE_CACHE_SIZE)
|
||||
return nfs_pagein_multi(head, inode);
|
||||
|
||||
data = nfs_readdata_alloc();
|
||||
data = nfs_readdata_alloc(NFS_SERVER(inode)->rpages);
|
||||
if (!data)
|
||||
goto out_bad;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user