]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
scsi: pm8001: Fix pm8001_mpi_task_abort_resp()
authorDamien Le Moal <damien.lemoal@opensource.wdc.com>
Sun, 20 Feb 2022 03:17:57 +0000 (12:17 +0900)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 20 May 2022 13:19:46 +0000 (15:19 +0200)
BugLink: https://bugs.launchpad.net/bugs/1971497
[ 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>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
drivers/scsi/pm8001/pm8001_hwi.c

index fe5d996bf069e17ca0673db9168ff14f63915fe2..fec653b54307affd2fd1f975da1edbda146722f0 100644 (file)
@@ -3775,12 +3775,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;
 }