NFSv4.1: Adjust CREATE_SESSION arguments when mounting a new filesystem
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 20 Nov 2012 15:53:39 +0000 (10:53 -0500)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 21 Nov 2012 14:29:51 +0000 (09:29 -0500)
If we're mounting a new filesystem, ensure that the session has negotiated
large enough request and reply sizes to match the wsize and rsize mount
arguments.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/nfs4proc.c

index 3e572dc..ee82cdd 100644 (file)
@@ -6037,9 +6037,22 @@ int nfs4_init_session(struct nfs_server *server)
                session->fc_attrs.max_rqst_sz = target_max_rqst_sz;
                session->fc_target_max_resp_sz = target_max_resp_sz;
                session->fc_attrs.max_resp_sz = target_max_resp_sz;
+       } else {
+               /* Just adjust the targets */
+               if (target_max_rqst_sz > session->fc_target_max_rqst_sz) {
+                       session->fc_target_max_rqst_sz = target_max_rqst_sz;
+                       set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state);
+               }
+               if (target_max_resp_sz > session->fc_target_max_resp_sz) {
+                       session->fc_target_max_resp_sz = target_max_resp_sz;
+                       set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state);
+               }
        }
        spin_unlock(&clp->cl_lock);
 
+       if (test_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state))
+               nfs4_schedule_lease_recovery(clp);
+
        return nfs41_check_session_ready(clp);
 }