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