svn commit: r186219 - in head/sys/cam: . scsi

Edward Tomasz Napierala trasz at FreeBSD.org
Wed Dec 17 10:49:03 UTC 2008


Author: trasz
Date: Wed Dec 17 10:49:03 2008
New Revision: 186219
URL: http://svn.freebsd.org/changeset/base/186219

Log:
  Revert r186186 for now; it breaks stuff.
  
  Approved by:	rwatson (mentor)

Modified:
  head/sys/cam/cam_periph.c
  head/sys/cam/cam_xpt.c
  head/sys/cam/scsi/scsi_da.c

Modified: head/sys/cam/cam_periph.c
==============================================================================
--- head/sys/cam/cam_periph.c	Wed Dec 17 10:42:53 2008	(r186218)
+++ head/sys/cam/cam_periph.c	Wed Dec 17 10:49:03 2008	(r186219)
@@ -311,6 +311,8 @@ cam_periph_hold(struct cam_periph *perip
 	struct mtx *mtx;
 	int error;
 
+	mtx_assert(periph->sim->mtx, MA_OWNED);
+
 	/*
 	 * Increment the reference count on the peripheral
 	 * while we wait for our lock attempt to succeed
@@ -322,8 +324,6 @@ cam_periph_hold(struct cam_periph *perip
 		return (ENXIO);
 
 	mtx = periph->sim->mtx;
-	mtx_assert(mtx, MA_OWNED);
-
 	if (mtx == &Giant)
 		mtx = NULL;
 

Modified: head/sys/cam/cam_xpt.c
==============================================================================
--- head/sys/cam/cam_xpt.c	Wed Dec 17 10:42:53 2008	(r186218)
+++ head/sys/cam/cam_xpt.c	Wed Dec 17 10:49:03 2008	(r186219)
@@ -1595,7 +1595,7 @@ xpt_remove_periph(struct cam_periph *per
 {
 	struct cam_ed *device;
 
-	cam_periph_lock(periph);
+	mtx_assert(periph->sim->mtx, MA_OWNED);
 
 	device = periph->path->device;
 
@@ -1615,7 +1615,6 @@ xpt_remove_periph(struct cam_periph *per
 	mtx_lock(&xsoftc.xpt_topo_lock);
 	xsoftc.xpt_generation++;
 	mtx_unlock(&xsoftc.xpt_topo_lock);
-	cam_periph_unlock(periph);
 }
 
 

Modified: head/sys/cam/scsi/scsi_da.c
==============================================================================
--- head/sys/cam/scsi/scsi_da.c	Wed Dec 17 10:42:53 2008	(r186218)
+++ head/sys/cam/scsi/scsi_da.c	Wed Dec 17 10:49:03 2008	(r186219)
@@ -772,8 +772,8 @@ daclose(struct disk *dp)
 
 	softc->flags &= ~DA_FLAG_OPEN;
 	cam_periph_unhold(periph);
-	cam_periph_unlock(periph);
 	cam_periph_release(periph);
+	cam_periph_unlock(periph);
 	return (0);	
 }
 
@@ -995,8 +995,10 @@ dacleanup(struct cam_periph *periph)
 		xpt_print(periph->path, "can't remove sysctl context\n");
 	}
 
+	cam_periph_unlock(periph);
 	disk_destroy(softc->disk);
 	callout_drain(&softc->sendordered_c);
+	cam_periph_lock(periph);
 	free(softc, M_DEVBUF);
 }
 


More information about the svn-src-head mailing list