diff options
Diffstat (limited to 'fs/nfs/client.c')
| -rw-r--r-- | fs/nfs/client.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/fs/nfs/client.c b/fs/nfs/client.c index d25b5257b7a1..4e7df2adb212 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c | |||
| @@ -150,6 +150,7 @@ static struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_ | |||
| 150 | clp->cl_boot_time = CURRENT_TIME; | 150 | clp->cl_boot_time = CURRENT_TIME; |
| 151 | clp->cl_state = 1 << NFS4CLNT_LEASE_EXPIRED; | 151 | clp->cl_state = 1 << NFS4CLNT_LEASE_EXPIRED; |
| 152 | clp->cl_minorversion = cl_init->minorversion; | 152 | clp->cl_minorversion = cl_init->minorversion; |
| 153 | clp->cl_mvops = nfs_v4_minor_ops[cl_init->minorversion]; | ||
| 153 | #endif | 154 | #endif |
| 154 | cred = rpc_lookup_machine_cred(); | 155 | cred = rpc_lookup_machine_cred(); |
| 155 | if (!IS_ERR(cred)) | 156 | if (!IS_ERR(cred)) |
| @@ -178,7 +179,7 @@ static void nfs4_clear_client_minor_version(struct nfs_client *clp) | |||
| 178 | clp->cl_session = NULL; | 179 | clp->cl_session = NULL; |
| 179 | } | 180 | } |
| 180 | 181 | ||
| 181 | clp->cl_call_sync = _nfs4_call_sync; | 182 | clp->cl_mvops = nfs_v4_minor_ops[0]; |
| 182 | #endif /* CONFIG_NFS_V4_1 */ | 183 | #endif /* CONFIG_NFS_V4_1 */ |
| 183 | } | 184 | } |
| 184 | 185 | ||
| @@ -188,7 +189,7 @@ static void nfs4_clear_client_minor_version(struct nfs_client *clp) | |||
| 188 | static void nfs4_destroy_callback(struct nfs_client *clp) | 189 | static void nfs4_destroy_callback(struct nfs_client *clp) |
| 189 | { | 190 | { |
| 190 | if (__test_and_clear_bit(NFS_CS_CALLBACK, &clp->cl_res_state)) | 191 | if (__test_and_clear_bit(NFS_CS_CALLBACK, &clp->cl_res_state)) |
| 191 | nfs_callback_down(clp->cl_minorversion); | 192 | nfs_callback_down(clp->cl_mvops->minor_version); |
| 192 | } | 193 | } |
| 193 | 194 | ||
| 194 | static void nfs4_shutdown_client(struct nfs_client *clp) | 195 | static void nfs4_shutdown_client(struct nfs_client *clp) |
| @@ -1126,7 +1127,7 @@ static int nfs4_init_callback(struct nfs_client *clp) | |||
| 1126 | return error; | 1127 | return error; |
| 1127 | } | 1128 | } |
| 1128 | 1129 | ||
| 1129 | error = nfs_callback_up(clp->cl_minorversion, | 1130 | error = nfs_callback_up(clp->cl_mvops->minor_version, |
| 1130 | clp->cl_rpcclient->cl_xprt); | 1131 | clp->cl_rpcclient->cl_xprt); |
| 1131 | if (error < 0) { | 1132 | if (error < 0) { |
| 1132 | dprintk("%s: failed to start callback. Error = %d\n", | 1133 | dprintk("%s: failed to start callback. Error = %d\n", |
| @@ -1143,10 +1144,8 @@ static int nfs4_init_callback(struct nfs_client *clp) | |||
| 1143 | */ | 1144 | */ |
| 1144 | static int nfs4_init_client_minor_version(struct nfs_client *clp) | 1145 | static int nfs4_init_client_minor_version(struct nfs_client *clp) |
| 1145 | { | 1146 | { |
| 1146 | clp->cl_call_sync = _nfs4_call_sync; | ||
| 1147 | |||
| 1148 | #if defined(CONFIG_NFS_V4_1) | 1147 | #if defined(CONFIG_NFS_V4_1) |
| 1149 | if (clp->cl_minorversion) { | 1148 | if (clp->cl_mvops->minor_version) { |
| 1150 | struct nfs4_session *session = NULL; | 1149 | struct nfs4_session *session = NULL; |
| 1151 | /* | 1150 | /* |
| 1152 | * Create the session and mark it expired. | 1151 | * Create the session and mark it expired. |
| @@ -1158,7 +1157,13 @@ static int nfs4_init_client_minor_version(struct nfs_client *clp) | |||
| 1158 | return -ENOMEM; | 1157 | return -ENOMEM; |
| 1159 | 1158 | ||
| 1160 | clp->cl_session = session; | 1159 | clp->cl_session = session; |
| 1161 | clp->cl_call_sync = _nfs4_call_sync_session; | 1160 | /* |
| 1161 | * The create session reply races with the server back | ||
| 1162 | * channel probe. Mark the client NFS_CS_SESSION_INITING | ||
| 1163 | * so that the client back channel can find the | ||
| 1164 | * nfs_client struct | ||
| 1165 | */ | ||
| 1166 | clp->cl_cons_state = NFS_CS_SESSION_INITING; | ||
| 1162 | } | 1167 | } |
| 1163 | #endif /* CONFIG_NFS_V4_1 */ | 1168 | #endif /* CONFIG_NFS_V4_1 */ |
| 1164 | 1169 | ||
| @@ -1454,7 +1459,7 @@ struct nfs_server *nfs4_create_referral_server(struct nfs_clone_mount *data, | |||
| 1454 | data->authflavor, | 1459 | data->authflavor, |
| 1455 | parent_server->client->cl_xprt->prot, | 1460 | parent_server->client->cl_xprt->prot, |
| 1456 | parent_server->client->cl_timeout, | 1461 | parent_server->client->cl_timeout, |
| 1457 | parent_client->cl_minorversion); | 1462 | parent_client->cl_mvops->minor_version); |
| 1458 | if (error < 0) | 1463 | if (error < 0) |
| 1459 | goto error; | 1464 | goto error; |
| 1460 | 1465 | ||
