]> 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:50:21 +0000 (16:50 -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 bb37fb1b2d82dd484e749ec3b18a9dcf9e1b8f55..c0434e0b72ac784b875e8676537d8a8aad0f1975 100644 (file)
@@ -3696,6 +3696,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;
                                }
                        }