scsi: ufs: Unlock on a couple error paths
authorDan Carpenter <dan.carpenter@oracle.com>
Fri, 13 Dec 2019 10:48:28 +0000 (13:48 +0300)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 20 Dec 2019 03:08:53 +0000 (22:08 -0500)
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.mountain
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ufs/ufshcd.c

index e5cd57e..bf981f0 100644 (file)
@@ -2617,8 +2617,10 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba,
         * the maximum wait time is bounded by SCSI request timeout.
         */
        req = blk_get_request(q, REQ_OP_DRV_OUT, 0);
-       if (IS_ERR(req))
-               return PTR_ERR(req);
+       if (IS_ERR(req)) {
+               err = PTR_ERR(req);
+               goto out_unlock;
+       }
        tag = req->tag;
        WARN_ON_ONCE(!ufshcd_valid_tag(hba, tag));
 
@@ -2646,6 +2648,7 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba,
 
 out_put_tag:
        blk_put_request(req);
+out_unlock:
        up_read(&hba->clk_scaling_lock);
        return err;
 }
@@ -5854,8 +5857,10 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba,
        down_read(&hba->clk_scaling_lock);
 
        req = blk_get_request(q, REQ_OP_DRV_OUT, 0);
-       if (IS_ERR(req))
-               return PTR_ERR(req);
+       if (IS_ERR(req)) {
+               err = PTR_ERR(req);
+               goto out_unlock;
+       }
        tag = req->tag;
        WARN_ON_ONCE(!ufshcd_valid_tag(hba, tag));
 
@@ -5934,6 +5939,7 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba,
        }
 
        blk_put_request(req);
+out_unlock:
        up_read(&hba->clk_scaling_lock);
        return err;
 }