| From c60d8c2c4d250d05e99208be5fe05481846e459c Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 20 Feb 2022 12:17:57 +0900 |
| Subject: scsi: pm8001: Fix pm8001_mpi_task_abort_resp() |
| |
| From: Damien Le Moal <damien.lemoal@opensource.wdc.com> |
| |
| [ Upstream commit 7e6b7e740addcea450041b5be8e42f0a4ceece0f ] |
| |
| The call to pm8001_ccb_task_free() at the end of |
| pm8001_mpi_task_abort_resp() already frees the ccb tag. So when the device |
| NCQ_ABORT_ALL_FLAG is set, the tag should not be freed again. Also change |
| the hardcoded 0xBFFFFFFF value to ~NCQ_ABORT_ALL_FLAG as it ought to be. |
| |
| Link: https://lore.kernel.org/r/20220220031810.738362-19-damien.lemoal@opensource.wdc.com |
| Reviewed-by: Jack Wang <jinpu.wang@ionos.com> |
| Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/scsi/pm8001/pm8001_hwi.c | 7 +++---- |
| 1 file changed, 3 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c |
| index 6332cf23bf6b..1b1860f305ef 100644 |
| --- a/drivers/scsi/pm8001/pm8001_hwi.c |
| +++ b/drivers/scsi/pm8001/pm8001_hwi.c |
| @@ -3717,12 +3717,11 @@ int pm8001_mpi_task_abort_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) |
| mb(); |
| |
| if (pm8001_dev->id & NCQ_ABORT_ALL_FLAG) { |
| - pm8001_tag_free(pm8001_ha, tag); |
| sas_free_task(t); |
| - /* clear the flag */ |
| - pm8001_dev->id &= 0xBFFFFFFF; |
| - } else |
| + pm8001_dev->id &= ~NCQ_ABORT_ALL_FLAG; |
| + } else { |
| t->task_done(t); |
| + } |
| |
| return 0; |
| } |
| -- |
| 2.35.1 |
| |