From: Michael Vrable Date: Tue, 23 Feb 2010 01:12:14 +0000 (-0800) Subject: Allow larger reads and writes. X-Git-Url: http://git.vrable.net/?p=bluesky.git;a=commitdiff_plain;h=105feb97ef2173d6ea45df177599be6d4592640b Allow larger reads and writes. Support reads up to 1 MB now, instead of just 32 kB. --- diff --git a/nfs3/nfs3.c b/nfs3/nfs3.c index 2895e5b..818cd4b 100644 --- a/nfs3/nfs3.c +++ b/nfs3/nfs3.c @@ -9,6 +9,9 @@ extern BlueSkyFS *fs; +#define NFS_BLOCKSIZE 32768 +#define NFS_MAXSIZE (1 << 20) + /* Check that a string is a valid file name. We require that it be valid * UTF-8, that it not be empty, and that it not contain embedded forward * slashes. Also checks that the length of the string is not more than the @@ -323,7 +326,7 @@ void nfsproc3_read_3_svc(read3args *argp, RPCRequest *req) { read3res result; memset(&result, 0, sizeof(result)); - char buf[32768]; + char buf[NFS_MAXSIZE]; BlueSkyInode *inode = lookup_fh(req, &argp->file); if (inode == NULL) { @@ -340,6 +343,7 @@ void nfsproc3_read_3_svc(read3args *argp, RPCRequest *req) count = 0; result.read3res_u.resok.eof = TRUE; } else { + count = MIN(count, NFS_MAXSIZE); count = MIN(count, inode->size - argp->offset); if (argp->offset + count == inode->size) result.read3res_u.resok.eof = TRUE; @@ -1048,13 +1052,13 @@ void nfsproc3_fsinfo_3_svc(nfs_fh3 *argp, RPCRequest *req) result.status = NFS3_OK; result.fsinfo3res_u.resok.obj_attributes.present = TRUE; encode_fattr3(&result.fsinfo3res_u.resok.obj_attributes.post_op_attr_u.attributes, inode); - result.fsinfo3res_u.resok.rtmax = 32768; - result.fsinfo3res_u.resok.rtpref = 32768; - result.fsinfo3res_u.resok.rtmult = 4096; - result.fsinfo3res_u.resok.wtmax = 32768; - result.fsinfo3res_u.resok.wtpref = 32768; - result.fsinfo3res_u.resok.wtmult = 4096; - result.fsinfo3res_u.resok.dtpref = 4096; + result.fsinfo3res_u.resok.rtmax = NFS_MAXSIZE; + result.fsinfo3res_u.resok.rtpref = NFS_MAXSIZE; + result.fsinfo3res_u.resok.rtmult = NFS_BLOCKSIZE; + result.fsinfo3res_u.resok.wtmax = NFS_MAXSIZE; + result.fsinfo3res_u.resok.wtpref = NFS_MAXSIZE; + result.fsinfo3res_u.resok.wtmult = NFS_BLOCKSIZE; + result.fsinfo3res_u.resok.dtpref = NFS_BLOCKSIZE; result.fsinfo3res_u.resok.maxfilesize = 0x7fffffffffffffffULL; result.fsinfo3res_u.resok.time_delta.seconds = 0; result.fsinfo3res_u.resok.time_delta.nseconds = 1000;