mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
block: don't hold the queue_lock over blk_abort_request
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>
This commit is contained in:
committed by
Jens Axboe
parent
079076b341
commit
39795d6534
@@ -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
|
* This function requests that the block layer start recovery for the
|
||||||
* request by deleting the timer and calling the q's timeout function.
|
* request by deleting the timer and calling the q's timeout function.
|
||||||
* LLDDs who implement their own error recovery MAY ignore the timeout
|
* 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)
|
void blk_abort_request(struct request *req)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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)
|
void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
|
||||||
{
|
{
|
||||||
struct ata_port *ap = qc->ap;
|
struct ata_port *ap = qc->ap;
|
||||||
struct request_queue *q = qc->scsicmd->device->request_queue;
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
WARN_ON(!ap->ops->error_handler);
|
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
|
* Note that ATA_QCFLAG_FAILED is unconditionally set after
|
||||||
* this function completes.
|
* this function completes.
|
||||||
*/
|
*/
|
||||||
spin_lock_irqsave(q->queue_lock, flags);
|
|
||||||
blk_abort_request(qc->scsicmd->request);
|
blk_abort_request(qc->scsicmd->request);
|
||||||
spin_unlock_irqrestore(q->queue_lock, flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2770,10 +2770,7 @@ restart_eh:
|
|||||||
|
|
||||||
blk_mq_quiesce_queue(dd->queue);
|
blk_mq_quiesce_queue(dd->queue);
|
||||||
|
|
||||||
spin_lock(dd->queue->queue_lock);
|
blk_mq_tagset_busy_iter(&dd->tags, mtip_queue_cmd, dd);
|
||||||
blk_mq_tagset_busy_iter(&dd->tags,
|
|
||||||
mtip_queue_cmd, dd);
|
|
||||||
spin_unlock(dd->queue->queue_lock);
|
|
||||||
|
|
||||||
set_bit(MTIP_PF_ISSUE_CMDS_BIT, &dd->port->flags);
|
set_bit(MTIP_PF_ISSUE_CMDS_BIT, &dd->port->flags);
|
||||||
|
|
||||||
|
|||||||
@@ -601,12 +601,7 @@ void sas_ata_task_abort(struct sas_task *task)
|
|||||||
|
|
||||||
/* Bounce SCSI-initiated commands to the SCSI EH */
|
/* Bounce SCSI-initiated commands to the SCSI EH */
|
||||||
if (qc->scsicmd) {
|
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);
|
blk_abort_request(qc->scsicmd->request);
|
||||||
spin_unlock_irqrestore(q->queue_lock, flags);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -930,16 +930,10 @@ void sas_task_abort(struct sas_task *task)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev_is_sata(task->dev)) {
|
if (dev_is_sata(task->dev))
|
||||||
sas_ata_task_abort(task);
|
sas_ata_task_abort(task);
|
||||||
} else {
|
else
|
||||||
struct request_queue *q = sc->device->request_queue;
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
spin_lock_irqsave(q->queue_lock, flags);
|
|
||||||
blk_abort_request(sc->request);
|
blk_abort_request(sc->request);
|
||||||
spin_unlock_irqrestore(q->queue_lock, flags);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void sas_target_destroy(struct scsi_target *starget)
|
void sas_target_destroy(struct scsi_target *starget)
|
||||||
|
|||||||
Reference in New Issue
Block a user