Module Name: src
Committed By: riastradh
Date: Sun May 22 11:35:14 UTC 2022
Modified Files:
src/sys/dev/pci: ubsec.c
Log Message:
ubsec(4): Tidy up error branches of ubsec_process.
Make sure to return zero, not error, when we've already done
crypto_done and set crp_etype.
To generate a diff of this commit:
cvs rdiff -u -r1.56 -r1.57 src/sys/dev/pci/ubsec.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/ubsec.c
diff -u src/sys/dev/pci/ubsec.c:1.56 src/sys/dev/pci/ubsec.c:1.57
--- src/sys/dev/pci/ubsec.c:1.56 Sun May 22 11:35:05 2022
+++ src/sys/dev/pci/ubsec.c Sun May 22 11:35:13 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: ubsec.c,v 1.56 2022/05/22 11:35:05 riastradh Exp $ */
+/* $NetBSD: ubsec.c,v 1.57 2022/05/22 11:35:13 riastradh Exp $ */
/* $FreeBSD: src/sys/dev/ubsec/ubsec.c,v 1.6.2.6 2003/01/23 21:06:43 sam Exp $ */
/* $OpenBSD: ubsec.c,v 1.143 2009/03/27 13:31:30 reyk Exp$ */
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ubsec.c,v 1.56 2022/05/22 11:35:05 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ubsec.c,v 1.57 2022/05/22 11:35:13 riastradh Exp $");
#undef UBSEC_DEBUG
@@ -1163,14 +1163,12 @@ ubsec_process(void *arg, struct cryptop
crp->crp_sid, sc->sc_nsessions);
mutex_spin_enter(&sc->sc_mtx);
-
if (SIMPLEQ_EMPTY(&sc->sc_freequeue)) {
ubsecstats.hst_queuefull++;
- sc->sc_needwakeup |= CRYPTO_SYMQ;
mutex_spin_exit(&sc->sc_mtx);
- return(ERESTART);
+ err = ERESTART;
+ goto errout;
}
-
q = SIMPLEQ_FIRST(&sc->sc_freequeue);
SIMPLEQ_REMOVE_HEAD(&sc->sc_freequeue, /*q,*/ q_next);
mutex_spin_exit(&sc->sc_mtx);
@@ -1760,7 +1758,7 @@ ubsec_process(void *arg, struct cryptop
if ((hint & CRYPTO_HINT_MORE) == 0 || sc->sc_nqueue >= ubsec_maxbatch)
ubsec_feed(sc);
mutex_spin_exit(&sc->sc_mtx);
- return (0);
+ return 0;
errout:
if (q != NULL) {
@@ -1778,19 +1776,15 @@ errout:
SIMPLEQ_INSERT_TAIL(&sc->sc_freequeue, q, q_next);
mutex_spin_exit(&sc->sc_mtx);
}
-#if 0 /* jonathan says: this openbsd code seems to be subsumed elsewhere */
- if (err == EINVAL)
- ubsecstats.hst_invalid++;
- else
- ubsecstats.hst_nomem++;
-#endif
- if (err != ERESTART) {
- crp->crp_etype = err;
- crypto_done(crp);
- } else {
+ if (err == ERESTART) {
+ mutex_spin_enter(&sc->sc_mtx);
sc->sc_needwakeup |= CRYPTO_SYMQ;
+ mutex_spin_exit(&sc->sc_mtx);
+ return ERESTART;
}
- return (err);
+ crp->crp_etype = err;
+ crypto_done(crp);
+ return 0;
}
static void