]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
md-cluster/raid10: set "do_balance = 0" if area is resyncing
authorGuoqing Jiang <gqjiang@suse.com>
Tue, 24 Oct 2017 07:11:50 +0000 (15:11 +0800)
committerShaohua Li <shli@fb.com>
Thu, 2 Nov 2017 04:32:22 +0000 (21:32 -0700)
Just like clustered raid1, it is impossible for cluster raid10
to choose the best device for read balance when the area of
array is resyncing. Because we cannot trust the data to be the
same on all devices at that time, so we choose just the first
one to use, so set do_balance to 0.

Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
Signed-off-by: Shaohua Li <shli@fb.com>
drivers/md/raid10.c

index 615f677ceb1a9f62f0e2754bb9ab9e25713d426b..61890231972ec0b2d81917c2121029cb9f142bfa 100644 (file)
@@ -759,8 +759,11 @@ static struct md_rdev *read_balance(struct r10conf *conf,
         * the resync window. We take the first readable disk when
         * above the resync window.
         */
-       if (conf->mddev->recovery_cp < MaxSector
-           && (this_sector + sectors >= conf->next_resync))
+       if ((conf->mddev->recovery_cp < MaxSector
+            && (this_sector + sectors >= conf->next_resync)) ||
+           (mddev_is_clustered(conf->mddev) &&
+            md_cluster_ops->area_resyncing(conf->mddev, READ, this_sector,
+                                           this_sector + sectors)))
                do_balance = 0;
 
        for (slot = 0; slot < conf->copies ; slot++) {