return 0;
 }
 
-static void *raid10_takeover_raid0(struct mddev *mddev)
+static void *raid10_takeover_raid0(struct mddev *mddev, sector_t size, int devs)
 {
        struct md_rdev *rdev;
        struct r10conf *conf;
                       mdname(mddev));
                return ERR_PTR(-EINVAL);
        }
+       sector_div(size, devs);
 
        /* Set new parameters */
        mddev->new_level = 10;
        mddev->raid_disks *= 2;
        /* make sure it will be not marked as dirty */
        mddev->recovery_cp = MaxSector;
+       mddev->dev_sectors = size;
 
        conf = setup_conf(mddev);
        if (!IS_ERR(conf)) {
                rdev_for_each(rdev, mddev)
-                       if (rdev->raid_disk >= 0)
+                       if (rdev->raid_disk >= 0) {
                                rdev->new_raid_disk = rdev->raid_disk * 2;
+                               rdev->sectors = size;
+                       }
                conf->barrier = 1;
        }
 
                               mdname(mddev));
                        return ERR_PTR(-EINVAL);
                }
-               return raid10_takeover_raid0(mddev);
+               return raid10_takeover_raid0(mddev,
+                       raid0_conf->strip_zone->zone_end,
+                       raid0_conf->strip_zone->nb_dev);
        }
        return ERR_PTR(-EINVAL);
 }