From: NeilBrown <neilb@suse.de>
Date: Tue, 26 Oct 2010 06:41:22 +0000 (+1100)
Subject: md/raid1: perform mem allocation before disabling writes during resync.
X-Git-Tag: firefly_0821_release~7613^2~3566^2~6
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=1c4588e9c19cae6209a28c9da2f16a18a610b935;p=firefly-linux-kernel-4.4.55.git

md/raid1: perform mem allocation before disabling writes during resync.

Though this mem alloc is GFP_NOIO an so will not deadlock, it seems
better to do the allocation before 'raise_barrier' which stops any IO
requests while the resync proceeds.

raid10 always uses this order, so it is at least consistent to do the
same in raid1.

Signed-off-by: NeilBrown <neilb@suse.de>
---

diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 40f58d3b67ff..6cb6cae1b386 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -1749,11 +1749,11 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i
 		msleep_interruptible(1000);
 
 	bitmap_cond_end_sync(mddev->bitmap, sector_nr);
+	r1_bio = mempool_alloc(conf->r1buf_pool, GFP_NOIO);
 	raise_barrier(conf);
 
 	conf->next_resync = sector_nr;
 
-	r1_bio = mempool_alloc(conf->r1buf_pool, GFP_NOIO);
 	rcu_read_lock();
 	/*
 	 * If we get a correctably read error during resync or recovery,