Skip to content

Commit f1393d5

Browse files
Gilbert Wumartinkpetersen
authored andcommitted
scsi: smartpqi: revert propagate-the-multipath-failure-to-SML-quickly
Correct a rare multipath failure issue by reverting commit 94a68c8 ("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/[email protected]/ Fixes: 94a68c8 ("scsi: smartpqi: Quickly propagate path failures to SCSI midlayer") Reviewed-by: Scott Benesh <[email protected]> Reviewed-by: Scott Teel <[email protected]> Reviewed-by: Mike McGowen <[email protected]> Signed-off-by: Gilbert Wu <[email protected]> Signed-off-by: Don Brace <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Martin K. Petersen <[email protected]>
1 parent bb0f544 commit f1393d5

File tree

1 file changed

+2
-18
lines changed

1 file changed

+2
-18
lines changed

drivers/scsi/smartpqi/smartpqi_init.c

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2365,14 +2365,6 @@ static inline void pqi_mask_device(u8 *scsi3addr)
23652365
scsi3addr[3] |= 0xc0;
23662366
}
23672367

2368-
static inline bool pqi_is_multipath_device(struct pqi_scsi_dev *device)
2369-
{
2370-
if (pqi_is_logical_device(device))
2371-
return false;
2372-
2373-
return (device->path_map & (device->path_map - 1)) != 0;
2374-
}
2375-
23762368
static inline bool pqi_expose_device(struct pqi_scsi_dev *device)
23772369
{
23782370
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)
32693261
int residual_count;
32703262
int xfer_count;
32713263
bool device_offline;
3272-
struct pqi_scsi_dev *device;
32733264

32743265
scmd = io_request->scmd;
32753266
error_info = io_request->error_info;
32763267
host_byte = DID_OK;
32773268
sense_data_length = 0;
32783269
device_offline = false;
3279-
device = scmd->device->hostdata;
32803270

32813271
switch (error_info->service_response) {
32823272
case PQI_AIO_SERV_RESPONSE_COMPLETE:
@@ -3301,14 +3291,8 @@ static void pqi_process_aio_io_error(struct pqi_io_request *io_request)
33013291
break;
33023292
case PQI_AIO_STATUS_AIO_PATH_DISABLED:
33033293
pqi_aio_path_disabled(io_request);
3304-
if (pqi_is_multipath_device(device)) {
3305-
pqi_device_remove_start(device);
3306-
host_byte = DID_NO_CONNECT;
3307-
scsi_status = SAM_STAT_CHECK_CONDITION;
3308-
} else {
3309-
scsi_status = SAM_STAT_GOOD;
3310-
io_request->status = -EAGAIN;
3311-
}
3294+
scsi_status = SAM_STAT_GOOD;
3295+
io_request->status = -EAGAIN;
33123296
break;
33133297
case PQI_AIO_STATUS_NO_PATH_TO_DEVICE:
33143298
case PQI_AIO_STATUS_INVALID_DEVICE:

0 commit comments

Comments
 (0)