Re: [PATCH] scsi: hpsa: fix DMA mapping leak on IOACCEL2 reset path
From: Don.Brace
Date: Mon Jun 22 2026 - 14:27:15 EST
________________________________________
From: Haoxiang Li <haoxiang_li2024@xxxxxxx>
Sent: Monday, June 22, 2026 11:00 AM
To: James.Bottomley@xxxxxxxxxxxxxxxxxxxxx <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx>; martin.petersen@xxxxxxxxxx <martin.petersen@xxxxxxxxxx>; david.carroll@xxxxxxxxxxxxx <david.carroll@xxxxxxxxxxxxx>; justin.lindley@xxxxxxxxxxxxx <justin.lindley@xxxxxxxxxxxxx>; scott.teel@xxxxxxxxxxxxx <scott.teel@xxxxxxxxxxxxx>
Cc: storagedev <storagedev@xxxxxxxxxxxxx>; linux-scsi@xxxxxxxxxxxxxxx <linux-scsi@xxxxxxxxxxxxxxx>; linux-kernel@xxxxxxxxxxxxxxx <linux-kernel@xxxxxxxxxxxxxxx>; Haoxiang Li <haoxiang_li2024@xxxxxxx>; stable@xxxxxxxxxxxxxxx <stable@xxxxxxxxxxxxxxx>
Subject: [PATCH] scsi: hpsa: fix DMA mapping leak on IOACCEL2 reset path
EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
If phys_disk->in_reset is set, the function returns directly without
undoing the resources acquired for the command. Add the missing error
cleanup by unmapping the IOACCEL2 SG chain block when needed, unmapping
the SCSI command, and dropping the outstanding IOACCEL command count
before returning.
Fixes: c5dfd106414f ("scsi: hpsa: correct device resets")
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Haoxiang Li <haoxiang_li2024@xxxxxxx>
Acked-by: Don Brace <don.brace@xxxxxxxxxxxxx
Thanks for your patch. Can fix potential performance issues with devices undergoing resets.
What about another patch for when call to hpsa_map_ioaccel2_sg_chain_block() fails?
---
drivers/scsi/hpsa.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index a1b116cd4723..8edad1830abe 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -5017,6 +5017,10 @@ static int hpsa_scsi_ioaccel2_queue_command(struct ctlr_info *h,
if (phys_disk->in_reset) {
cmd->result = DID_RESET << 16;
+ atomic_dec(&phys_disk->ioaccel_cmds_out);
+ scsi_dma_unmap(cmd);
+ if (use_sg > h->ioaccel_maxsg)
+ hpsa_unmap_ioaccel2_sg_chain_block(h, cp);
return -1;
}
--
2.25.1