projects/linux·commit e166bafc

scsi: hpsa: Fix DMA mapping leak on IOACCEL2 reset path

e166bafc · Haoxiang Li <[email protected]> · 2026-06-23 00:00:28 +08:00

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: [email protected]
Signed-off-by: Haoxiang Li <[email protected]>
Acked-by: Don Brace <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Martin K. Petersen <[email protected]>
Commit
e166bafc483e927150cb9b5f286c9191ea0df84e
Parents
2c007acf

Changes

1 files changed · +4 −0

FileStatusAddDelContent
drivers/scsi/hpsa.cmodified+4−0View file

drivers/scsi/hpsa.c

View file
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index a1b116c..8edad18 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;
}