aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nfsd/nfs4state.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 67a038dc0d0e..997343c23043 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -887,10 +887,14 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_setclientid_confi
887 if (!cmp_creds(&conf->cl_cred, &unconf->cl_cred)) 887 if (!cmp_creds(&conf->cl_cred, &unconf->cl_cred))
888 status = nfserr_clid_inuse; 888 status = nfserr_clid_inuse;
889 else { 889 else {
890 expire_client(conf); 890 /* XXX: We just turn off callbacks until we can handle
891 clp = unconf; 891 * change request correctly. */
892 move_to_confirmed(unconf); 892 clp = conf;
893 clp->cl_callback.cb_parsed = 0;
894 gen_confirm(clp);
895 expire_client(unconf);
893 status = nfs_ok; 896 status = nfs_ok;
897
894 } 898 }
895 goto out; 899 goto out;
896 } 900 }
@@ -920,9 +924,16 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_setclientid_confi
920 if (!cmp_creds(&unconf->cl_cred, &rqstp->rq_cred)) { 924 if (!cmp_creds(&unconf->cl_cred, &rqstp->rq_cred)) {
921 status = nfserr_clid_inuse; 925 status = nfserr_clid_inuse;
922 } else { 926 } else {
923 status = nfs_ok; 927 unsigned int hash =
928 clientstr_hashval(unconf->cl_recdir);
929 conf = find_confirmed_client_by_str(unconf->cl_recdir,
930 hash);
931 if (conf) {
932 expire_client(conf);
933 }
924 clp = unconf; 934 clp = unconf;
925 move_to_confirmed(unconf); 935 move_to_confirmed(unconf);
936 status = nfs_ok;
926 } 937 }
927 goto out; 938 goto out;
928 } 939 }