Skip to content

Commit

Permalink
nfs41: fix session fore channel negotiation
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Andy Adamson authored and Trond Myklebust committed Dec 15, 2009
1 parent a5523b8 commit 68bf05e
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions fs/nfs/nfs4proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 68bf05e

Please sign in to comment.