Avoid a spurious device get/put cycle by using scsi_put_command and folding
scsi_unprep_request into scsi_requeue_command.

Signed-off-by: Christoph Hellwig <h...@lst.de>

diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 0fc7970..2c30df0 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -97,28 +97,6 @@ EXPORT_SYMBOL_GPL(scsi_unregister_acpi_bus_type);
  */
 #define SCSI_QUEUE_DELAY       3
 
-/*
- * Function:   scsi_unprep_request()
- *
- * Purpose:    Remove all preparation done for a request, including its
- *             associated scsi_cmnd, so that it can be requeued.
- *
- * Arguments:  req     - request to unprepare
- *
- * Lock status:        Assumed that no locks are held upon entry.
- *
- * Returns:    Nothing.
- */
-static void scsi_unprep_request(struct request *req)
-{
-       struct scsi_cmnd *cmd = req->special;
-
-       blk_unprep_request(req);
-       req->special = NULL;
-
-       scsi_put_command_and_dev(cmd);
-}
-
 /**
  * __scsi_queue_insert - private queue insertion
  * @cmd: The SCSI command being requeued
@@ -519,16 +497,11 @@ static void scsi_requeue_command(struct request_queue *q, 
struct scsi_cmnd *cmd)
        struct request *req = cmd->request;
        unsigned long flags;
 
-       /*
-        * We need to hold a reference on the device to avoid the queue being
-        * killed after the unlock and before scsi_run_queue is invoked which
-        * may happen because scsi_unprep_request() puts the command which
-        * releases its reference on the device.
-        */
-       get_device(&sdev->sdev_gendev);
 
        spin_lock_irqsave(q->queue_lock, flags);
-       scsi_unprep_request(req);
+       blk_unprep_request(req);
+       req->special = NULL;
+       scsi_put_command(cmd);
        blk_requeue_request(q, req);
        spin_unlock_irqrestore(q->queue_lock, flags);
 
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to