|
@@ -1565,16 +1565,14 @@ static void scsi_softirq_done(struct request *rq)
|
|
|
* Lock status: IO request lock assumed to be held when called.
|
|
|
*/
|
|
|
static void scsi_request_fn(struct request_queue *q)
|
|
|
+ __releases(q->queue_lock)
|
|
|
+ __acquires(q->queue_lock)
|
|
|
{
|
|
|
struct scsi_device *sdev = q->queuedata;
|
|
|
struct Scsi_Host *shost;
|
|
|
struct scsi_cmnd *cmd;
|
|
|
struct request *req;
|
|
|
|
|
|
- if(!get_device(&sdev->sdev_gendev))
|
|
|
- /* We must be tearing the block queue down already */
|
|
|
- return;
|
|
|
-
|
|
|
/*
|
|
|
* To start with, we keep looping until the queue is empty, or until
|
|
|
* the host is no longer able to accept any more requests.
|
|
@@ -1663,7 +1661,7 @@ static void scsi_request_fn(struct request_queue *q)
|
|
|
goto out_delay;
|
|
|
}
|
|
|
|
|
|
- goto out;
|
|
|
+ return;
|
|
|
|
|
|
not_ready:
|
|
|
spin_unlock_irq(shost->host_lock);
|
|
@@ -1682,12 +1680,6 @@ static void scsi_request_fn(struct request_queue *q)
|
|
|
out_delay:
|
|
|
if (sdev->device_busy == 0)
|
|
|
blk_delay_queue(q, SCSI_QUEUE_DELAY);
|
|
|
-out:
|
|
|
- /* must be careful here...if we trigger the ->remove() function
|
|
|
- * we cannot be holding the q lock */
|
|
|
- spin_unlock_irq(q->queue_lock);
|
|
|
- put_device(&sdev->sdev_gendev);
|
|
|
- spin_lock_irq(q->queue_lock);
|
|
|
}
|
|
|
|
|
|
u64 scsi_calculate_bounce_limit(struct Scsi_Host *shost)
|