[pnfs] [PATCH] Removed sessions hard-coded 32678 byte max sizes
William A. (Andy) Adamson
andros at citi.umich.edu
Fri Mar 16 11:11:54 EDT 2007
if there are no objections - i will apply this patch.
-->Andy
On 3/15/07, Andy Adamson <andros at umich.edu> wrote:
>
> Client: replace fore and back channel 32768 max_rqst_sz, max_resp_sz, and
> max_resp_sz_cached with NFS_MAX_FILE_IO_SIZE.
>
> Server: use svc_max_payload(rqstp) to set fore and back channel sizes
>
> NOTE: This is really sessions branch code - but is dependant on the
> largeio
> patch in the pNFS branch. We decided to leave it in the pNFS branch.
> ---
> fs/nfs/nfs4xdr.c | 12 ++++++------
> fs/nfsd/nfs4state.c | 9 +++++++++
> 2 files changed, 15 insertions(+), 6 deletions(-)
>
> diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
> index f2a5c21..4f18c2f 100644
> --- a/fs/nfs/nfs4xdr.c
> +++ b/fs/nfs/nfs4xdr.c
> @@ -1498,18 +1498,18 @@ static int encode_create_session(struct xdr_stream
> *xdr, struct nfs41_create_ses
> RESERVE_SPACE(2*28); /* 2 channel_attrs */
>
> /* Fore Channel */
> - WRITE32(32768); /* max req size */
> - WRITE32(32768); /* max resp size */
> - WRITE32(32768); /* Max resp size cached */
> + WRITE32(NFS_MAX_FILE_IO_SIZE); /* max req size */
> + WRITE32(NFS_MAX_FILE_IO_SIZE); /* max resp size */
> + WRITE32(NFS_MAX_FILE_IO_SIZE); /* Max resp size cached */
> WRITE32(RPC_DEF_SLOT_TABLE); /* max operations */
> WRITE32(RPC_DEF_SLOT_TABLE); /* max requests */
> WRITE32(0); /* Streamchannel attrs */
> WRITE32(0); /*rdmachannel_attrs */
>
> /* Back Channel */
> - WRITE32(32768); /* max req size */
> - WRITE32(32768); /* max resp size */
> - WRITE32(32768); /* Max resp size cached */
> + WRITE32(NFS_MAX_FILE_IO_SIZE); /* max req size */
> + WRITE32(NFS_MAX_FILE_IO_SIZE); /* max resp size */
> + WRITE32(NFS_MAX_FILE_IO_SIZE); /* Max resp size cached */
> WRITE32(RPC_DEF_SLOT_TABLE); /* max operations */
> WRITE32(RPC_DEF_SLOT_TABLE); /* max requests */
> WRITE32(0); /* Streamchannel attrs */
> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> index 43fa8ff..259228f 100644
> --- a/fs/nfsd/nfs4state.c
> +++ b/fs/nfsd/nfs4state.c
> @@ -74,6 +74,8 @@ static stateid_t onestateid; /* bits all 1
> */
> #define ZERO_STATEID(stateid) (!memcmp((stateid), &zerostateid,
> sizeof(stateid_t)))
> #define ONE_STATEID(stateid) (!memcmp((stateid), &onestateid,
> sizeof(stateid_t)))
>
> +extern __u32 svc_max_payload(const struct svc_rqst *rqstp);
> +
> /* forward declarations */
> static struct nfs4_stateid * find_stateid(stateid_t *stid, int flags);
> static struct nfs4_delegation * find_delegation_stateid(struct inode *ino,
> stateid_t *stid);
> @@ -1253,6 +1255,7 @@ int nfsd4_create_session(struct svc_rqst *rqstp,
> struct nfsd4_create_session *se
> {
> u32 ip_addr = rqstp->rq_addr.sin_addr.s_addr;
> struct nfs4_client *conf, *unconf;
> + __u32 max_blocksize = svc_max_payload(rqstp);
> int status = 0;
>
> if (STALE_CLIENTID(&session->clientid))
> @@ -1302,6 +1305,12 @@ int nfsd4_create_session(struct svc_rqst *rqstp,
> struct nfsd4_create_session *se
> out_replay:
> memcpy(session->sessionid, conf->cl_sessionid, 16);
> session->seqid = conf->cl_seqid;
> + session->fore_channel.maxreq_sz = max_blocksize;
> + session->fore_channel.maxresp_sz = max_blocksize;
> + session->fore_channel.maxresp_cached = max_blocksize;
> + session->back_channel.maxreq_sz = max_blocksize;
> + session->back_channel.maxresp_sz = max_blocksize;
> + session->back_channel.maxresp_cached = max_blocksize;
> out:
> nfs4_unlock_state();
> dprintk("%s returns %d %d\n", __FUNCTION__, status,
> ntohl(status));
> --
> 1.5.0.2
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://linux-nfs.org/pipermail/pnfs/attachments/20070316/c1424827/attachment.htm
More information about the pNFS
mailing list