diff options
Diffstat (limited to 'drivers/scsi/aacraid/dpcsup.c')
-rw-r--r-- | drivers/scsi/aacraid/dpcsup.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/drivers/scsi/aacraid/dpcsup.c b/drivers/scsi/aacraid/dpcsup.c index 26f4d563d959..4e53f9db1b2c 100644 --- a/drivers/scsi/aacraid/dpcsup.c +++ b/drivers/scsi/aacraid/dpcsup.c | |||
@@ -5,7 +5,7 @@ | |||
5 | * based on the old aacraid driver that is.. | 5 | * based on the old aacraid driver that is.. |
6 | * Adaptec aacraid device driver for Linux. | 6 | * Adaptec aacraid device driver for Linux. |
7 | * | 7 | * |
8 | * Copyright (c) 2000 Adaptec, Inc. (aacraid@adaptec.com) | 8 | * Copyright (c) 2000-2007 Adaptec, Inc. (aacraid@adaptec.com) |
9 | * | 9 | * |
10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
11 | * it under the terms of the GNU General Public License as published by | 11 | * it under the terms of the GNU General Public License as published by |
@@ -84,11 +84,13 @@ unsigned int aac_response_normal(struct aac_queue * q) | |||
84 | * continue. The caller has already been notified that | 84 | * continue. The caller has already been notified that |
85 | * the fib timed out. | 85 | * the fib timed out. |
86 | */ | 86 | */ |
87 | if (!(fib->flags & FIB_CONTEXT_FLAG_TIMED_OUT)) | 87 | dev->queues->queue[AdapNormCmdQueue].numpending--; |
88 | dev->queues->queue[AdapNormCmdQueue].numpending--; | 88 | |
89 | else { | 89 | if (unlikely(fib->flags & FIB_CONTEXT_FLAG_TIMED_OUT)) { |
90 | printk(KERN_WARNING "aacraid: FIB timeout (%x).\n", fib->flags); | 90 | spin_unlock_irqrestore(q->lock, flags); |
91 | printk(KERN_DEBUG"aacraid: hwfib=%p fib index=%i fib=%p\n",hwfib, hwfib->header.SenderData,fib); | 91 | aac_fib_complete(fib); |
92 | aac_fib_free(fib); | ||
93 | spin_lock_irqsave(q->lock, flags); | ||
92 | continue; | 94 | continue; |
93 | } | 95 | } |
94 | spin_unlock_irqrestore(q->lock, flags); | 96 | spin_unlock_irqrestore(q->lock, flags); |
@@ -281,14 +283,14 @@ unsigned int aac_intr_normal(struct aac_dev * dev, u32 Index) | |||
281 | * continue. The caller has already been notified that | 283 | * continue. The caller has already been notified that |
282 | * the fib timed out. | 284 | * the fib timed out. |
283 | */ | 285 | */ |
284 | if ((fib->flags & FIB_CONTEXT_FLAG_TIMED_OUT)) { | 286 | dev->queues->queue[AdapNormCmdQueue].numpending--; |
285 | printk(KERN_WARNING "aacraid: FIB timeout (%x).\n", fib->flags); | 287 | |
286 | printk(KERN_DEBUG"aacraid: hwfib=%p index=%i fib=%p\n",hwfib, hwfib->header.SenderData,fib); | 288 | if (unlikely(fib->flags & FIB_CONTEXT_FLAG_TIMED_OUT)) { |
289 | aac_fib_complete(fib); | ||
290 | aac_fib_free(fib); | ||
287 | return 0; | 291 | return 0; |
288 | } | 292 | } |
289 | 293 | ||
290 | dev->queues->queue[AdapNormCmdQueue].numpending--; | ||
291 | |||
292 | if (fast) { | 294 | if (fast) { |
293 | /* | 295 | /* |
294 | * Doctor the fib | 296 | * Doctor the fib |