|
@@ -20,6 +20,7 @@
|
|
|
#include <linux/string.h>
|
|
|
#include <linux/slab.h>
|
|
|
#include <linux/kernel.h>
|
|
|
+#include <linux/kthread.h>
|
|
|
#include <linux/interrupt.h>
|
|
|
#include <linux/blkdev.h>
|
|
|
#include <linux/delay.h>
|
|
@@ -1585,16 +1586,8 @@ int scsi_error_handler(void *data)
|
|
|
int rtn;
|
|
|
DECLARE_MUTEX_LOCKED(sem);
|
|
|
|
|
|
- /*
|
|
|
- * Flush resources
|
|
|
- */
|
|
|
-
|
|
|
- daemonize("scsi_eh_%d", shost->host_no);
|
|
|
-
|
|
|
current->flags |= PF_NOFREEZE;
|
|
|
-
|
|
|
shost->eh_wait = &sem;
|
|
|
- shost->ehandler = current;
|
|
|
|
|
|
/*
|
|
|
* Wake up the thread that created us.
|
|
@@ -1602,8 +1595,6 @@ int scsi_error_handler(void *data)
|
|
|
SCSI_LOG_ERROR_RECOVERY(3, printk("Wake up parent of"
|
|
|
" scsi_eh_%d\n",shost->host_no));
|
|
|
|
|
|
- complete(shost->eh_notify);
|
|
|
-
|
|
|
while (1) {
|
|
|
/*
|
|
|
* If we get a signal, it means we are supposed to go
|
|
@@ -1624,7 +1615,7 @@ int scsi_error_handler(void *data)
|
|
|
* semaphores isn't unreasonable.
|
|
|
*/
|
|
|
down_interruptible(&sem);
|
|
|
- if (shost->eh_kill)
|
|
|
+ if (kthread_should_stop())
|
|
|
break;
|
|
|
|
|
|
SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler"
|
|
@@ -1663,22 +1654,6 @@ int scsi_error_handler(void *data)
|
|
|
* Make sure that nobody tries to wake us up again.
|
|
|
*/
|
|
|
shost->eh_wait = NULL;
|
|
|
-
|
|
|
- /*
|
|
|
- * Knock this down too. From this point on, the host is flying
|
|
|
- * without a pilot. If this is because the module is being unloaded,
|
|
|
- * that's fine. If the user sent a signal to this thing, we are
|
|
|
- * potentially in real danger.
|
|
|
- */
|
|
|
- shost->eh_active = 0;
|
|
|
- shost->ehandler = NULL;
|
|
|
-
|
|
|
- /*
|
|
|
- * If anyone is waiting for us to exit (i.e. someone trying to unload
|
|
|
- * a driver), then wake up that process to let them know we are on
|
|
|
- * the way out the door.
|
|
|
- */
|
|
|
- complete_and_exit(shost->eh_notify, 0);
|
|
|
return 0;
|
|
|
}
|
|
|
|