Commit 39795d65 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

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: default avatarHannes Reinecke <hare@suse.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 079076b3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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)
{
+0 −4
Original line number Diff line number Diff line
@@ -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);
}

/**
+1 −4
Original line number Diff line number Diff line
@@ -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);

+0 −5
Original line number Diff line number Diff line
@@ -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;
	}

+2 −8
Original line number Diff line number Diff line
@@ -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)