diff options
-rw-r--r-- | drivers/md/raid0.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c index 6e12a358f36..9074ea43d52 100644 --- a/drivers/md/raid0.c +++ b/drivers/md/raid0.c @@ -53,7 +53,7 @@ static int raid0_congested(void *data, int bits) static int create_strip_zones (mddev_t *mddev) { int i, c, j; - sector_t current_offset, curr_zone_offset; + sector_t current_start, curr_zone_start; sector_t min_spacing; raid0_conf_t *conf = mddev_to_conf(mddev); mdk_rdev_t *smallest, *rdev1, *rdev2, *rdev; @@ -157,8 +157,8 @@ static int create_strip_zones (mddev_t *mddev) zone->size = smallest->size * cnt; zone->zone_start = 0; - current_offset = smallest->size; - curr_zone_offset = zone->size; + current_start = smallest->size * 2; + curr_zone_start = zone->size * 2; /* now do the other zones */ for (i = 1; i < conf->nr_strip_zones; i++) @@ -167,7 +167,7 @@ static int create_strip_zones (mddev_t *mddev) zone->dev = conf->strip_zone[i-1].dev + mddev->raid_disks; printk("raid0: zone %d\n", i); - zone->dev_start = current_offset * 2; + zone->dev_start = current_start; smallest = NULL; c = 0; @@ -175,8 +175,7 @@ static int create_strip_zones (mddev_t *mddev) char b[BDEVNAME_SIZE]; rdev = conf->strip_zone[0].dev[j]; printk("raid0: checking %s ...", bdevname(rdev->bdev,b)); - if (rdev->size > current_offset) - { + if (rdev->size > current_start / 2) { printk(" contained as device %d\n", c); zone->dev[c] = rdev; c++; @@ -190,16 +189,16 @@ static int create_strip_zones (mddev_t *mddev) } zone->nb_dev = c; - zone->size = (smallest->size - current_offset) * c; + zone->size = (smallest->size - current_start / 2) * c; printk("raid0: zone->nb_dev: %d, size: %llu\n", zone->nb_dev, (unsigned long long)zone->size); - zone->zone_start = curr_zone_offset * 2; - curr_zone_offset += zone->size; + zone->zone_start = curr_zone_start; + curr_zone_start += zone->size * 2; - current_offset = smallest->size; - printk("raid0: current zone offset: %llu\n", - (unsigned long long)current_offset); + current_start = smallest->size * 2; + printk(KERN_INFO "raid0: current zone start: %llu\n", + (unsigned long long)current_start); } /* Now find appropriate hash spacing. @@ -210,8 +209,8 @@ static int create_strip_zones (mddev_t *mddev) * strip though as it's size has no bearing on the efficacy of the hash * table. */ - conf->hash_spacing = curr_zone_offset; - min_spacing = curr_zone_offset; + conf->hash_spacing = curr_zone_start / 2; + min_spacing = curr_zone_start / 2; sector_div(min_spacing, PAGE_SIZE/sizeof(struct strip_zone*)); for (i=0; i < conf->nr_strip_zones-1; i++) { sector_t sz = 0; |