megaraid_sas: fix extended timeout handling
Subsystems (2)
PATCH 1/1 megaraid_sas: fix extended timeout handling
Replace the eh_timed_out method usage with setting sdev->timeout in slave_configure. Also only use the extended timeout for raid volumes, physical devices shouldn't need it.
Applies ontop of the previous physical device attachment fix which introduces megasas_slave_configure.
drivers/scsi/megaraid/megaraid_sas.c +6 -24
@@ -686,8 +686,6 @@ goto out_return_cmd; cmd->scmd = scmd; - scmd->SCp.ptr = (char *)cmd; - scmd->SCp.sent_command = jiffies;/* * Issue the command to the FW
@@ -714,6 +712,12 @@*/ if (sdev->channel <MEGASAS_MAX_PD_CHANNELS && sdev->type ==TYPE_DISK ) sdev->no_uld_attach =1 ; + +/* +* The RAID firmware may require extended timeouts. +*/ +if (sdev->channel >=MEGASAS_MAX_PD_CHANNELS ) + sdev->timeout =90 *HZ ;return 0 ; }
@@ -785,23 +789,6 @@return ret_val; } -static enum scsi_eh_timer_return megasas_reset_timer (struct scsi_cmnd *scmd) -{ -unsigned long seconds; - -if (scmd->SCp.ptr) { - seconds = (jiffies - scmd->SCp.sent_command) /HZ ; - -if (seconds <90 ) { -return EH_RESET_TIMER ; - }else { -return EH_NOT_HANDLED ; - } - } - -return EH_HANDLED ; -} -/** * megasas_reset_device - Device reset handler entry point */
@@ -872,7 +859,6 @@ .eh_device_reset_handler = megasas_reset_device, .eh_bus_reset_handler = megasas_reset_bus_host, .eh_host_reset_handler = megasas_reset_bus_host, - .eh_timed_out = megasas_reset_timer, .use_clustering = ENABLE_CLUSTERING, };
@@ -976,10 +962,6 @@struct megasas_header *hdr = &cmd->frame->hdr;unsigned long flags; -if (cmd->scmd) { - cmd->scmd->SCp.ptr = (char *)0 ; - } -switch (hdr->cmd) {case MFI_CMD_PD_SCSI_IO :
Quoted 6 lines · Christoph Hellwig
Replace the
eh_timed_outmethod usage with settingsdev->timeoutinslave_configure. Also only use the extended timeout for raid volumes, physical devices shouldn't need it.Applies ontop of the previous physical device attachment fix which introduces
megasas_slave_configure.
Here's a resend against current mainline. Note that scsi-misc is missing the hidep physical disks patch so it needs another mainline merge before this patch applies.
drivers/scsi/megaraid/megaraid_sas.c +6 -20
@@ -772,8 +772,6 @@ goto out_return_cmd; cmd->scmd = scmd; - scmd->SCp.ptr = (char *)cmd; - scmd->SCp.sent_command = jiffies;/* * Issue the command to the FW
@@ -804,6 +802,12 @@*/ if (sdev->channel <MEGASAS_MAX_PD_CHANNELS && sdev->type ==TYPE_DISK )return -ENXIO ; + +/* +* The RAID firmware may require extended timeouts. +*/ +if (sdev->channel >=MEGASAS_MAX_PD_CHANNELS ) + sdev->timeout =90 *HZ ;return 0 ; }
@@ -875,23 +879,6 @@return ret_val; } -static enum scsi_eh_timer_return megasas_reset_timer (struct scsi_cmnd *scmd) -{ -unsigned long seconds; - -if (scmd->SCp.ptr) { - seconds = (jiffies - scmd->SCp.sent_command) /HZ ; - -if (seconds <90 ) { -return EH_RESET_TIMER ; - }else { -return EH_NOT_HANDLED ; - } - } - -return EH_HANDLED ; -} -/** * megasas_reset_device - Device reset handler entry point */
@@ -962,7 +949,6 @@ .eh_device_reset_handler = megasas_reset_device, .eh_bus_reset_handler = megasas_reset_bus_host, .eh_host_reset_handler = megasas_reset_bus_host, - .eh_timed_out = megasas_reset_timer, .use_clustering = ENABLE_CLUSTERING, };