Commit c67e6380 authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Martin K. Petersen
Browse files

scsi: aic79xx: Do not reference SCSI command when resetting device



When sending a device reset we should not take a reference to the SCSI
command.

Signed-off-by: default avatarHannes Reinecke <hare@suse.de>
Link: https://lore.kernel.org/r/20231002154328.43718-10-hare@suse.de


Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 9cc9ef28
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -536,9 +536,11 @@ ahd_linux_unmap_scb(struct ahd_softc *ahd, struct scb *scb)
	struct scsi_cmnd *cmd;

	cmd = scb->io_ctx;
	if (cmd) {
		ahd_sync_sglist(ahd, scb, BUS_DMASYNC_POSTWRITE);
		scsi_dma_unmap(cmd);
	}
}

/******************************** Macros **************************************/
static inline unsigned int ahd_build_scsiid(struct ahd_softc *ahd,
@@ -814,7 +816,7 @@ ahd_linux_dev_reset(struct scsi_cmnd *cmd)

	tinfo = ahd_fetch_transinfo(ahd, 'A', ahd->our_id,
				    cmd->device->id, &tstate);
	reset_scb->io_ctx = cmd;
	reset_scb->io_ctx = NULL;
	reset_scb->platform_data->dev = dev;
	reset_scb->sg_count = 0;
	ahd_set_residual(reset_scb, 0);
@@ -1769,10 +1771,17 @@ ahd_done(struct ahd_softc *ahd, struct scb *scb)
	dev = scb->platform_data->dev;
	dev->active--;
	dev->openings++;
	if (cmd) {
		if ((cmd->result & (CAM_DEV_QFRZN << 16)) != 0) {
			cmd->result &= ~(CAM_DEV_QFRZN << 16);
			dev->qfrozen--;
		}
	} else if (scb->flags & SCB_DEVICE_RESET) {
		if (ahd->platform_data->eh_done)
			complete(ahd->platform_data->eh_done);
		ahd_free_scb(ahd, scb);
		return;
	}
	ahd_linux_unmap_scb(ahd, scb);

	/*