return crp->crp_callback(crp);
crp->crp_callback(crp); return 0;
crypto_dispatch(struct cryptop *crp){    struct cryptodesc *crd;    u_int64_t nid;    u_int32_t hid;    /* Sanity checks */    if ((crp == NULL) || (crp->crp_callback == NULL))      return EINVAL;    if ((crp->crp_desc == NULL) || (crypto_drivers == NULL))    {	crp->crp_etype = EINVAL;	return crp->crp_callback(crp);    }    hid = (crp->crp_sid >> 31) & 0xffffffff;    if (hid >= crypto_drivers_num)    {	/* Migrate session */	for (crd = crp->crp_desc; crd->crd_next; crd = crd->crd_next)	  crd->CRD_INI.cri_next = &(crd->crd_next->CRD_INI);	if (crypto_newsession(&nid, &(crp->crp_desc->CRD_INI)) == 0)	  crp->crp_sid = nid;	crp->crp_etype = EAGAIN;	return crp->crp_callback(crp);    }    if (crypto_drivers[hid].cc_flags & CRYPTOCAP_F_CLEANUP)      crypto_freesession(crp->crp_sid);    if (crypto_drivers[hid].cc_process == NULL)    {	/* Migrate session */	for (crd = crp->crp_desc; crd->crd_next; crd = crd->crd_next)	  crd->CRD_INI.cri_next = &(crd->crd_next->CRD_INI);	if (crypto_newsession(&nid, &(crp->crp_desc->CRD_INI)) == 0)	  crp->crp_sid = nid;	crp->crp_etype = EAGAIN;	return crp->crp_callback(crp);    }    return crypto_drivers[hid].cc_process(crp);}