(cmp_name(&conf->cl_name,&unconf->cl_name))  &&
(same_name(conf->cl_recdir,unconf->cl_recdir))  &&
nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_setclientid_confirm *setclientid_confirm){	u32 ip_addr = rqstp->rq_addr.sin_addr.s_addr;	struct nfs4_client *clp, *conf = NULL, *unconf = NULL;	nfs4_verifier confirm = setclientid_confirm->sc_confirm; 	clientid_t * clid = &setclientid_confirm->sc_clientid;	int status;	if (STALE_CLIENTID(clid))		return nfserr_stale_clientid;	/* 	 * XXX The Duplicate Request Cache (DRC) has been checked (??)	 * We get here on a DRC miss.	 */	nfs4_lock_state();	clp = find_confirmed_client(clid);	if (clp) {		status = nfserr_inval;		/* 		 * Found a record for this clientid. If the IP addresses		 * don't match, return ERR_INVAL just as if the record had		 * not been found.		 */		if (clp->cl_addr != ip_addr) { 			printk("NFSD: setclientid: string in use by client"			"(clientid %08x/%08x)\n",			clp->cl_clientid.cl_boot, clp->cl_clientid.cl_id);			goto out;		}		conf = clp;	}	clp = find_unconfirmed_client(clid);	if (clp) {		status = nfserr_inval;		if (clp->cl_addr != ip_addr) { 			printk("NFSD: setclientid: string in use by client"			"(clientid %08x/%08x)\n",			clp->cl_clientid.cl_boot, clp->cl_clientid.cl_id);			goto out;		}		unconf = clp;	}	/* CASE 1: 	* unconf record that matches input clientid and input confirm.	* conf record that matches input clientid.	* conf  and unconf records match names, verifiers 	*/	if ((conf && unconf) && 	    (cmp_verf(&unconf->cl_confirm, &confirm)) &&	    (cmp_verf(&conf->cl_verifier, &unconf->cl_verifier)) &&	    (cmp_name(&conf->cl_name,&unconf->cl_name))  &&	    (!cmp_verf(&conf->cl_confirm, &unconf->cl_confirm))) {		if (!cmp_creds(&conf->cl_cred, &unconf->cl_cred)) 			status = nfserr_clid_inuse;		else {			expire_client(conf);			clp = unconf;			move_to_confirmed(unconf);			status = nfs_ok;		}		goto out;	} 	/* CASE 2:	 * conf record that matches input clientid.	 * if unconf record that matches input clientid, then unconf->cl_name	 * or unconf->cl_verifier don't match the conf record.	 */	if ((conf && !unconf) || 	    ((conf && unconf) && 	     (!cmp_verf(&conf->cl_verifier, &unconf->cl_verifier) ||	      !cmp_name(&conf->cl_name, &unconf->cl_name)))) {		if (!cmp_creds(&conf->cl_cred,&rqstp->rq_cred)) {			status = nfserr_clid_inuse;		} else {			clp = conf;			status = nfs_ok;		}		goto out;	}	/* CASE 3:	 * conf record not found.	 * unconf record found. 	 * unconf->cl_confirm matches input confirm	 */ 	if (!conf && unconf && cmp_verf(&unconf->cl_confirm, &confirm)) {		if (!cmp_creds(&unconf->cl_cred, &rqstp->rq_cred)) {			status = nfserr_clid_inuse;		} else {			status = nfs_ok;			clp = unconf;			move_to_confirmed(unconf);		}		goto out;	}	/* CASE 4:	 * conf record not found, or if conf, then conf->cl_confirm does not	 * match input confirm.	 * unconf record not found, or if unconf, then unconf->cl_confirm 	 * does not match input confirm.	 */	if ((!conf || (conf && !cmp_verf(&conf->cl_confirm, &confirm))) &&	    (!unconf || (unconf && !cmp_verf(&unconf->cl_confirm, &confirm)))) {		status = nfserr_stale_clientid;		goto out;	}	/* check that we have hit one of the cases...*/	status = nfserr_inval;	goto out;out:	if (!status)		nfsd4_probe_callback(clp);	nfs4_unlock_state();	return status;}