Author: mav
Date: Fri Jan 11 19:11:56 2013
New Revision: 245310
URL: http://svnweb.freebsd.org/changeset/base/245310

Log:
  - 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.

Modified:
  head/sys/cam/scsi/scsi_cd.c

Modified: head/sys/cam/scsi/scsi_cd.c
==============================================================================
--- head/sys/cam/scsi/scsi_cd.c Fri Jan 11 18:37:51 2013        (r245309)
+++ head/sys/cam/scsi/scsi_cd.c Fri Jan 11 19:11:56 2013        (r245310)
@@ -581,7 +581,7 @@ cdasync(void *callback_arg, u_int32_t co
                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
 
                        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 */
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to