]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
md/raid5: add missing call to schedule() after prepare_to_wait()
authorDan Williams <dan.j.williams@intel.com>
Tue, 16 Jun 2009 23:00:33 +0000 (16:00 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 2 Jul 2009 23:31:53 +0000 (16:31 -0700)
commit 7a3ab908948b6296ee7e81d42f7c176361c51975 upstream.

In the unlikely event that reshape progresses past the current request
while it is waiting for a stripe we need to schedule() before retrying
for 2 reasons:
1/ Prevent list corruption from duplicated list_add() calls without
   intervening list_del().
2/ Give the reshape code a chance to make some progress to resolve the
   conflict.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/md/raid5.c

index 224de022e7c5d6574cf46747947b3c9e326c8632..562ab63ab57995b58553fbab50dcb2f5b932dc47 100644 (file)
@@ -3431,6 +3431,7 @@ static int make_request(struct request_queue *q, struct bio * bi)
                                spin_unlock_irq(&conf->device_lock);
                                if (must_retry) {
                                        release_stripe(sh);
+                                       schedule();
                                        goto retry;
                                }
                        }