md: centralize ->array_sectors modifications
Get personalities out of the business of directly modifying ->array_sectors. Lays groundwork to introduce policy on when ->array_sectors can be modified. Reviewed-by: Andre Noll <maan@systemlinux.org> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
Родитель
80c3a6ce4b
Коммит
1f403624bd
|
@ -312,7 +312,7 @@ static int run(mddev_t *mddev)
|
||||||
list_for_each_entry(rdev, &mddev->disks, same_set)
|
list_for_each_entry(rdev, &mddev->disks, same_set)
|
||||||
conf->rdev = rdev;
|
conf->rdev = rdev;
|
||||||
|
|
||||||
mddev->array_sectors = faulty_size(mddev, 0, 0);
|
md_set_array_sectors(mddev, faulty_size(mddev, 0, 0));
|
||||||
mddev->private = conf;
|
mddev->private = conf;
|
||||||
|
|
||||||
reconfig(mddev, mddev->layout, -1);
|
reconfig(mddev, mddev->layout, -1);
|
||||||
|
|
|
@ -263,7 +263,7 @@ static int linear_run (mddev_t *mddev)
|
||||||
if (!conf)
|
if (!conf)
|
||||||
return 1;
|
return 1;
|
||||||
mddev->private = conf;
|
mddev->private = conf;
|
||||||
mddev->array_sectors = linear_size(mddev, 0, 0);
|
md_set_array_sectors(mddev, linear_size(mddev, 0, 0));
|
||||||
|
|
||||||
blk_queue_merge_bvec(mddev->queue, linear_mergeable_bvec);
|
blk_queue_merge_bvec(mddev->queue, linear_mergeable_bvec);
|
||||||
mddev->queue->unplug_fn = linear_unplug;
|
mddev->queue->unplug_fn = linear_unplug;
|
||||||
|
@ -297,7 +297,7 @@ static int linear_add(mddev_t *mddev, mdk_rdev_t *rdev)
|
||||||
newconf->prev = mddev_to_conf(mddev);
|
newconf->prev = mddev_to_conf(mddev);
|
||||||
mddev->private = newconf;
|
mddev->private = newconf;
|
||||||
mddev->raid_disks++;
|
mddev->raid_disks++;
|
||||||
mddev->array_sectors = linear_size(mddev, 0, 0);
|
md_set_array_sectors(mddev, linear_size(mddev, 0, 0));
|
||||||
set_capacity(mddev->gendisk, mddev->array_sectors);
|
set_capacity(mddev->gendisk, mddev->array_sectors);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4977,6 +4977,12 @@ static int set_array_info(mddev_t * mddev, mdu_array_info_t *info)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void md_set_array_sectors(mddev_t *mddev, sector_t array_sectors)
|
||||||
|
{
|
||||||
|
mddev->array_sectors = array_sectors;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(md_set_array_sectors);
|
||||||
|
|
||||||
static int update_size(mddev_t *mddev, sector_t num_sectors)
|
static int update_size(mddev_t *mddev, sector_t num_sectors)
|
||||||
{
|
{
|
||||||
mdk_rdev_t *rdev;
|
mdk_rdev_t *rdev;
|
||||||
|
|
|
@ -430,3 +430,4 @@ extern void md_do_sync(mddev_t *mddev);
|
||||||
extern void md_new_event(mddev_t *mddev);
|
extern void md_new_event(mddev_t *mddev);
|
||||||
extern int md_allow_write(mddev_t *mddev);
|
extern int md_allow_write(mddev_t *mddev);
|
||||||
extern void md_wait_for_blocked_rdev(mdk_rdev_t *rdev, mddev_t *mddev);
|
extern void md_wait_for_blocked_rdev(mdk_rdev_t *rdev, mddev_t *mddev);
|
||||||
|
extern void md_set_array_sectors(mddev_t *mddev, sector_t array_sectors);
|
||||||
|
|
|
@ -510,7 +510,7 @@ static int multipath_run (mddev_t *mddev)
|
||||||
/*
|
/*
|
||||||
* Ok, everything is just fine now
|
* Ok, everything is just fine now
|
||||||
*/
|
*/
|
||||||
mddev->array_sectors = multipath_size(mddev, 0, 0);
|
md_set_array_sectors(mddev, multipath_size(mddev, 0, 0));
|
||||||
|
|
||||||
mddev->queue->unplug_fn = multipath_unplug;
|
mddev->queue->unplug_fn = multipath_unplug;
|
||||||
mddev->queue->backing_dev_info.congested_fn = multipath_congested;
|
mddev->queue->backing_dev_info.congested_fn = multipath_congested;
|
||||||
|
|
|
@ -306,7 +306,7 @@ static int raid0_run (mddev_t *mddev)
|
||||||
goto out_free_conf;
|
goto out_free_conf;
|
||||||
|
|
||||||
/* calculate array device size */
|
/* calculate array device size */
|
||||||
mddev->array_sectors = raid0_size(mddev, 0, 0);
|
md_set_array_sectors(mddev, raid0_size(mddev, 0, 0));
|
||||||
|
|
||||||
printk(KERN_INFO "raid0 : md_size is %llu sectors.\n",
|
printk(KERN_INFO "raid0 : md_size is %llu sectors.\n",
|
||||||
(unsigned long long)mddev->array_sectors);
|
(unsigned long long)mddev->array_sectors);
|
||||||
|
|
|
@ -2059,7 +2059,7 @@ static int run(mddev_t *mddev)
|
||||||
/*
|
/*
|
||||||
* Ok, everything is just fine now
|
* Ok, everything is just fine now
|
||||||
*/
|
*/
|
||||||
mddev->array_sectors = raid1_size(mddev, 0, 0);
|
md_set_array_sectors(mddev, raid1_size(mddev, 0, 0));
|
||||||
|
|
||||||
mddev->queue->unplug_fn = raid1_unplug;
|
mddev->queue->unplug_fn = raid1_unplug;
|
||||||
mddev->queue->backing_dev_info.congested_fn = raid1_congested;
|
mddev->queue->backing_dev_info.congested_fn = raid1_congested;
|
||||||
|
@ -2124,7 +2124,7 @@ static int raid1_resize(mddev_t *mddev, sector_t sectors)
|
||||||
* any io in the removed space completes, but it hardly seems
|
* any io in the removed space completes, but it hardly seems
|
||||||
* worth it.
|
* worth it.
|
||||||
*/
|
*/
|
||||||
mddev->array_sectors = raid1_size(mddev, sectors, 0);
|
md_set_array_sectors(mddev, raid1_size(mddev, sectors, 0));
|
||||||
set_capacity(mddev->gendisk, mddev->array_sectors);
|
set_capacity(mddev->gendisk, mddev->array_sectors);
|
||||||
mddev->changed = 1;
|
mddev->changed = 1;
|
||||||
if (mddev->array_sectors > mddev->dev_sectors &&
|
if (mddev->array_sectors > mddev->dev_sectors &&
|
||||||
|
|
|
@ -2193,7 +2193,7 @@ static int run(mddev_t *mddev)
|
||||||
/*
|
/*
|
||||||
* Ok, everything is just fine now
|
* Ok, everything is just fine now
|
||||||
*/
|
*/
|
||||||
mddev->array_sectors = raid10_size(mddev, 0, 0);
|
md_set_array_sectors(mddev, raid10_size(mddev, 0, 0));
|
||||||
mddev->resync_max_sectors = mddev->array_sectors;
|
mddev->resync_max_sectors = mddev->array_sectors;
|
||||||
|
|
||||||
mddev->queue->unplug_fn = raid10_unplug;
|
mddev->queue->unplug_fn = raid10_unplug;
|
||||||
|
|
|
@ -4474,7 +4474,7 @@ static int run(mddev_t *mddev)
|
||||||
mddev->queue->backing_dev_info.congested_data = mddev;
|
mddev->queue->backing_dev_info.congested_data = mddev;
|
||||||
mddev->queue->backing_dev_info.congested_fn = raid5_congested;
|
mddev->queue->backing_dev_info.congested_fn = raid5_congested;
|
||||||
|
|
||||||
mddev->array_sectors = raid5_size(mddev, 0, 0);
|
md_set_array_sectors(mddev, raid5_size(mddev, 0, 0));
|
||||||
|
|
||||||
blk_queue_merge_bvec(mddev->queue, raid5_mergeable_bvec);
|
blk_queue_merge_bvec(mddev->queue, raid5_mergeable_bvec);
|
||||||
|
|
||||||
|
@ -4698,7 +4698,8 @@ static int raid5_resize(mddev_t *mddev, sector_t sectors)
|
||||||
* worth it.
|
* worth it.
|
||||||
*/
|
*/
|
||||||
sectors &= ~((sector_t)mddev->chunk_size/512 - 1);
|
sectors &= ~((sector_t)mddev->chunk_size/512 - 1);
|
||||||
mddev->array_sectors = raid5_size(mddev, sectors, mddev->raid_disks);
|
md_set_array_sectors(mddev, raid5_size(mddev, sectors,
|
||||||
|
mddev->raid_disks));
|
||||||
set_capacity(mddev->gendisk, mddev->array_sectors);
|
set_capacity(mddev->gendisk, mddev->array_sectors);
|
||||||
mddev->changed = 1;
|
mddev->changed = 1;
|
||||||
if (sectors > mddev->dev_sectors && mddev->recovery_cp == MaxSector) {
|
if (sectors > mddev->dev_sectors && mddev->recovery_cp == MaxSector) {
|
||||||
|
@ -4836,7 +4837,8 @@ static void end_reshape(raid5_conf_t *conf)
|
||||||
if (!test_bit(MD_RECOVERY_INTR, &conf->mddev->recovery)) {
|
if (!test_bit(MD_RECOVERY_INTR, &conf->mddev->recovery)) {
|
||||||
mddev_t *mddev = conf->mddev;
|
mddev_t *mddev = conf->mddev;
|
||||||
|
|
||||||
mddev->array_sectors = raid5_size(mddev, 0, conf->raid_disks);
|
md_set_array_sectors(mddev, raid5_size(mddev, 0,
|
||||||
|
conf->raid_disks));
|
||||||
set_capacity(mddev->gendisk, mddev->array_sectors);
|
set_capacity(mddev->gendisk, mddev->array_sectors);
|
||||||
mddev->changed = 1;
|
mddev->changed = 1;
|
||||||
conf->previous_raid_disks = conf->raid_disks;
|
conf->previous_raid_disks = conf->raid_disks;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче