diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2009-07-21 16:48:07 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2009-07-21 16:48:07 -0400 |
commit | fccba8045537f7e840d0e7565e1989d465e488a3 (patch) | |
tree | 89d80da7e017240e5a1d20c79501459c886fd007 /fs/nfs/nfs4proc.c | |
parent | b64aec8d1e1d8482a7b6cca60c8105c756bf1fe4 (diff) |
NFSv4: Fix an NFSv4 mount regression
Commit 008f55d0e019943323c20a03493a2ba5672a4cc8 (nfs41: recover lease in
_nfs4_lookup_root) forces the state manager to always run on mount. This is
a bug in the case of NFSv4.0, which doesn't require us to send a
setclientid until we want to grab file state.
In any case, this is completely the wrong place to be doing state
management. Moving that code into nfs4_init_session...
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r-- | fs/nfs/nfs4proc.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index ff0c080db59b..df24f67bca69 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -2040,15 +2040,9 @@ static int _nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle, | |||
2040 | .rpc_argp = &args, | 2040 | .rpc_argp = &args, |
2041 | .rpc_resp = &res, | 2041 | .rpc_resp = &res, |
2042 | }; | 2042 | }; |
2043 | int status; | ||
2044 | 2043 | ||
2045 | nfs_fattr_init(info->fattr); | 2044 | nfs_fattr_init(info->fattr); |
2046 | status = nfs4_recover_expired_lease(server); | 2045 | return nfs4_call_sync(server, &msg, &args, &res, 0); |
2047 | if (!status) | ||
2048 | status = nfs4_check_client_ready(server->nfs_client); | ||
2049 | if (!status) | ||
2050 | status = nfs4_call_sync(server, &msg, &args, &res, 0); | ||
2051 | return status; | ||
2052 | } | 2046 | } |
2053 | 2047 | ||
2054 | static int nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle, | 2048 | static int nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle, |
@@ -4793,6 +4787,22 @@ int nfs4_proc_destroy_session(struct nfs4_session *session) | |||
4793 | return status; | 4787 | return status; |
4794 | } | 4788 | } |
4795 | 4789 | ||
4790 | int nfs4_init_session(struct nfs_server *server) | ||
4791 | { | ||
4792 | struct nfs_client *clp = server->nfs_client; | ||
4793 | int ret; | ||
4794 | |||
4795 | if (!nfs4_has_session(clp)) | ||
4796 | return 0; | ||
4797 | |||
4798 | clp->cl_session->fc_attrs.max_rqst_sz = server->wsize; | ||
4799 | clp->cl_session->fc_attrs.max_resp_sz = server->rsize; | ||
4800 | ret = nfs4_recover_expired_lease(server); | ||
4801 | if (!ret) | ||
4802 | ret = nfs4_check_client_ready(clp); | ||
4803 | return ret; | ||
4804 | } | ||
4805 | |||
4796 | /* | 4806 | /* |
4797 | * Renew the cl_session lease. | 4807 | * Renew the cl_session lease. |
4798 | */ | 4808 | */ |