--- //depot/vendor/freebsd/src/sys/dev/hifn/hifn7751.c 2005/06/05 23:00:32 +++ //depot/user/pjd/crypto_cleanups/sys/dev/hifn/hifn7751.c 2005/08/17 19:00:30 @@ -2643,8 +2643,6 @@ hifnstats.hst_invalid++; else hifnstats.hst_nomem++; - crp->crp_etype = err; - crypto_done(crp); return (err); } --- //depot/vendor/freebsd/src/sys/dev/safe/safe.c 2005/03/01 09:01:04 +++ //depot/user/pjd/crypto_cleanups/sys/dev/safe/safe.c 2005/08/17 19:00:30 @@ -1483,12 +1483,8 @@ bus_dmamap_destroy(sc->sc_srcdmat, re->re_src_map); } mtx_unlock(&sc->sc_ringmtx); - if (err != ERESTART) { - crp->crp_etype = err; - crypto_done(crp); - } else { + if (err == ERESTART) sc->sc_needwakeup |= CRYPTO_SYMQ; - } return (err); } --- //depot/vendor/freebsd/src/sys/dev/ubsec/ubsec.c 2005/03/01 07:52:07 +++ //depot/user/pjd/crypto_cleanups/sys/dev/ubsec/ubsec.c 2005/08/17 19:00:30 @@ -1536,12 +1536,8 @@ SIMPLEQ_INSERT_TAIL(&sc->sc_freequeue, q, q_next); mtx_unlock(&sc->sc_freeqlock); } - if (err != ERESTART) { - crp->crp_etype = err; - crypto_done(crp); - } else { + if (err == ERESTART) sc->sc_needwakeup |= CRYPTO_SYMQ; - } return (err); } --- //depot/vendor/freebsd/src/sys/opencrypto/crypto.c 2005/01/07 02:32:16 +++ //depot/user/pjd/crypto_cleanups/sys/opencrypto/crypto.c 2005/08/17 23:32:05 @@ -716,6 +716,11 @@ } CRYPTO_Q_UNLOCK(); + if (result != 0 && (crp->crp_flags & CRYPTO_F_BATCH) != 0) { + crp->crp_etype = result; + crypto_done(crp); + result = 0; + } return result; } @@ -841,22 +846,16 @@ u_int32_t hid; int (*process)(void*, struct cryptop *, int); + KASSERT(crp != NULL, ("NULL crp")); + KASSERT(crp->crp_callback != NULL, ("NULL crp->crp_callback")); + #ifdef CRYPTO_TIMING if (crypto_timing) crypto_tstat(&cryptostats.cs_invoke, &crp->crp_tstamp); #endif - /* Sanity checks. */ - if (crp == NULL) + + if (crp->crp_desc == NULL) return EINVAL; - if (crp->crp_callback == NULL) { - crypto_freereq(crp); - return EINVAL; - } - if (crp->crp_desc == NULL) { - crp->crp_etype = EINVAL; - crypto_done(crp); - return 0; - } hid = CRYPTO_SESID2HID(crp->crp_sid); if (hid < crypto_drivers_num) { @@ -1126,6 +1125,9 @@ crypto_drivers[CRYPTO_SESID2HID(submit->crp_sid)].cc_qblocked = 1; TAILQ_INSERT_HEAD(&crp_q, submit, crp_next); cryptostats.cs_blocks++; + } else if (result != 0) { + crp->crp_etype = result; + crypto_done(crp); } } --- //depot/vendor/freebsd/src/sys/opencrypto/cryptosoft.c 2005/03/11 12:40:25 +++ //depot/user/pjd/crypto_cleanups/sys/opencrypto/cryptosoft.c 2005/08/17 19:00:30 @@ -901,22 +901,18 @@ struct cryptodesc *crd; struct swcr_data *sw; u_int32_t lid; - int type; + int error, type; /* Sanity check */ if (crp == NULL) return EINVAL; - if (crp->crp_desc == NULL || crp->crp_buf == NULL) { - crp->crp_etype = EINVAL; - goto done; - } + if (crp->crp_desc == NULL || crp->crp_buf == NULL) + return EINVAL; lid = crp->crp_sid & 0xffffffff; - if (lid >= swcr_sesnum || lid == 0 || swcr_sessions[lid] == NULL) { - crp->crp_etype = ENOENT; - goto done; - } + if (lid >= swcr_sesnum || lid == 0 || swcr_sessions[lid] == NULL) + return EINVAL; if (crp->crp_flags & CRYPTO_F_IMBUF) { type = CRYPTO_BUF_MBUF; @@ -944,10 +940,8 @@ ; /* No such context ? */ - if (sw == NULL) { - crp->crp_etype = EINVAL; - goto done; - } + if (sw == NULL) + return EINVAL; switch (sw->sw_alg) { case CRYPTO_DES_CBC: case CRYPTO_3DES_CBC: @@ -955,9 +949,9 @@ case CRYPTO_CAST_CBC: case CRYPTO_SKIPJACK_CBC: case CRYPTO_RIJNDAEL128_CBC: - if ((crp->crp_etype = swcr_encdec(crd, sw, - crp->crp_buf, type)) != 0) - goto done; + error = swcr_encdec(crd, sw, crp->crp_buf, type); + if (error != 0) + return error; break; case CRYPTO_NULL_CBC: crp->crp_etype = 0; @@ -971,27 +965,25 @@ case CRYPTO_SHA1_KPDK: case CRYPTO_MD5: case CRYPTO_SHA1: - if ((crp->crp_etype = swcr_authcompute(crp, crd, sw, - crp->crp_buf, type)) != 0) - goto done; + error = swcr_authcompute(crp, crd, sw, crp->crp_buf, type); + if (error != 0) + return error; break; case CRYPTO_DEFLATE_COMP: - if ((crp->crp_etype = swcr_compdec(crd, sw, - crp->crp_buf, type)) != 0) - goto done; - else - crp->crp_olen = (int)sw->sw_size; + error = swcr_compdec(crd, sw, crp->crp_buf, type); + if (error != 0) + return error; + crp->crp_olen = (int)sw->sw_size; break; default: /* Unknown/unsupported algorithm */ - crp->crp_etype = EINVAL; - goto done; + return EINVAL; } } -done: + crp->crp_etype = 0; crypto_done(crp); return 0; }