md/raid1: perform mem allocation before disabling writes during resync.
authorNeilBrown <neilb@suse.de>
Tue, 26 Oct 2010 06:41:22 +0000 (17:41 +1100)
committerNeilBrown <neilb@suse.de>
Thu, 28 Oct 2010 06:36:09 +0000 (17:36 +1100)
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>
drivers/md/raid1.c

index 40f58d3b67ff1b7f737ef1b139d6ad69a2655084..6cb6cae1b386667828e024b307c59676097bc688 100644 (file)
@@ -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,