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

Commit 7ff723ad authored by Suganath Prabu S's avatar Suganath Prabu S Committed by Martin K. Petersen
Browse files

scsi: mpt3sas: Unblock device after controller reset



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]

Cc: <stable@vger.kernel.org> # v4.4+
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>
parent 7630b3a5
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -3885,6 +3885,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
@@ -3906,6 +3911,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)
@@ -4010,11 +4018,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