mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 06:01:57 +00:00
scsi: smartpqi: revert propagate-the-multipath-failure-to-SML-quickly
Correct a rare multipath failure issue by reverting commit94a68c8143
("scsi: smartpqi: Quickly propagate path failures to SCSI midlayer") [1]. Reason for revert: The patch propagated the path failure to SML quickly when one of the path fails during IO and AIO path gets disabled for a multipath device. But it created a new issue: when creating a volume on an encryption-enabled controller, the firmware reports the AIO path is disabled, which cause the driver to report a path failure to SML for a multipath device. There will be a new fix to handle "Illegal request" and "Invalid field in parameter list" on RAID path when the AIO path is disabled on a multipath device. [1] https://lore.kernel.org/all/164375209313.440833.9992416628621839233.stgit@brunhilda.pdev.net/ Fixes:94a68c8143
("scsi: smartpqi: Quickly propagate path failures to SCSI midlayer") Reviewed-by: Scott Benesh <scott.benesh@microchip.com> Reviewed-by: Scott Teel <scott.teel@microchip.com> Reviewed-by: Mike McGowen <mike.mcgowen@microchip.com> Signed-off-by: Gilbert Wu <Gilbert.Wu@microchip.com> Signed-off-by: Don Brace <don.brace@microchip.com> Link: https://lore.kernel.org/r/20240711194704.982400-4-don.brace@microchip.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
bb0f5445b2
commit
f1393d52e6
@ -2365,14 +2365,6 @@ static inline void pqi_mask_device(u8 *scsi3addr)
|
||||
scsi3addr[3] |= 0xc0;
|
||||
}
|
||||
|
||||
static inline bool pqi_is_multipath_device(struct pqi_scsi_dev *device)
|
||||
{
|
||||
if (pqi_is_logical_device(device))
|
||||
return false;
|
||||
|
||||
return (device->path_map & (device->path_map - 1)) != 0;
|
||||
}
|
||||
|
||||
static inline bool pqi_expose_device(struct pqi_scsi_dev *device)
|
||||
{
|
||||
return !device->is_physical_device || !pqi_skip_device(device->scsi3addr);
|
||||
@ -3269,14 +3261,12 @@ static void pqi_process_aio_io_error(struct pqi_io_request *io_request)
|
||||
int residual_count;
|
||||
int xfer_count;
|
||||
bool device_offline;
|
||||
struct pqi_scsi_dev *device;
|
||||
|
||||
scmd = io_request->scmd;
|
||||
error_info = io_request->error_info;
|
||||
host_byte = DID_OK;
|
||||
sense_data_length = 0;
|
||||
device_offline = false;
|
||||
device = scmd->device->hostdata;
|
||||
|
||||
switch (error_info->service_response) {
|
||||
case PQI_AIO_SERV_RESPONSE_COMPLETE:
|
||||
@ -3301,14 +3291,8 @@ static void pqi_process_aio_io_error(struct pqi_io_request *io_request)
|
||||
break;
|
||||
case PQI_AIO_STATUS_AIO_PATH_DISABLED:
|
||||
pqi_aio_path_disabled(io_request);
|
||||
if (pqi_is_multipath_device(device)) {
|
||||
pqi_device_remove_start(device);
|
||||
host_byte = DID_NO_CONNECT;
|
||||
scsi_status = SAM_STAT_CHECK_CONDITION;
|
||||
} else {
|
||||
scsi_status = SAM_STAT_GOOD;
|
||||
io_request->status = -EAGAIN;
|
||||
}
|
||||
scsi_status = SAM_STAT_GOOD;
|
||||
io_request->status = -EAGAIN;
|
||||
break;
|
||||
case PQI_AIO_STATUS_NO_PATH_TO_DEVICE:
|
||||
case PQI_AIO_STATUS_INVALID_DEVICE:
|
||||
|
Loading…
Reference in New Issue
Block a user