mpt3sas: Never block the Enclosure device
Never block the SEP device (i.e. Never invoke the scsi_internal_device_block() API for SEP device) even for the delay not responding events. Blocking the SEP device will create a deadlock while adding any device to the OS. Signed-off-by: Suganath prabu Subramani <suganath-prabu.subramani@avagotech.com> Signed-off-by: Chaitra P B <chaitra.basappa@avagotech.com> Reviewed-by: Tomas Henzl <thenzl@redhat.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
869817f9e9
commit
30158dc9bb
|
@ -398,6 +398,7 @@ struct MPT3SAS_DEVICE {
|
||||||
u8 configured_lun;
|
u8 configured_lun;
|
||||||
u8 block;
|
u8 block;
|
||||||
u8 tlr_snoop_check;
|
u8 tlr_snoop_check;
|
||||||
|
u8 ignore_delay_remove;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MPT3_CMD_NOT_USED 0x8000 /* free */
|
#define MPT3_CMD_NOT_USED 0x8000 /* free */
|
||||||
|
|
|
@ -1953,7 +1953,15 @@ scsih_slave_configure(struct scsi_device *sdev)
|
||||||
if (sas_device->device_info & MPI2_SAS_DEVICE_INFO_SSP_TARGET) {
|
if (sas_device->device_info & MPI2_SAS_DEVICE_INFO_SSP_TARGET) {
|
||||||
qdepth = MPT3SAS_SAS_QUEUE_DEPTH;
|
qdepth = MPT3SAS_SAS_QUEUE_DEPTH;
|
||||||
ssp_target = 1;
|
ssp_target = 1;
|
||||||
ds = "SSP";
|
if (sas_device->device_info &
|
||||||
|
MPI2_SAS_DEVICE_INFO_SEP) {
|
||||||
|
sdev_printk(KERN_WARNING, sdev,
|
||||||
|
"set ignore_delay_remove for handle(0x%04x)\n",
|
||||||
|
sas_device_priv_data->sas_target->handle);
|
||||||
|
sas_device_priv_data->ignore_delay_remove = 1;
|
||||||
|
ds = "SES";
|
||||||
|
} else
|
||||||
|
ds = "SSP";
|
||||||
} else {
|
} else {
|
||||||
qdepth = MPT3SAS_SATA_QUEUE_DEPTH;
|
qdepth = MPT3SAS_SATA_QUEUE_DEPTH;
|
||||||
if (sas_device->device_info & MPI2_SAS_DEVICE_INFO_STP_TARGET)
|
if (sas_device->device_info & MPI2_SAS_DEVICE_INFO_STP_TARGET)
|
||||||
|
@ -2943,6 +2951,12 @@ _scsih_block_io_all_device(struct MPT3SAS_ADAPTER *ioc)
|
||||||
continue;
|
continue;
|
||||||
if (sas_device_priv_data->block)
|
if (sas_device_priv_data->block)
|
||||||
continue;
|
continue;
|
||||||
|
if (sas_device_priv_data->ignore_delay_remove) {
|
||||||
|
sdev_printk(KERN_INFO, sdev,
|
||||||
|
"%s skip device_block for SES handle(0x%04x)\n",
|
||||||
|
__func__, sas_device_priv_data->sas_target->handle);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
_scsih_internal_device_block(sdev, sas_device_priv_data);
|
_scsih_internal_device_block(sdev, sas_device_priv_data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2975,6 +2989,12 @@ _scsih_block_io_device(struct MPT3SAS_ADAPTER *ioc, u16 handle)
|
||||||
continue;
|
continue;
|
||||||
if (sas_device->pend_sas_rphy_add)
|
if (sas_device->pend_sas_rphy_add)
|
||||||
continue;
|
continue;
|
||||||
|
if (sas_device_priv_data->ignore_delay_remove) {
|
||||||
|
sdev_printk(KERN_INFO, sdev,
|
||||||
|
"%s skip device_block for SES handle(0x%04x)\n",
|
||||||
|
__func__, sas_device_priv_data->sas_target->handle);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
_scsih_internal_device_block(sdev, sas_device_priv_data);
|
_scsih_internal_device_block(sdev, sas_device_priv_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue