cciss: fix lost command issue
authorBud Brown <[email protected]>
Wed, 23 Mar 2011 19:47:11 +0000 (20:47 +0100)
committerJens Axboe <[email protected]>
Wed, 23 Mar 2011 19:47:11 +0000 (20:47 +0100)
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 <[email protected]>
Cc: [email protected]
Signed-off-by: Jens Axboe <[email protected]>
drivers/block/cciss.h

index 579f7491849304cfc311ed9a9e46580013e116b7..554bbd907d144500817a615702ab6155cb7f7243 100644 (file)
@@ -222,6 +222,7 @@ static void SA5_submit_command( ctlr_info_t *h, CommandList_struct *c)
                        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;