]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/scsi/aacraid/dpcsup.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[linux-2.6-omap-h63xx.git] / drivers / scsi / aacraid / dpcsup.c
index b2a5c7262f36ba1be0189f10faaf3a2d5f2861e2..66aeb57dcc2d1e9f00f6872f21004d2e15046ef7 100644 (file)
@@ -32,8 +32,6 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/types.h>
-#include <linux/sched.h>
-#include <linux/pci.h>
 #include <linux/spinlock.h>
 #include <linux/slab.h>
 #include <linux/completion.h>
@@ -124,10 +122,15 @@ unsigned int aac_response_normal(struct aac_queue * q)
                } else {
                        unsigned long flagv;
                        spin_lock_irqsave(&fib->event_lock, flagv);
-                       fib->done = 1;
+                       if (!fib->done)
+                               fib->done = 1;
                        up(&fib->event_wait);
                        spin_unlock_irqrestore(&fib->event_lock, flagv);
                        FIB_COUNTER_INCREMENT(aac_config.NormalRecved);
+                       if (fib->done == 2) {
+                               aac_fib_complete(fib);
+                               aac_fib_free(fib);
+                       }
                }
                consumed++;
                spin_lock_irqsave(q->lock, flags);
@@ -316,7 +319,8 @@ unsigned int aac_intr_normal(struct aac_dev * dev, u32 Index)
                        unsigned long flagv;
                        dprintk((KERN_INFO "event_wait up\n"));
                        spin_lock_irqsave(&fib->event_lock, flagv);
-                       fib->done = 1;
+                       if (!fib->done)
+                               fib->done = 1;
                        up(&fib->event_wait);
                        spin_unlock_irqrestore(&fib->event_lock, flagv);
                        FIB_COUNTER_INCREMENT(aac_config.NormalRecved);