Module Name: src Committed By: jdolecek Date: Tue Oct 4 18:20:49 UTC 2016
Modified Files: src/sys/dev/pci: vioscsi.c Log Message: vioscsi_req_get()/virtio_enqueue_prep() failing is actually perfectly normal - observed failures included 10, 27, 61 in-flight commands, so probably depends on particular command mix; return with XS_RESOURCE_SHORTAGE rather then panic do vioscsi_req_put() when initial bus_dmamap_load() fails, as suggested by the XXX; the vq_done hook is called by virtio, but in that case we never get to commit the request to it To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/dev/pci/vioscsi.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/vioscsi.c diff -u src/sys/dev/pci/vioscsi.c:1.6 src/sys/dev/pci/vioscsi.c:1.7 --- src/sys/dev/pci/vioscsi.c:1.6 Sun Nov 1 08:55:05 2015 +++ src/sys/dev/pci/vioscsi.c Tue Oct 4 18:20:49 2016 @@ -1,3 +1,4 @@ +/* $NetBSD: vioscsi.c,v 1.7 2016/10/04 18:20:49 jdolecek Exp $ */ /* $OpenBSD: vioscsi.c,v 1.3 2015/03/14 03:38:49 jsg Exp $ */ /* @@ -17,7 +18,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vioscsi.c,v 1.6 2015/11/01 08:55:05 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vioscsi.c,v 1.7 2016/10/04 18:20:49 jdolecek Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -227,16 +228,15 @@ vioscsi_scsipi_request(struct scsipi_cha periph = xs->xs_periph; vr = vioscsi_req_get(sc); -#ifdef DIAGNOSTIC /* - * This should never happen as we track the resources - * in the mid-layer. + * This can happen when we run out of queue slots. */ if (vr == NULL) { - scsipi_printaddr(xs->xs_periph); - panic("%s: unable to allocate request\n", __func__); + xs->error = XS_RESOURCE_SHORTAGE; + scsipi_done(xs); + return; } -#endif + req = &vr->vr_req; slot = vr - sc->sc_reqs; @@ -284,7 +284,7 @@ vioscsi_scsipi_request(struct scsipi_cha stuffup: xs->error = XS_DRIVER_STUFFUP; nomore: - // XXX: free req? + vioscsi_req_put(sc, vr); scsipi_done(xs); return; }