summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkadesai <kadesai@FreeBSD.org>2014-09-08 08:25:33 +0000
committerkadesai <kadesai@FreeBSD.org>2014-09-08 08:25:33 +0000
commit220594599565b8c04c14a4e89f5a165cc062548e (patch)
tree5aa773f3ba6fed5a1373f139d518089856def92e
parentf2fb38d67f4f2e9ae85ec51542bd51d4afa67b64 (diff)
downloadFreeBSD-src-220594599565b8c04c14a4e89f5a165cc062548e.zip
FreeBSD-src-220594599565b8c04c14a4e89f5a165cc062548e.tar.gz
MFC r270973
r270973 Fix for WITNESS warning while doing xpt_rescan. This happen when converting any JBOD to RAID or creating any new RAID from Unconfigured Drives. Without this fix, user may see call trace if WITNESS is enabled. System may panic when reconfiguring the RAID. Reviewed by: ambrisko Approved by: re (gleb) ---
-rw-r--r--sys/dev/mrsas/mrsas.h2
-rw-r--r--sys/dev/mrsas/mrsas_cam.c11
2 files changed, 5 insertions, 8 deletions
diff --git a/sys/dev/mrsas/mrsas.h b/sys/dev/mrsas/mrsas.h
index 6ec7891..af43daa 100644
--- a/sys/dev/mrsas/mrsas.h
+++ b/sys/dev/mrsas/mrsas.h
@@ -101,7 +101,7 @@ __FBSDID("$FreeBSD$");
*/
#define BYTE_ALIGNMENT 1
#define MRSAS_MAX_NAME_LENGTH 32
-#define MRSAS_VERSION "06.704.01.00-fbsd"
+#define MRSAS_VERSION "06.704.01.01-fbsd"
#define MRSAS_ULONG_MAX 0xFFFFFFFFFFFFFFFF
#define MRSAS_DEFAULT_TIMEOUT 0x14 //temp
#define DONE 0
diff --git a/sys/dev/mrsas/mrsas_cam.c b/sys/dev/mrsas/mrsas_cam.c
index 81e8fcb..bde974a 100644
--- a/sys/dev/mrsas/mrsas_cam.c
+++ b/sys/dev/mrsas/mrsas_cam.c
@@ -1116,18 +1116,16 @@ int mrsas_bus_scan(struct mrsas_softc *sc)
union ccb *ccb_0;
union ccb *ccb_1;
- mtx_lock(&sc->sim_lock);
if ((ccb_0 = xpt_alloc_ccb()) == NULL) {
- mtx_unlock(&sc->sim_lock);
return(ENOMEM);
}
if ((ccb_1 = xpt_alloc_ccb()) == NULL) {
xpt_free_ccb(ccb_0);
- mtx_unlock(&sc->sim_lock);
return(ENOMEM);
}
+ mtx_lock(&sc->sim_lock);
if (xpt_create_path(&ccb_0->ccb_h.path, xpt_periph, cam_sim_path(sc->sim_0),
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP){
xpt_free_ccb(ccb_0);
@@ -1144,9 +1142,9 @@ int mrsas_bus_scan(struct mrsas_softc *sc)
return(EIO);
}
+ mtx_unlock(&sc->sim_lock);
xpt_rescan(ccb_0);
xpt_rescan(ccb_1);
- mtx_unlock(&sc->sim_lock);
return(0);
}
@@ -1161,19 +1159,18 @@ int mrsas_bus_scan_sim(struct mrsas_softc *sc, struct cam_sim *sim)
{
union ccb *ccb;
- mtx_lock(&sc->sim_lock);
if ((ccb = xpt_alloc_ccb()) == NULL) {
- mtx_unlock(&sc->sim_lock);
return(ENOMEM);
}
+ mtx_lock(&sc->sim_lock);
if (xpt_create_path(&ccb->ccb_h.path, xpt_periph, cam_sim_path(sim),
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP){
xpt_free_ccb(ccb);
mtx_unlock(&sc->sim_lock);
return(EIO);
}
- xpt_rescan(ccb);
mtx_unlock(&sc->sim_lock);
+ xpt_rescan(ccb);
return(0);
}
OpenPOWER on IntegriCloud