aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/aacraid/commctrl.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c
index 47fefca72695..9f75144e5247 100644
--- a/drivers/scsi/aacraid/commctrl.c
+++ b/drivers/scsi/aacraid/commctrl.c
@@ -38,6 +38,8 @@
38#include <linux/completion.h> 38#include <linux/completion.h>
39#include <linux/dma-mapping.h> 39#include <linux/dma-mapping.h>
40#include <linux/blkdev.h> 40#include <linux/blkdev.h>
41#include <linux/delay.h>
42#include <linux/kthread.h>
41#include <asm/semaphore.h> 43#include <asm/semaphore.h>
42#include <asm/uaccess.h> 44#include <asm/uaccess.h>
43 45
@@ -293,6 +295,16 @@ return_fib:
293 status = 0; 295 status = 0;
294 } else { 296 } else {
295 spin_unlock_irqrestore(&dev->fib_lock, flags); 297 spin_unlock_irqrestore(&dev->fib_lock, flags);
298 /* If someone killed the AIF aacraid thread, restart it */
299 status = !dev->aif_thread;
300 if (status && dev->queues && dev->fsa_dev) {
301 /* Be paranoid, be very paranoid! */
302 kthread_stop(dev->thread);
303 ssleep(1);
304 dev->aif_thread = 0;
305 dev->thread = kthread_run(aac_command_thread, dev, dev->name);
306 ssleep(1);
307 }
296 if (f.wait) { 308 if (f.wait) {
297 if(down_interruptible(&fibctx->wait_sem) < 0) { 309 if(down_interruptible(&fibctx->wait_sem) < 0) {
298 status = -EINTR; 310 status = -EINTR;