Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46099b4d authored by Gilad Broner's avatar Gilad Broner
Browse files

scsi: ufs: fix spinlock recursion in ufshcd_queuecommand()



Before calling ufshcd_send_command() the host spinlock is taken.
In case error is returned ufshcd_release_all() is called, which
in turn attempts to lock the host spinlock again.
Unlocked the host spinlock in case error was returned to
prevent the spinlock recursion.

Change-Id: I630ac8b901f03285a37547bfbcd49ec575e7545a
Signed-off-by: default avatarGilad Broner <gbroner@codeaurora.org>
parent 88ada96a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2420,6 +2420,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)

	err = ufshcd_send_command(hba, tag);
	if (err) {
		spin_unlock_irqrestore(hba->host->host_lock, flags);
		scsi_dma_unmap(lrbp->cmd);
		lrbp->cmd = NULL;
		clear_bit_unlock(tag, &hba->lrb_in_use);
@@ -2427,6 +2428,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
		dev_err(hba->dev, "%s: failed sending command, %d\n",
							__func__, err);
		err = DID_ERROR;
		goto out;
	}

out_unlock: