| From 5861445ba5296f37b2f2026890bfdd993afe7aec Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 20 Mar 2022 23:07:33 +0800 |
| Subject: scsi: ufs: ufshpb: Fix a NULL check on list iterator |
| |
| From: Xiaomeng Tong <xiam0nd.tong@gmail.com> |
| |
| [ Upstream commit bfb7789bcbd901caead43861461bc8f334c90d3b ] |
| |
| The list iterator is always non-NULL so the check 'if (!rgn)' is always |
| false and the dev_err() is never called. Move the check outside the loop |
| and determine if 'victim_rgn' is NULL, to fix this bug. |
| |
| Link: https://lore.kernel.org/r/20220320150733.21824-1-xiam0nd.tong@gmail.com |
| Fixes: 4b5f49079c52 ("scsi: ufs: ufshpb: L2P map management for HPB read") |
| Reviewed-by: Daejun Park <daejun7.park@samsung.com> |
| Signed-off-by: Xiaomeng Tong <xiam0nd.tong@gmail.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/scsi/ufs/ufshpb.c | 11 +++++------ |
| 1 file changed, 5 insertions(+), 6 deletions(-) |
| |
| diff --git a/drivers/scsi/ufs/ufshpb.c b/drivers/scsi/ufs/ufshpb.c |
| index ded5ba9b1466..54c3b8f34c0a 100644 |
| --- a/drivers/scsi/ufs/ufshpb.c |
| +++ b/drivers/scsi/ufs/ufshpb.c |
| @@ -870,12 +870,6 @@ static struct ufshpb_region *ufshpb_victim_lru_info(struct ufshpb_lu *hpb) |
| struct ufshpb_region *rgn, *victim_rgn = NULL; |
| |
| list_for_each_entry(rgn, &lru_info->lh_lru_rgn, list_lru_rgn) { |
| - if (!rgn) { |
| - dev_err(&hpb->sdev_ufs_lu->sdev_dev, |
| - "%s: no region allocated\n", |
| - __func__); |
| - return NULL; |
| - } |
| if (ufshpb_check_srgns_issue_state(hpb, rgn)) |
| continue; |
| |
| @@ -891,6 +885,11 @@ static struct ufshpb_region *ufshpb_victim_lru_info(struct ufshpb_lu *hpb) |
| break; |
| } |
| |
| + if (!victim_rgn) |
| + dev_err(&hpb->sdev_ufs_lu->sdev_dev, |
| + "%s: no region allocated\n", |
| + __func__); |
| + |
| return victim_rgn; |
| } |
| |
| -- |
| 2.35.1 |
| |