Loading drivers/md/linear.c +10 −10 Original line number Diff line number Diff line Loading @@ -112,7 +112,7 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks) dev_info_t **table; mdk_rdev_t *rdev; int i, nb_zone, cnt; sector_t min_spacing; sector_t min_sectors; sector_t curr_sector; struct list_head *tmp; Loading Loading @@ -155,23 +155,23 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks) goto out; } min_spacing = conf->array_sectors / 2; sector_div(min_spacing, PAGE_SIZE/sizeof(struct dev_info *)); min_sectors = conf->array_sectors; sector_div(min_sectors, PAGE_SIZE/sizeof(struct dev_info *)); /* min_spacing is the minimum spacing that will fit the hash /* min_sectors is the minimum spacing that will fit the hash * table in one PAGE. This may be much smaller than needed. * We find the smallest non-terminal set of consecutive devices * that is larger than min_spacing and use the size of that as * that is larger than min_sectors and use the size of that as * the actual spacing */ conf->hash_spacing = conf->array_sectors / 2; for (i=0; i < cnt-1 ; i++) { sector_t sz = 0; sector_t tmp = 0; int j; for (j = i; j < cnt - 1 && sz < min_spacing; j++) sz += conf->disks[j].num_sectors / 2; if (sz >= min_spacing && sz < conf->hash_spacing) conf->hash_spacing = sz; for (j = i; j < cnt - 1 && tmp < min_sectors; j++) tmp += conf->disks[j].num_sectors; if (tmp >= min_sectors && tmp < conf->hash_spacing * 2) conf->hash_spacing = tmp / 2; } /* hash_spacing may be too large for sector_div to work with, Loading Loading
drivers/md/linear.c +10 −10 Original line number Diff line number Diff line Loading @@ -112,7 +112,7 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks) dev_info_t **table; mdk_rdev_t *rdev; int i, nb_zone, cnt; sector_t min_spacing; sector_t min_sectors; sector_t curr_sector; struct list_head *tmp; Loading Loading @@ -155,23 +155,23 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks) goto out; } min_spacing = conf->array_sectors / 2; sector_div(min_spacing, PAGE_SIZE/sizeof(struct dev_info *)); min_sectors = conf->array_sectors; sector_div(min_sectors, PAGE_SIZE/sizeof(struct dev_info *)); /* min_spacing is the minimum spacing that will fit the hash /* min_sectors is the minimum spacing that will fit the hash * table in one PAGE. This may be much smaller than needed. * We find the smallest non-terminal set of consecutive devices * that is larger than min_spacing and use the size of that as * that is larger than min_sectors and use the size of that as * the actual spacing */ conf->hash_spacing = conf->array_sectors / 2; for (i=0; i < cnt-1 ; i++) { sector_t sz = 0; sector_t tmp = 0; int j; for (j = i; j < cnt - 1 && sz < min_spacing; j++) sz += conf->disks[j].num_sectors / 2; if (sz >= min_spacing && sz < conf->hash_spacing) conf->hash_spacing = sz; for (j = i; j < cnt - 1 && tmp < min_sectors; j++) tmp += conf->disks[j].num_sectors; if (tmp >= min_sectors && tmp < conf->hash_spacing * 2) conf->hash_spacing = tmp / 2; } /* hash_spacing may be too large for sector_div to work with, Loading