36 lines
1.3 KiB
Diff
36 lines
1.3 KiB
Diff
From 1ddd5049545e0aa1a0ed19bca4d9c9c3ce1ac8a2 Mon Sep 17 00:00:00 2001
|
|
From: Bud Brown <bud.brown@redhat.com>
|
|
Date: Wed, 23 Mar 2011 20:47:11 +0100
|
|
Subject: cciss: fix lost command issue
|
|
|
|
From: Bud Brown <bud.brown@redhat.com>
|
|
|
|
commit 1ddd5049545e0aa1a0ed19bca4d9c9c3ce1ac8a2 upstream.
|
|
|
|
Under certain workloads a command may seem to get lost. IOW, the Smart Array
|
|
thinks all commands have been completed but we still have commands in our
|
|
completion queue. This may lead to system instability, filesystems going
|
|
read-only, or even panics depending on the affected filesystem. We add an
|
|
extra read to force the write to complete.
|
|
|
|
Testing shows this extra read avoids the problem.
|
|
|
|
Signed-off-by: Mike Miller <mike.miller@hp.com>
|
|
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
---
|
|
drivers/block/cciss.h | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
--- a/drivers/block/cciss.h
|
|
+++ b/drivers/block/cciss.h
|
|
@@ -222,6 +222,7 @@ static void SA5_submit_command( ctlr_inf
|
|
h->ctlr, c->busaddr);
|
|
#endif /* CCISS_DEBUG */
|
|
writel(c->busaddr, h->vaddr + SA5_REQUEST_PORT_OFFSET);
|
|
+ readl(h->vaddr + SA5_REQUEST_PORT_OFFSET);
|
|
h->commands_outstanding++;
|
|
if ( h->commands_outstanding > h->max_outstanding)
|
|
h->max_outstanding = h->commands_outstanding;
|