diff -rupN old/drivers/scsi/megaraid/megaraid_sas.c new/drivers/scsi/megaraid/megaraid_sas.c --- old/drivers/scsi/megaraid/megaraid_sas.c 2010-11-10 04:39:48.000000000 -0500 +++ new/drivers/scsi/megaraid/megaraid_sas.c 2010-11-14 15:32:31.000000000 -0500 @@ -2294,7 +2294,6 @@ process_fw_state_change_wq(struct work_s { struct megasas_instance *instance = container_of(work, struct megasas_instance, work_init); - u32 wait; unsigned long flags; if (instance->adprecovery != MEGASAS_ADPRESET_SM_INFAULT) { @@ -2320,10 +2319,8 @@ process_fw_state_change_wq(struct work_s printk(KERN_NOTICE "megaraid_sas: HBA recovery state machine," "state 2 starting...\n"); - /*waitting for about 20 second before start the second init*/ - for (wait = 0; wait < 30; wait++) { - msleep(1000); - } + /*waitting for about 30 second before start the second init*/ + ssleep(30); if (megasas_transition_to_ready(instance)) { printk(KERN_NOTICE "megaraid_sas:adapter not ready\n"); @@ -2487,7 +2484,9 @@ megasas_transition_to_ready(struct megas case MFI_STATE_FAULT: printk(KERN_DEBUG "megasas: FW in FAULT state!!\n"); - return -ENODEV; + max_wait = MEGASAS_RESET_WAIT_TIME; + cur_state = MFI_STATE_FAULT; + break; case MFI_STATE_WAIT_HANDSHAKE: /*