- Add missig xpt_schedule() call for cases when requested immediate CCB
priority is lower then payload/TUR one. - Reduce TUR priority and avoid sending them if there are any other outstanding commands, alike to DA driver.
This commit is contained in:
parent
22c2069fc3
commit
c7cbfddd2b
@ -581,7 +581,7 @@ cdasync(void *callback_arg, u_int32_t code,
|
||||
if (softc->state == CD_STATE_NORMAL && !softc->tur) {
|
||||
if (cam_periph_acquire(periph) == CAM_REQ_CMP) {
|
||||
softc->tur = 1;
|
||||
xpt_schedule(periph, CAM_PRIORITY_DEV);
|
||||
xpt_schedule(periph, CAM_PRIORITY_NORMAL);
|
||||
}
|
||||
}
|
||||
/* FALLTHROUGH */
|
||||
@ -1612,9 +1612,11 @@ cdstart(struct cam_periph *periph, union ccb *start_ccb)
|
||||
|
||||
xpt_action(start_ccb);
|
||||
}
|
||||
if (bp != NULL || softc->tur) {
|
||||
if (bp != NULL || softc->tur ||
|
||||
periph->immediate_priority != CAM_PRIORITY_NONE) {
|
||||
/* Have more work to do, so ensure we stay scheduled */
|
||||
xpt_schedule(periph, CAM_PRIORITY_NORMAL);
|
||||
xpt_schedule(periph, min(CAM_PRIORITY_NORMAL,
|
||||
periph->immediate_priority));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -3293,10 +3295,11 @@ cdmediapoll(void *arg)
|
||||
if (softc->flags & CD_FLAG_CHANGER)
|
||||
return;
|
||||
|
||||
if (softc->state == CD_STATE_NORMAL && !softc->tur) {
|
||||
if (softc->state == CD_STATE_NORMAL && !softc->tur &&
|
||||
softc->outstanding_cmds == 0) {
|
||||
if (cam_periph_acquire(periph) == CAM_REQ_CMP) {
|
||||
softc->tur = 1;
|
||||
xpt_schedule(periph, CAM_PRIORITY_DEV);
|
||||
xpt_schedule(periph, CAM_PRIORITY_NORMAL);
|
||||
}
|
||||
}
|
||||
/* Queue us up again */
|
||||
|
Loading…
x
Reference in New Issue
Block a user