]> git.neil.brown.name Git - mdadm.git/commitdiff
DDF: getinfo_super_ddf_bvd: fix raid_disk calculation
authormwilck@arcor.de <mwilck@arcor.de>
Mon, 8 Jul 2013 21:50:42 +0000 (23:50 +0200)
committerNeilBrown <neilb@suse.de>
Wed, 10 Jul 2013 00:41:34 +0000 (10:41 +1000)
The return value of disk.raid_disk may be wrong.
The old code was using raiddisk, which is only valid with auto
layout. This leads to errors when arrays are created with
specified disks and mdmon is already running, like this:

mdadm -CR /dev/md/container -n5 $d1 $d2 $d3 $d4 $d5
mdadm -CR /dev/md/r5 -n5 -l5 /dev/md/container -z 5000
mdadm -CR /dev/md/r1 -n2 -l1 $d1 $d2
  => resulting array will use wrong disks

This patch fixes that.

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

index bff420cd784b6af836f0e094b5da4c1d55d44bd7..7da4ce0f9572bcab0213dc5b5350cb517a82e005 100644 (file)
@@ -1887,7 +1887,8 @@ static void getinfo_super_ddf_bvd(struct supertype *st, struct mdinfo *info, cha
        if (dl) {
                info->disk.major = dl->major;
                info->disk.minor = dl->minor;
-               info->disk.raid_disk = dl->raiddisk;
+               info->disk.raid_disk = cd + conf->sec_elmnt_seq
+                       * __be16_to_cpu(conf->prim_elmnt_count);
                info->disk.number = dl->pdnum;
                info->disk.state = (1<<MD_DISK_SYNC)|(1<<MD_DISK_ACTIVE);
        }