|
@@ -515,10 +515,12 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,
|
|
|
}
|
|
|
udelay(5);
|
|
|
}
|
|
|
- } else
|
|
|
- (void)down_interruptible(&fibptr->event_wait);
|
|
|
+ } else if (down_interruptible(&fibptr->event_wait) == 0) {
|
|
|
+ fibptr->done = 2;
|
|
|
+ up(&fibptr->event_wait);
|
|
|
+ }
|
|
|
spin_lock_irqsave(&fibptr->event_lock, flags);
|
|
|
- if (fibptr->done == 0) {
|
|
|
+ if ((fibptr->done == 0) || (fibptr->done == 2)) {
|
|
|
fibptr->done = 2; /* Tell interrupt we aborted */
|
|
|
spin_unlock_irqrestore(&fibptr->event_lock, flags);
|
|
|
return -EINTR;
|