diff options
| author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-04-07 20:50:11 -0400 |
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-04-19 16:54:56 -0400 |
| commit | 7c67db3a8a98045744f06fcd6d8f476d9df0ba5c (patch) | |
| tree | 4d0041249b48f9ac66560550e0e96c9c86c37891 /fs/nfs | |
| parent | 78ea323be6380a9313e87fe241809e912e8ae401 (diff) | |
NFSv4: Reintroduce machine creds
We need to try to ensure that we always use the same credentials whenever
we re-establish the clientid on the server. If not, the server won't
recognise that we're the same client, and so may not allow us to recover
state.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs')
| -rw-r--r-- | fs/nfs/client.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 93dfd75aba7c..f2f3b284e6dd 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c | |||
| @@ -112,6 +112,7 @@ struct nfs_client_initdata { | |||
| 112 | static struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_init) | 112 | static struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_init) |
| 113 | { | 113 | { |
| 114 | struct nfs_client *clp; | 114 | struct nfs_client *clp; |
| 115 | struct rpc_cred *cred; | ||
| 115 | 116 | ||
| 116 | if ((clp = kzalloc(sizeof(*clp), GFP_KERNEL)) == NULL) | 117 | if ((clp = kzalloc(sizeof(*clp), GFP_KERNEL)) == NULL) |
| 117 | goto error_0; | 118 | goto error_0; |
| @@ -150,6 +151,9 @@ static struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_ | |||
| 150 | clp->cl_boot_time = CURRENT_TIME; | 151 | clp->cl_boot_time = CURRENT_TIME; |
| 151 | clp->cl_state = 1 << NFS4CLNT_LEASE_EXPIRED; | 152 | clp->cl_state = 1 << NFS4CLNT_LEASE_EXPIRED; |
| 152 | #endif | 153 | #endif |
| 154 | cred = rpc_lookup_machine_cred(); | ||
| 155 | if (!IS_ERR(cred)) | ||
| 156 | clp->cl_machine_cred = cred; | ||
| 153 | 157 | ||
| 154 | return clp; | 158 | return clp; |
| 155 | 159 | ||
| @@ -191,6 +195,9 @@ static void nfs_free_client(struct nfs_client *clp) | |||
| 191 | if (__test_and_clear_bit(NFS_CS_CALLBACK, &clp->cl_res_state)) | 195 | if (__test_and_clear_bit(NFS_CS_CALLBACK, &clp->cl_res_state)) |
| 192 | nfs_callback_down(); | 196 | nfs_callback_down(); |
| 193 | 197 | ||
| 198 | if (clp->cl_machine_cred != NULL) | ||
| 199 | put_rpccred(clp->cl_machine_cred); | ||
| 200 | |||
| 194 | kfree(clp->cl_hostname); | 201 | kfree(clp->cl_hostname); |
| 195 | kfree(clp); | 202 | kfree(clp); |
| 196 | 203 | ||
