svn commit: r265485 - head/sys/dev/mpr
Kenneth D. Merry
ken at FreeBSD.org
Wed May 7 05:14:49 UTC 2014
Author: ken
Date: Wed May 7 05:14:48 2014
New Revision: 265485
URL: http://svnweb.freebsd.org/changeset/base/265485
Log:
Hold the SIM lock when calling xpt_create_path() and xpt_action() in
mprsas_SSU_to_SATA_devices().
This fixes an assertion on shutdown with INVARIANTS enabled with SATA
drives present on an IR firmware controller.
Reviewed by: Steve McConnell <stephen.mcconnell at avagotech.com>.
MFC after: 3 days
Modified:
head/sys/dev/mpr/mpr_sas_lsi.c
Modified: head/sys/dev/mpr/mpr_sas_lsi.c
==============================================================================
--- head/sys/dev/mpr/mpr_sas_lsi.c Wed May 7 05:11:16 2014 (r265484)
+++ head/sys/dev/mpr/mpr_sas_lsi.c Wed May 7 05:14:48 2014 (r265485)
@@ -1026,6 +1026,8 @@ mprsas_SSU_to_SATA_devices(struct mpr_so
char path_str[64];
struct timeval cur_time, start_time;
+ mpr_lock(sc);
+
/*
* For each LUN of each target, issue a StartStopUnit command to stop
* the device.
@@ -1041,6 +1043,7 @@ mprsas_SSU_to_SATA_devices(struct mpr_so
SLIST_FOREACH(lun, &target->luns, lun_link) {
ccb = xpt_alloc_ccb_nowait();
if (ccb == NULL) {
+ mpr_unlock(sc);
mpr_dprint(sc, MPR_FAULT, "Unable to alloc "
"CCB to stop unit.\n");
return;
@@ -1057,6 +1060,7 @@ mprsas_SSU_to_SATA_devices(struct mpr_so
mpr_dprint(sc, MPR_FAULT, "Unable to "
"create LUN path to stop unit.\n");
xpt_free_ccb(ccb);
+ mpr_unlock(sc);
return;
}
xpt_path_string(ccb->ccb_h.path, path_str,
@@ -1092,6 +1096,8 @@ mprsas_SSU_to_SATA_devices(struct mpr_so
}
}
+ mpr_unlock(sc);
+
/*
* Wait until all of the SSU commands have completed or time has
* expired (60 seconds). pause for 100ms each time through. If any
More information about the svn-src-all
mailing list