|
@@ -120,7 +120,7 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks)
|
|
|
return NULL;
|
|
|
|
|
|
cnt = 0;
|
|
|
- conf->array_size = 0;
|
|
|
+ conf->array_sectors = 0;
|
|
|
|
|
|
rdev_for_each(rdev, tmp, mddev) {
|
|
|
int j = rdev->raid_disk;
|
|
@@ -144,7 +144,7 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks)
|
|
|
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++;
|
|
|
}
|
|
@@ -153,7 +153,7 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks)
|
|
|
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
|
|
@@ -162,7 +162,7 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks)
|
|
|
* 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;
|
|
@@ -192,7 +192,7 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks)
|
|
|
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);
|
|
@@ -219,7 +219,7 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks)
|
|
|
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 &&
|
|
@@ -256,7 +256,7 @@ static int linear_run (mddev_t *mddev)
|
|
|
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;
|
|
@@ -290,7 +290,7 @@ static int linear_add(mddev_t *mddev, mdk_rdev_t *rdev)
|
|
|
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;
|
|
|
}
|