[Midnightbsd-cvs] src [8247] trunk/sys/cam/cam_xpt.c: fix xpt debug
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sat Sep 17 17:33:52 EDT 2016
Revision: 8247
http://svnweb.midnightbsd.org/src/?rev=8247
Author: laffer1
Date: 2016-09-17 17:33:52 -0400 (Sat, 17 Sep 2016)
Log Message:
-----------
fix xpt debug
Modified Paths:
--------------
trunk/sys/cam/cam_xpt.c
Modified: trunk/sys/cam/cam_xpt.c
===================================================================
--- trunk/sys/cam/cam_xpt.c 2016-09-17 21:33:33 UTC (rev 8246)
+++ trunk/sys/cam/cam_xpt.c 2016-09-17 21:33:52 UTC (rev 8247)
@@ -533,9 +533,9 @@
xpt_merge_ccb(&ccb, inccb);
ccb.ccb_h.cbfcnp = xptdone;
xpt_action(&ccb);
- CAM_SIM_UNLOCK(bus->sim);
bcopy(&ccb, inccb, sizeof(union ccb));
xpt_free_path(ccb.ccb_h.path);
+ CAM_SIM_UNLOCK(bus->sim);
break;
}
@@ -2981,6 +2981,9 @@
break;
}
case XPT_DEBUG: {
+ struct cam_path *oldpath;
+ struct cam_sim *oldsim;
+
/* Check that all request bits are supported. */
if (start_ccb->cdbg.flags & ~(CAM_DEBUG_COMPILE)) {
start_ccb->ccb_h.status = CAM_FUNC_NOTAVAIL;
@@ -2987,12 +2990,19 @@
break;
}
- cam_dflags = start_ccb->cdbg.flags;
+ cam_dflags = CAM_DEBUG_NONE;
if (cam_dpath != NULL) {
- xpt_free_path(cam_dpath);
+ /* To release the old path we must hold proper lock. */
+ oldpath = cam_dpath;
cam_dpath = NULL;
+ oldsim = xpt_path_sim(oldpath);
+ CAM_SIM_UNLOCK(xpt_path_sim(start_ccb->ccb_h.path));
+ CAM_SIM_LOCK(oldsim);
+ xpt_free_path(oldpath);
+ CAM_SIM_UNLOCK(oldsim);
+ CAM_SIM_LOCK(xpt_path_sim(start_ccb->ccb_h.path));
}
- if (cam_dflags != CAM_DEBUG_NONE) {
+ if (start_ccb->cdbg.flags != CAM_DEBUG_NONE) {
if (xpt_create_path(&cam_dpath, xpt_periph,
start_ccb->ccb_h.path_id,
start_ccb->ccb_h.target_id,
@@ -2999,16 +3009,14 @@
start_ccb->ccb_h.target_lun) !=
CAM_REQ_CMP) {
start_ccb->ccb_h.status = CAM_RESRC_UNAVAIL;
- cam_dflags = CAM_DEBUG_NONE;
} else {
+ cam_dflags = start_ccb->cdbg.flags;
start_ccb->ccb_h.status = CAM_REQ_CMP;
xpt_print(cam_dpath, "debugging flags now %x\n",
cam_dflags);
}
- } else {
- cam_dpath = NULL;
+ } else
start_ccb->ccb_h.status = CAM_REQ_CMP;
- }
break;
}
case XPT_FREEZE_QUEUE:
More information about the Midnightbsd-cvs
mailing list