Commit bb14dd15 authored by Dan Carpenter's avatar Dan Carpenter Committed by Martin K. Petersen

scsi: ufs: Unlock on a couple error paths

We introduced a few new error paths, but we can't return directly, we first
have to unlock "hba->clk_scaling_lock" first.

Fixes: a276c19e3e98 ("scsi: ufs: Avoid busy-waiting by eliminating tag conflicts")
Link: https://lore.kernel.org/r/20191213104828.7i64cpoof26rc4fw@kili.mountainReviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent e89fbc7f
...@@ -2617,8 +2617,10 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba, ...@@ -2617,8 +2617,10 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba,
* the maximum wait time is bounded by SCSI request timeout. * the maximum wait time is bounded by SCSI request timeout.
*/ */
req = blk_get_request(q, REQ_OP_DRV_OUT, 0); req = blk_get_request(q, REQ_OP_DRV_OUT, 0);
if (IS_ERR(req)) if (IS_ERR(req)) {
return PTR_ERR(req); err = PTR_ERR(req);
goto out_unlock;
}
tag = req->tag; tag = req->tag;
WARN_ON_ONCE(!ufshcd_valid_tag(hba, tag)); WARN_ON_ONCE(!ufshcd_valid_tag(hba, tag));
...@@ -2646,6 +2648,7 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba, ...@@ -2646,6 +2648,7 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba,
out_put_tag: out_put_tag:
blk_put_request(req); blk_put_request(req);
out_unlock:
up_read(&hba->clk_scaling_lock); up_read(&hba->clk_scaling_lock);
return err; return err;
} }
...@@ -5854,8 +5857,10 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba, ...@@ -5854,8 +5857,10 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba,
down_read(&hba->clk_scaling_lock); down_read(&hba->clk_scaling_lock);
req = blk_get_request(q, REQ_OP_DRV_OUT, 0); req = blk_get_request(q, REQ_OP_DRV_OUT, 0);
if (IS_ERR(req)) if (IS_ERR(req)) {
return PTR_ERR(req); err = PTR_ERR(req);
goto out_unlock;
}
tag = req->tag; tag = req->tag;
WARN_ON_ONCE(!ufshcd_valid_tag(hba, tag)); WARN_ON_ONCE(!ufshcd_valid_tag(hba, tag));
...@@ -5934,6 +5939,7 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba, ...@@ -5934,6 +5939,7 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba,
} }
blk_put_request(req); blk_put_request(req);
out_unlock:
up_read(&hba->clk_scaling_lock); up_read(&hba->clk_scaling_lock);
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment