|
@@ -1151,8 +1151,8 @@ static int raid10_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
|
|
for ( ; mirror <= last ; mirror++)
|
|
for ( ; mirror <= last ; mirror++)
|
|
if ( !(p=conf->mirrors+mirror)->rdev) {
|
|
if ( !(p=conf->mirrors+mirror)->rdev) {
|
|
|
|
|
|
- blk_queue_stack_limits(mddev->queue,
|
|
|
|
- rdev->bdev->bd_disk->queue);
|
|
|
|
|
|
+ disk_stack_limits(mddev->gendisk, rdev->bdev,
|
|
|
|
+ rdev->data_offset << 9);
|
|
/* as we don't honour merge_bvec_fn, we must never risk
|
|
/* as we don't honour merge_bvec_fn, we must never risk
|
|
* violating it, so limit ->max_sector to one PAGE, as
|
|
* violating it, so limit ->max_sector to one PAGE, as
|
|
* a one page request is never in violation.
|
|
* a one page request is never in violation.
|
|
@@ -2044,7 +2044,7 @@ raid10_size(mddev_t *mddev, sector_t sectors, int raid_disks)
|
|
static int run(mddev_t *mddev)
|
|
static int run(mddev_t *mddev)
|
|
{
|
|
{
|
|
conf_t *conf;
|
|
conf_t *conf;
|
|
- int i, disk_idx;
|
|
|
|
|
|
+ int i, disk_idx, chunk_size;
|
|
mirror_info_t *disk;
|
|
mirror_info_t *disk;
|
|
mdk_rdev_t *rdev;
|
|
mdk_rdev_t *rdev;
|
|
int nc, fc, fo;
|
|
int nc, fc, fo;
|
|
@@ -2130,6 +2130,14 @@ static int run(mddev_t *mddev)
|
|
spin_lock_init(&conf->device_lock);
|
|
spin_lock_init(&conf->device_lock);
|
|
mddev->queue->queue_lock = &conf->device_lock;
|
|
mddev->queue->queue_lock = &conf->device_lock;
|
|
|
|
|
|
|
|
+ chunk_size = mddev->chunk_sectors << 9;
|
|
|
|
+ blk_queue_io_min(mddev->queue, chunk_size);
|
|
|
|
+ if (conf->raid_disks % conf->near_copies)
|
|
|
|
+ blk_queue_io_opt(mddev->queue, chunk_size * conf->raid_disks);
|
|
|
|
+ else
|
|
|
|
+ blk_queue_io_opt(mddev->queue, chunk_size *
|
|
|
|
+ (conf->raid_disks / conf->near_copies));
|
|
|
|
+
|
|
list_for_each_entry(rdev, &mddev->disks, same_set) {
|
|
list_for_each_entry(rdev, &mddev->disks, same_set) {
|
|
disk_idx = rdev->raid_disk;
|
|
disk_idx = rdev->raid_disk;
|
|
if (disk_idx >= mddev->raid_disks
|
|
if (disk_idx >= mddev->raid_disks
|
|
@@ -2138,9 +2146,8 @@ static int run(mddev_t *mddev)
|
|
disk = conf->mirrors + disk_idx;
|
|
disk = conf->mirrors + disk_idx;
|
|
|
|
|
|
disk->rdev = rdev;
|
|
disk->rdev = rdev;
|
|
-
|
|
|
|
- blk_queue_stack_limits(mddev->queue,
|
|
|
|
- rdev->bdev->bd_disk->queue);
|
|
|
|
|
|
+ disk_stack_limits(mddev->gendisk, rdev->bdev,
|
|
|
|
+ rdev->data_offset << 9);
|
|
/* as we don't honour merge_bvec_fn, we must never risk
|
|
/* as we don't honour merge_bvec_fn, we must never risk
|
|
* violating it, so limit ->max_sector to one PAGE, as
|
|
* violating it, so limit ->max_sector to one PAGE, as
|
|
* a one page request is never in violation.
|
|
* a one page request is never in violation.
|