aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs4state.c
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@redhat.com>2015-11-23 17:39:12 -0500
committerJ. Bruce Fields <bfields@redhat.com>2015-11-24 12:39:18 -0500
commit50c7b948adbd1f8f0475fa0c92abb51c8a49f847 (patch)
tree5586fd5053b8daaf342fafc49b54c05d48f82918 /fs/nfsd/nfs4state.c
parent50043859325b377e728676d31aad7affaf91b2ce (diff)
nfsd: minor consolidation of mach_cred handling code
Minor cleanup, no change in functionality. Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r--fs/nfsd/nfs4state.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 641604a221bc..efa3d4c09dab 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -2375,10 +2375,17 @@ nfsd4_exchange_id(struct svc_rqst *rqstp,
2375 if (exid->flags & ~EXCHGID4_FLAG_MASK_A) 2375 if (exid->flags & ~EXCHGID4_FLAG_MASK_A)
2376 return nfserr_inval; 2376 return nfserr_inval;
2377 2377
2378 new = create_client(exid->clname, rqstp, &verf);
2379 if (new == NULL)
2380 return nfserr_jukebox;
2381
2378 switch (exid->spa_how) { 2382 switch (exid->spa_how) {
2379 case SP4_MACH_CRED: 2383 case SP4_MACH_CRED:
2380 if (!svc_rqst_integrity_protected(rqstp)) 2384 if (!svc_rqst_integrity_protected(rqstp)) {
2381 return nfserr_inval; 2385 status = nfserr_inval;
2386 goto out_nolock;
2387 }
2388 new->cl_mach_cred = true;
2382 case SP4_NONE: 2389 case SP4_NONE:
2383 break; 2390 break;
2384 default: /* checked by xdr code */ 2391 default: /* checked by xdr code */
@@ -2387,10 +2394,6 @@ nfsd4_exchange_id(struct svc_rqst *rqstp,
2387 return nfserr_encr_alg_unsupp; 2394 return nfserr_encr_alg_unsupp;
2388 } 2395 }
2389 2396
2390 new = create_client(exid->clname, rqstp, &verf);
2391 if (new == NULL)
2392 return nfserr_jukebox;
2393
2394 /* Cases below refer to rfc 5661 section 18.35.4: */ 2397 /* Cases below refer to rfc 5661 section 18.35.4: */
2395 spin_lock(&nn->client_lock); 2398 spin_lock(&nn->client_lock);
2396 conf = find_confirmed_client_by_name(&exid->clname, nn); 2399 conf = find_confirmed_client_by_name(&exid->clname, nn);
@@ -2452,7 +2455,6 @@ out_new:
2452 goto out; 2455 goto out;
2453 } 2456 }
2454 new->cl_minorversion = cstate->minorversion; 2457 new->cl_minorversion = cstate->minorversion;
2455 new->cl_mach_cred = (exid->spa_how == SP4_MACH_CRED);
2456 2458
2457 gen_clid(new, nn); 2459 gen_clid(new, nn);
2458 add_to_unconfirmed(new); 2460 add_to_unconfirmed(new);
@@ -2470,6 +2472,7 @@ out_copy:
2470 2472
2471out: 2473out:
2472 spin_unlock(&nn->client_lock); 2474 spin_unlock(&nn->client_lock);
2475out_nolock:
2473 if (new) 2476 if (new)
2474 expire_client(new); 2477 expire_client(new);
2475 if (unconf) 2478 if (unconf)