* If the bus reset worked, but we are still unable to
* talk to the device, take it offline.
* FIXME(eric) - is this really the correct thing to do?
*/
if(rtn!=SUCCESS){
printk(KERN_INFO"scsi: device set offline - not ready or command retry failed after bus reset: host %d channel %d id %d lun %d\n",SDloop->host->host_no,SDloop->channel,SDloop->id,SDloop->lun);
SDloop->online=FALSE;
SDloop->host->host_failed--;
scsi_eh_finish_command(&SCdone,SCloop);
}
}
}
}
}
}
if(host->host_failed==0){
ourrtn=TRUE;
gotoleave;
}
/*
* If we ended up here, we have serious problems. The only thing left
* to try is a full host reset - perhaps the firmware on the device
* crashed, or something like that.
*
* It is assumed that a succesful host reset will cause *all* information
* about the command to be flushed from both the host adapter *and* the
* device.
*
* FIXME(eric) - it isn't clear that devices that implement the soft reset
* option can ever be cleared except via cycling the power. The problem is
* that sending the host reset command will cause the host to forget
* about the pending command, but the device won't forget. For now, we
* skip the host reset option if any of the failed devices are configured
printk(KERN_INFO"scsi: device set offline - not ready or command retry failed after host reset: host %d channel %d id %d lun %d\n",SDloop->host->host_no,SDloop->channel,SDloop->id,SDloop->lun);
SDloop->online=FALSE;
SDloop->host->host_failed--;
scsi_eh_finish_command(&SCdone,SCloop);
}
}
}
}
}
}
Scsi_Cmnd*sc_todo=NULL;
Scsi_Cmnd*scmd;
/*
* If we solved all of the problems, then let's rev up the engines again.
*/
if(host->host_failed==0){
ourrtn=TRUE;
gotoleave;
}
/*
* If the HOST RESET failed, then for now we assume that the entire host
* adapter is too hosed to be of any use. For our purposes, however, it is
* easier to simply take the devices offline that correspond to commands
* that failed.
* Is this assert really ok anymore (andmike). Should we at least
* be using spin_lock_unlocked.
*/
SCSI_LOG_ERROR_RECOVERY(1,printk("scsi_unjam_host: Take device offline\n"));