|
@@ -551,7 +551,15 @@ static void scsi_run_queue(struct request_queue *q)
|
|
|
list_del_init(&sdev->starved_entry);
|
|
|
spin_unlock_irqrestore(shost->host_lock, flags);
|
|
|
|
|
|
- blk_run_queue(sdev->request_queue);
|
|
|
+
|
|
|
+ if (test_bit(QUEUE_FLAG_REENTER, &q->queue_flags) &&
|
|
|
+ !test_and_set_bit(QUEUE_FLAG_REENTER,
|
|
|
+ &sdev->request_queue->queue_flags)) {
|
|
|
+ blk_run_queue(sdev->request_queue);
|
|
|
+ clear_bit(QUEUE_FLAG_REENTER,
|
|
|
+ &sdev->request_queue->queue_flags);
|
|
|
+ } else
|
|
|
+ blk_run_queue(sdev->request_queue);
|
|
|
|
|
|
spin_lock_irqsave(shost->host_lock, flags);
|
|
|
if (unlikely(!list_empty(&sdev->starved_entry)))
|