nfs41: recover lease in _nfs4_lookup_root
This creates the nfsv4.1 session on mount. Signed-off-by: Benny Halevy <bhalevy@panasas.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
b4b82607ff
commit
008f55d0e0
3 changed files with 25 additions and 1 deletions
|
@ -527,6 +527,22 @@ void nfs_mark_client_ready(struct nfs_client *clp, int state)
|
||||||
wake_up_all(&nfs_client_active_wq);
|
wake_up_all(&nfs_client_active_wq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* With sessions, the client is not marked ready until after a
|
||||||
|
* successful EXCHANGE_ID and CREATE_SESSION.
|
||||||
|
*
|
||||||
|
* Map errors cl_cons_state errors to EPROTONOSUPPORT to indicate
|
||||||
|
* other versions of NFS can be tried.
|
||||||
|
*/
|
||||||
|
int nfs4_check_client_ready(struct nfs_client *clp)
|
||||||
|
{
|
||||||
|
if (!nfs4_has_session(clp))
|
||||||
|
return 0;
|
||||||
|
if (clp->cl_cons_state < NFS_CS_READY)
|
||||||
|
return -EPROTONOSUPPORT;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialise the timeout values for a connection
|
* Initialise the timeout values for a connection
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -114,6 +114,7 @@ extern struct nfs_server *nfs_clone_server(struct nfs_server *,
|
||||||
struct nfs_fh *,
|
struct nfs_fh *,
|
||||||
struct nfs_fattr *);
|
struct nfs_fattr *);
|
||||||
extern void nfs_mark_client_ready(struct nfs_client *clp, int state);
|
extern void nfs_mark_client_ready(struct nfs_client *clp, int state);
|
||||||
|
extern int nfs4_check_client_ready(struct nfs_client *clp);
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_PROC_FS
|
||||||
extern int __init nfs_fs_proc_init(void);
|
extern int __init nfs_fs_proc_init(void);
|
||||||
extern void nfs_fs_proc_exit(void);
|
extern void nfs_fs_proc_exit(void);
|
||||||
|
|
|
@ -2024,8 +2024,15 @@ static int _nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
.rpc_argp = &args,
|
.rpc_argp = &args,
|
||||||
.rpc_resp = &res,
|
.rpc_resp = &res,
|
||||||
};
|
};
|
||||||
|
int status;
|
||||||
|
|
||||||
nfs_fattr_init(info->fattr);
|
nfs_fattr_init(info->fattr);
|
||||||
return nfs4_call_sync(server, &msg, &args, &res, 0);
|
status = nfs4_recover_expired_lease(server);
|
||||||
|
if (!status)
|
||||||
|
status = nfs4_check_client_ready(server->nfs_client);
|
||||||
|
if (!status)
|
||||||
|
status = nfs4_call_sync(server, &msg, &args, &res, 0);
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle,
|
static int nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
|
|
Loading…
Reference in a new issue