]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/md/raid0.c
md: fix handling of array level takeover that re-arranges devices.
[net-next-2.6.git] / drivers / md / raid0.c
index e70f004c99e8b2bf146de202079f763022a048c2..7c7c38058bc25c013d28ff0d1910e3a2c71b0218 100644 (file)
@@ -173,9 +173,11 @@ static int create_strip_zones(mddev_t *mddev, raid0_conf_t **private_conf)
        list_for_each_entry(rdev1, &mddev->disks, same_set) {
                int j = rdev1->raid_disk;
 
-               if (mddev->level == 10)
+               if (mddev->level == 10) {
                        /* taking over a raid10-n2 array */
                        j /= 2;
+                       rdev1->new_raid_disk = j;
+               }
 
                if (j < 0 || j >= mddev->raid_disks) {
                        printk(KERN_ERR "md/raid0:%s: bad disk number %d - "
@@ -361,12 +363,6 @@ static int raid0_run(mddev_t *mddev)
                mddev->private = conf;
        }
        conf = mddev->private;
-       if (conf->scale_raid_disks) {
-               int i;
-               for (i=0; i < conf->strip_zone[0].nb_dev; i++)
-                       conf->devlist[i]->raid_disk /= conf->scale_raid_disks;
-               /* FIXME update sysfs rd links */
-       }
 
        /* calculate array device size */
        md_set_array_sectors(mddev, raid0_size(mddev, 0, 0));
@@ -643,7 +639,6 @@ static void *raid0_takeover_raid10(mddev_t *mddev)
        mddev->recovery_cp = MaxSector;
 
        create_strip_zones(mddev, &priv_conf);
-       priv_conf->scale_raid_disks = 2;
        return priv_conf;
 }