diff options
author | mav <mav@FreeBSD.org> | 2012-10-27 10:14:12 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2012-10-27 10:14:12 +0000 |
commit | dd686c1964423afe1f6f0a02fa97a39979928d53 (patch) | |
tree | ff3fc100f4f79e9d9b408c3743ae5c7fffc6f023 /sys/cam/cam_xpt.c | |
parent | 1cb4a9777f389b1260f867fc5fcd261506ab8cec (diff) | |
download | FreeBSD-src-dd686c1964423afe1f6f0a02fa97a39979928d53.zip FreeBSD-src-dd686c1964423afe1f6f0a02fa97a39979928d53.tar.gz |
Remove priority enforcement from xpt_ation(). It is not good and even not
safe in some cases to reduce CCB priority after it was scheduled with high
priority. This fixes reproducible deadlock when command sent through the
pass interface while ATA XPT recovers from command timeout.
Instead of that enforce priority at passioctl(). libcam provides no obvious
interface to specify CCB priority and so much (all?) code specifies zero
(highest) priority. This change limits pass CCBs priority to NORMAL run
level, allowing XPT to complete bus and device recovery after reset before
running any payload.
Diffstat (limited to 'sys/cam/cam_xpt.c')
-rw-r--r-- | sys/cam/cam_xpt.c | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c index 6288390..b184dd1 100644 --- a/sys/cam/cam_xpt.c +++ b/sys/cam/cam_xpt.c @@ -2468,9 +2468,6 @@ xpt_action(union ccb *start_ccb) CAM_DEBUG(start_ccb->ccb_h.path, CAM_DEBUG_TRACE, ("xpt_action\n")); start_ccb->ccb_h.status = CAM_REQ_INPROG; - /* Compatibility for RL-unaware code. */ - if (CAM_PRIORITY_TO_RL(start_ccb->ccb_h.pinfo.priority) == 0) - start_ccb->ccb_h.pinfo.priority += CAM_PRIORITY_NORMAL - 1; (*(start_ccb->ccb_h.path->bus->xport->action))(start_ccb); } |