Skip to content

Commit

Permalink
scsi: smartpqi: Avoid failing I/Os for offline devices
Browse files Browse the repository at this point in the history
Prevent kernel crash by failing outstanding I/O request when the OS takes
device offline.

When posted I/Os to the controller's inbound queue are not picked by the
controller, the driver will halt the controller and take the controller
offline.

When the driver takes the controller offline, the driver will fail all the
outstanding requests which can sometimes lead to an OS crash.

Link: https://lore.kernel.org/r/20210928235442.201875-7-don.brace@microchip.com
Reviewed-by: Scott Benesh <scott.benesh@microchip.com>
Reviewed-by: Scott Teel <scott.teel@microchip.com>
Acked-by: John Donnelly <john.p.donnelly@oracle.com>
Signed-off-by: Mahesh Rajashekhara <mahesh.rajashekhara@microchip.com>
Signed-off-by: Don Brace <don.brace@microchip.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
  • Loading branch information
Mahesh Rajashekhara authored and Martin K. Petersen committed Oct 5, 2021
1 parent be76f90 commit 4f3cefc
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion drivers/scsi/smartpqi/smartpqi_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -8544,6 +8544,7 @@ static void pqi_fail_all_outstanding_requests(struct pqi_ctrl_info *ctrl_info)
unsigned int i;
struct pqi_io_request *io_request;
struct scsi_cmnd *scmd;
struct scsi_device *sdev;

for (i = 0; i < ctrl_info->max_io_slots; i++) {
io_request = &ctrl_info->io_request_pool[i];
Expand All @@ -8552,7 +8553,13 @@ static void pqi_fail_all_outstanding_requests(struct pqi_ctrl_info *ctrl_info)

scmd = io_request->scmd;
if (scmd) {
set_host_byte(scmd, DID_NO_CONNECT);
sdev = scmd->device;
if (!sdev || !scsi_device_online(sdev)) {
pqi_free_io_request(io_request);
continue;
} else {
set_host_byte(scmd, DID_NO_CONNECT);
}
} else {
io_request->status = -ENXIO;
io_request->error_info =
Expand Down

0 comments on commit 4f3cefc

Please sign in to comment.