return NULL;
 
        cnt = 0;
-       conf->array_size = 0;
+       conf->array_sectors = 0;
 
        rdev_for_each(rdev, tmp, mddev) {
                int j = rdev->raid_disk;
                        blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9);
 
                disk->size = rdev->size;
-               conf->array_size += rdev->size;
+               conf->array_sectors += rdev->size * 2;
 
                cnt++;
        }
                goto out;
        }
 
-       min_spacing = conf->array_size;
+       min_spacing = conf->array_sectors / 2;
        sector_div(min_spacing, PAGE_SIZE/sizeof(struct dev_info *));
 
        /* min_spacing is the minimum spacing that will fit the hash
         * that is larger than min_spacing as use the size of that as
         * the actual spacing
         */
-       conf->hash_spacing = conf->array_size;
+       conf->hash_spacing = conf->array_sectors / 2;
        for (i=0; i < cnt-1 ; i++) {
                sector_t sz = 0;
                int j;
                unsigned round;
                unsigned long base;
 
-               sz = conf->array_size >> conf->preshift;
+               sz = conf->array_sectors >> (conf->preshift + 1);
                sz += 1; /* force round-up */
                base = conf->hash_spacing >> conf->preshift;
                round = sector_div(sz, base);
        curr_offset = 0;
        i = 0;
        for (curr_offset = 0;
-            curr_offset < conf->array_size;
+            curr_offset < conf->array_sectors / 2;
             curr_offset += conf->hash_spacing) {
 
                while (i < raid_disks-1 &&
        if (!conf)
                return 1;
        mddev->private = conf;
-       mddev->array_sectors = conf->array_size * 2;
+       mddev->array_sectors = conf->array_sectors;
 
        blk_queue_merge_bvec(mddev->queue, linear_mergeable_bvec);
        mddev->queue->unplug_fn = linear_unplug;
        newconf->prev = mddev_to_conf(mddev);
        mddev->private = newconf;
        mddev->raid_disks++;
-       mddev->array_sectors = newconf->array_size * 2;
+       mddev->array_sectors = newconf->array_sectors;
        set_capacity(mddev->gendisk, mddev->array_sectors);
        return 0;
 }