|
@@ -430,6 +430,26 @@ static inline void ide_unlock_host(struct ide_host *host)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void __ide_requeue_and_plug(struct request_queue *q, struct request *rq)
|
|
|
+{
|
|
|
+ if (rq)
|
|
|
+ blk_requeue_request(q, rq);
|
|
|
+ if (rq || blk_peek_request(q)) {
|
|
|
+ /* Use 3ms as that was the old plug delay */
|
|
|
+ blk_delay_queue(q, 3);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq)
|
|
|
+{
|
|
|
+ struct request_queue *q = drive->queue;
|
|
|
+ unsigned long flags;
|
|
|
+
|
|
|
+ spin_lock_irqsave(q->queue_lock, flags);
|
|
|
+ __ide_requeue_and_plug(q, rq);
|
|
|
+ spin_unlock_irqrestore(q->queue_lock, flags);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Issue a new request to a device.
|
|
|
*/
|
|
@@ -550,27 +570,7 @@ plug_device:
|
|
|
ide_unlock_host(host);
|
|
|
plug_device_2:
|
|
|
spin_lock_irq(q->queue_lock);
|
|
|
-
|
|
|
- if (rq) {
|
|
|
- blk_requeue_request(q, rq);
|
|
|
- blk_delay_queue(q, queue_run_ms);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq)
|
|
|
-{
|
|
|
- struct request_queue *q = drive->queue;
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- spin_lock_irqsave(q->queue_lock, flags);
|
|
|
-
|
|
|
- if (rq)
|
|
|
- blk_requeue_request(q, rq);
|
|
|
-
|
|
|
- spin_unlock_irqrestore(q->queue_lock, flags);
|
|
|
-
|
|
|
- /* Use 3ms as that was the old plug delay */
|
|
|
- blk_delay_queue(q, 3);
|
|
|
+ __ide_requeue_and_plug(q, rq);
|
|
|
}
|
|
|
|
|
|
static int drive_is_ready(ide_drive_t *drive)
|