OSDN Git Service

block: don't hold the queue_lock over blk_abort_request
authorChristoph Hellwig <hch@lst.de>
Wed, 14 Nov 2018 16:02:06 +0000 (17:02 +0100)
committerJens Axboe <axboe@kernel.dk>
Thu, 15 Nov 2018 19:13:18 +0000 (12:13 -0700)
There is nothing it could synchronize against, so don't go through
the pains of acquiring the lock.

Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-timeout.c
drivers/ata/libata-eh.c
drivers/block/mtip32xx/mtip32xx.c
drivers/scsi/libsas/sas_ata.c
drivers/scsi/libsas/sas_scsi_host.c

index 3b0179f..124c261 100644 (file)
@@ -75,7 +75,7 @@ ssize_t part_timeout_store(struct device *dev, struct device_attribute *attr,
  * This function requests that the block layer start recovery for the
  * request by deleting the timer and calling the q's timeout function.
  * LLDDs who implement their own error recovery MAY ignore the timeout
- * event if they generated blk_abort_req. Must hold queue lock.
+ * event if they generated blk_abort_request.
  */
 void blk_abort_request(struct request *req)
 {
index 01306c0..938ed51 100644 (file)
@@ -919,8 +919,6 @@ static void ata_eh_set_pending(struct ata_port *ap, int fastdrain)
 void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
 {
        struct ata_port *ap = qc->ap;
-       struct request_queue *q = qc->scsicmd->device->request_queue;
-       unsigned long flags;
 
        WARN_ON(!ap->ops->error_handler);
 
@@ -932,9 +930,7 @@ void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
         * Note that ATA_QCFLAG_FAILED is unconditionally set after
         * this function completes.
         */
-       spin_lock_irqsave(q->queue_lock, flags);
        blk_abort_request(qc->scsicmd->request);
-       spin_unlock_irqrestore(q->queue_lock, flags);
 }
 
 /**
index a4c44db..2b0ac9d 100644 (file)
@@ -2770,10 +2770,7 @@ restart_eh:
 
                        blk_mq_quiesce_queue(dd->queue);
 
-                       spin_lock(dd->queue->queue_lock);
-                       blk_mq_tagset_busy_iter(&dd->tags,
-                                                       mtip_queue_cmd, dd);
-                       spin_unlock(dd->queue->queue_lock);
+                       blk_mq_tagset_busy_iter(&dd->tags, mtip_queue_cmd, dd);
 
                        set_bit(MTIP_PF_ISSUE_CMDS_BIT, &dd->port->flags);
 
index 4f6cdf5..c90b278 100644 (file)
@@ -601,12 +601,7 @@ void sas_ata_task_abort(struct sas_task *task)
 
        /* Bounce SCSI-initiated commands to the SCSI EH */
        if (qc->scsicmd) {
-               struct request_queue *q = qc->scsicmd->device->request_queue;
-               unsigned long flags;
-
-               spin_lock_irqsave(q->queue_lock, flags);
                blk_abort_request(qc->scsicmd->request);
-               spin_unlock_irqrestore(q->queue_lock, flags);
                return;
        }
 
index 3322934..af08543 100644 (file)
@@ -930,16 +930,10 @@ void sas_task_abort(struct sas_task *task)
                return;
        }
 
-       if (dev_is_sata(task->dev)) {
+       if (dev_is_sata(task->dev))
                sas_ata_task_abort(task);
-       } else {
-               struct request_queue *q = sc->device->request_queue;
-               unsigned long flags;
-
-               spin_lock_irqsave(q->queue_lock, flags);
+       else
                blk_abort_request(sc->request);
-               spin_unlock_irqrestore(q->queue_lock, flags);
-       }
 }
 
 void sas_target_destroy(struct scsi_target *starget)