nfs41: fix session fore channel negotiation
If the rsize or wsize is not set on the mount command, negotiate the highest supported rsize and wsize in session creation. Fixes a bug where the client negotiated nfs41_maxwrite_overhead as ca_maxrequestsize and nfs41_maxread_overhead as ca_maxresponsesize resulting in NFS4ERR_REQ_TOO_BIG errors on writes. Signed-off-by: Andy Adamson <andros@netapp.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
a5523b84c4
commit
68bf05efb7
|
@ -4935,14 +4935,22 @@ int nfs4_init_session(struct nfs_server *server)
|
|||
{
|
||||
struct nfs_client *clp = server->nfs_client;
|
||||
struct nfs4_session *session;
|
||||
unsigned int rsize, wsize;
|
||||
int ret;
|
||||
|
||||
if (!nfs4_has_session(clp))
|
||||
return 0;
|
||||
|
||||
rsize = server->rsize;
|
||||
if (rsize == 0)
|
||||
rsize = NFS_MAX_FILE_IO_SIZE;
|
||||
wsize = server->wsize;
|
||||
if (wsize == 0)
|
||||
wsize = NFS_MAX_FILE_IO_SIZE;
|
||||
|
||||
session = clp->cl_session;
|
||||
session->fc_attrs.max_rqst_sz = server->wsize + nfs41_maxwrite_overhead;
|
||||
session->fc_attrs.max_resp_sz = server->rsize + nfs41_maxread_overhead;
|
||||
session->fc_attrs.max_rqst_sz = wsize + nfs41_maxwrite_overhead;
|
||||
session->fc_attrs.max_resp_sz = rsize + nfs41_maxread_overhead;
|
||||
|
||||
ret = nfs4_recover_expired_lease(server);
|
||||
if (!ret)
|
||||
|
|
Loading…
Reference in New Issue