svn commit: r252680 - projects/virtio/sys/dev/virtio/scsi
Bryan Venteicher
bryanv at FreeBSD.org
Thu Jul 4 04:20:00 UTC 2013
Author: bryanv
Date: Thu Jul 4 04:19:59 2013
New Revision: 252680
URL: http://svnweb.freebsd.org/changeset/base/252680
Log:
virtio_scsi: Fix SIM lock not owned panic
The CAM locking requirements of registering an async
callback has changed so the SIM lock must be held. Remove
code that explicitly dropped the lock around the register.
Also return CAM_SEL_TIMEOUT instead of CAM_TID_INVALID
for bad targets to avoid a lot console spam during bus
scans.
Modified:
projects/virtio/sys/dev/virtio/scsi/virtio_scsi.c
Modified: projects/virtio/sys/dev/virtio/scsi/virtio_scsi.c
==============================================================================
--- projects/virtio/sys/dev/virtio/scsi/virtio_scsi.c Thu Jul 4 03:24:58 2013 (r252679)
+++ projects/virtio/sys/dev/virtio/scsi/virtio_scsi.c Thu Jul 4 04:19:59 2013 (r252680)
@@ -542,19 +542,14 @@ vtscsi_register_cam(struct vtscsi_softc
goto fail;
}
- VTSCSI_UNLOCK(sc);
-
- /*
- * The async register apparently needs to be done without
- * the lock held, otherwise it can recurse on the lock.
- */
if (vtscsi_register_async(sc) != CAM_REQ_CMP) {
error = EIO;
device_printf(dev, "cannot register async callback\n");
- VTSCSI_LOCK(sc);
goto fail;
}
+ VTSCSI_UNLOCK(sc);
+
return (0);
fail:
@@ -622,8 +617,6 @@ vtscsi_register_async(struct vtscsi_soft
{
struct ccb_setasync csa;
- VTSCSI_LOCK_NOTOWNED(sc);
-
xpt_setup_ccb(&csa.ccb_h, sc->vtscsi_path, 5);
csa.ccb_h.func_code = XPT_SASYNC_CB;
csa.event_enable = AC_LOST_DEVICE | AC_FOUND_DEVICE;
@@ -1238,7 +1231,7 @@ vtscsi_scsi_cmd_cam_status(struct virtio
status = CAM_REQ_ABORTED;
break;
case VIRTIO_SCSI_S_BAD_TARGET:
- status = CAM_TID_INVALID;
+ status = CAM_SEL_TIMEOUT;
break;
case VIRTIO_SCSI_S_RESET:
status = CAM_SCSI_BUS_RESET;
More information about the svn-src-projects
mailing list