the distinct impression i get is crypto_invoke is an internal
abstraction to src/sys/crypto/crypto.c. it isnt documented in
crypto(9), and is only used outside crypto by softraid. softraid
should be calling crypto_dispatch with CRYPTO_F_NOQUEUE set if it
wants/needs those semantics.

can a softraid crypto user test this for me?

Index: softraid_crypto.c
===================================================================
RCS file: /cvs/src/sys/dev/softraid_crypto.c,v
retrieving revision 1.112
diff -u -p -r1.112 softraid_crypto.c
--- softraid_crypto.c   14 Sep 2014 14:17:24 -0000      1.112
+++ softraid_crypto.c   20 Oct 2014 01:25:12 -0000
@@ -1118,7 +1118,8 @@ sr_crypto_rw(struct sr_workunit *wu)
        if (wu->swu_xs->flags & SCSI_DATA_OUT) {
                crwu = sr_crypto_prepare(wu, 1);
                crwu->cr_crp->crp_callback = sr_crypto_write;
-               rv = crypto_invoke(crwu->cr_crp);
+               crwu->cr_crp->crp_flags = CRYPTO_F_NOQUEUE;
+               rv = crypto_dispatch(crwu->cr_crp);
                if (rv == 0)
                        rv = crwu->cr_crp->crp_etype;
        } else
@@ -1195,9 +1196,10 @@ sr_crypto_done(struct sr_workunit *wu)
        if (ISSET(xs->flags, SCSI_DATA_IN) && xs->error == XS_NOERROR) {
                crwu = sr_crypto_prepare(wu, 0);
                crwu->cr_crp->crp_callback = sr_crypto_read;
-               DNPRINTF(SR_D_INTR, "%s: sr_crypto_done: crypto_invoke %p\n",
+               crwu->cr_crp->crp_flags = CRYPTO_F_NOQUEUE;
+               DNPRINTF(SR_D_INTR, "%s: sr_crypto_done: crypto_dispatch %p\n",
                    DEVNAME(wu->swu_dis->sd_sc), crwu->cr_crp);
-               crypto_invoke(crwu->cr_crp);
+               crypto_dispatch(crwu->cr_crp);
                return;
        }
 

Reply via email to