]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Fix 'enough' function for RAID10.
authorNeilBrown <neilb@suse.de>
Thu, 27 Sep 2012 06:58:44 +0000 (16:58 +1000)
committerNeilBrown <neilb@suse.de>
Thu, 27 Sep 2012 06:58:44 +0000 (16:58 +1000)
The 'enough' function is written to work with 'near' arrays only
in that is implicitly assumes that the offset from one 'group' of
devices to the next is the same as the number of copies.
In reality it is the number of 'near' copies.

So change it to make this number explicit.

Reported-by: Jakub Husák <jakub@gooseman.cz>
Signed-off-by: NeilBrown <neilb@suse.de>
util.c

diff --git a/util.c b/util.c
index 83f318726c1f285576a4dda453d2ab6bbd27a9e4..eef0d6f059a3bbe694ae3b2604189d3e75167abf 100644 (file)
--- a/util.c
+++ b/util.c
@@ -332,14 +332,15 @@ int enough(int level, int raid_disks, int layout, int clean, char *avail)
                        /* there must be one of the 'copies' form 'first' */
                        int n = copies;
                        int cnt=0;
+                       int this = first;
                        while (n--) {
-                               if (avail[first])
+                               if (avail[this])
                                        cnt++;
-                               first = (first+1) % raid_disks;
+                               this = (this+1) % raid_disks;
                        }
                        if (cnt == 0)
                                return 0;
-
+                       first = (first+(layout&255)) % raid_disks;
                } while (first != 0);
                return 1;