]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
DDF: allow for unused slots when creating map list for getinfo_super_ddf.
authorNeilBrown <neilb@suse.de>
Tue, 6 May 2014 01:42:12 +0000 (11:42 +1000)
committerNeilBrown <neilb@suse.de>
Wed, 21 May 2014 01:54:48 +0000 (11:54 +1000)
Signed-off-by: NeilBrown <neilb@suse.de>
super-ddf.c

index 5a07c46e93f298de5bf71fbe4119b6c066d2d274..475eadc4c2b887aae577fab12d7f174c46d9d131 100644 (file)
@@ -2042,10 +2042,14 @@ static void getinfo_super_ddf(struct supertype *st, struct mdinfo *info, char *m
        uuid_from_super_ddf(st, info->uuid);
 
        if (map) {
-               int i;
-               for (i = 0 ; i < map_disks; i++) {
-                       if (i < info->array.raid_disks &&
-                           !(be16_to_cpu(ddf->phys->entries[i].state)
+               int i, e = 0;
+               int max = be16_to_cpu(ddf->phys->max_pdes);
+               for (i = e = 0 ; i < map_disks ; i++, e++) {
+                       while (e < max &&
+                              be32_to_cpu(ddf->phys->entries[e].refnum) == 0xffffffff)
+                               e++;
+                       if (i < info->array.raid_disks && e < max &&
+                           !(be16_to_cpu(ddf->phys->entries[e].state)
                              & DDF_Failed))
                                map[i] = 1;
                        else