Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6eddf5c9 authored by Suganath Prabu S's avatar Suganath Prabu S Committed by Greg Kroah-Hartman
Browse files

scsi: mpt3sas: Unblock device after controller reset



commit 7ff723ad0f87feba43dda45fdae71206063dd7d4 upstream.

While issuing any ATA passthrough command to firmware the driver will
block the device. But it will unblock the device only if the I/O
completes through the ISR path. If a controller reset occurs before
command completion the device will remain in blocked state.

Make sure we unblock the device following a controller reset if an ATA
passthrough command was queued.

[mkp: clarified patch description]

Fixes: ac6c2a93bd07 ("mpt3sas: Fix for SATA drive in blocked state, after diag reset")
Signed-off-by: default avatarSuganath Prabu S <suganath-prabu.subramani@broadcom.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent c178e480
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -3706,6 +3706,11 @@ _scsih_temp_threshold_events(struct MPT3SAS_ADAPTER *ioc,
	}
}

static inline bool ata_12_16_cmd(struct scsi_cmnd *scmd)
{
	return (scmd->cmnd[0] == ATA_12 || scmd->cmnd[0] == ATA_16);
}

/**
 * _scsih_flush_running_cmds - completing outstanding commands.
 * @ioc: per adapter object
@@ -3727,6 +3732,9 @@ _scsih_flush_running_cmds(struct MPT3SAS_ADAPTER *ioc)
		if (!scmd)
			continue;
		count++;
		if (ata_12_16_cmd(scmd))
			scsi_internal_device_unblock(scmd->device,
							SDEV_RUNNING);
		mpt3sas_base_free_smid(ioc, smid);
		scsi_dma_unmap(scmd);
		if (ioc->pci_error_recovery)
@@ -3831,11 +3839,6 @@ _scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
	    SAM_STAT_CHECK_CONDITION;
}

static inline bool ata_12_16_cmd(struct scsi_cmnd *scmd)
{
	return (scmd->cmnd[0] == ATA_12 || scmd->cmnd[0] == ATA_16);
}

/**
 * scsih_qcmd - main scsi request entry point
 * @scmd: pointer to scsi command object