__set_current_state(TASK_RUNNING);  
int scsi_error_handler(void *data){	struct Scsi_Host *shost = (struct Scsi_Host *) data;	int rtn;	current->flags |= PF_NOFREEZE;		/*	 * Note - we always use TASK_INTERRUPTIBLE even if the module	 * was loaded as part of the kernel.  The reason is that	 * UNINTERRUPTIBLE would cause this thread to be counted in	 * the load average as a running process, and an interruptible	 * wait doesn't.	 */	set_current_state(TASK_INTERRUPTIBLE);	while (!kthread_should_stop()) {		if (shost->host_failed == 0 ||		    shost->host_failed != shost->host_busy) {			SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler"							  " scsi_eh_%d"							  " sleeping\n",							  shost->host_no));			schedule();			set_current_state(TASK_INTERRUPTIBLE);			continue;		}		__set_current_state(TASK_RUNNING);		SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler"						  " scsi_eh_%d waking"						  " up\n",shost->host_no));		shost->eh_active = 1;		/*		 * We have a host that is failing for some reason.  Figure out		 * what we need to do to get it up and online again (if we can).		 * If we fail, we end up taking the thing offline.		 */		if (shost->hostt->eh_strategy_handler) 			rtn = shost->hostt->eh_strategy_handler(shost);		else			scsi_unjam_host(shost);		shost->eh_active = 0;		/*		 * Note - if the above fails completely, the action is to take		 * individual devices offline and flush the queue of any		 * outstanding requests that may have been pending.  When we		 * restart, we restart any I/O to any other devices on the bus		 * which are still online.		 */		scsi_restart_operations(shost);		set_current_state(TASK_INTERRUPTIBLE);	}	SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler scsi_eh_%d"					  " exiting\n",shost->host_no));	/*	 * Make sure that nobody tries to wake us up again.	 */	shost->ehandler = NULL;	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/461a0ffbec1bcea896bd5daf1a98a18232a1e9c7/scsi_error.c/clean/drivers/scsi/scsi_error.c