Commit 8f930711 authored by J. Bruce Fields's avatar J. Bruce Fields
Browse files

nfsd4: pull out common code from setclientid cases

parent ad72aae5
Loading
Loading
Loading
Loading
+5 −21
Original line number Diff line number Diff line
@@ -2189,36 +2189,20 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
		}
	}
	unconf = find_unconfirmed_client_by_str(dname, strhashval);
	status = nfserr_jukebox;
	if (!conf) {
		/* case 4: placed first, because it's the normal case */
	if (unconf)
		expire_client(unconf);
	status = nfserr_jukebox;
	new = create_client(clname, dname, rqstp, &clverifier);
	if (new == NULL)
		goto out;
	if (!conf) {
		/* case 4: placed first, because it's the normal case */
		gen_clid(new);
	} else if (same_verf(&conf->cl_verifier, &clverifier)) {
		/* case 1: probable callback update */
		if (unconf) {
			/* Note this is removing unconfirmed {*x***},
			 * which is stronger than RFC recommended {vxc**}.
			 * This has the advantage that there is at most
			 * one {*x***} in either list at any time.
			 */
			expire_client(unconf);
		}
		new = create_client(clname, dname, rqstp, &clverifier);
		if (new == NULL)
			goto out;
		copy_clid(new, conf);
	} else { /* conf && !same_verf(): */
		/* cases 2, 3: probable client reboot: */
		if (unconf)
			expire_client(unconf);
		new = create_client(clname, dname, rqstp, &clverifier);
		if (new == NULL)
			goto out;
		gen_clid(new);
	}
	/*