diff options
author | NeilBrown <neilb@suse.com> | 2015-09-24 01:47:47 -0400 |
---|---|---|
committer | NeilBrown <neilb@suse.com> | 2015-10-02 03:23:44 -0400 |
commit | 66eefe5de11db1e0d8f2edc3880d50e7c36a9d43 (patch) | |
tree | f387b71a4c0eeaf506fb1cba79e9d6b7413dbbd2 | |
parent | 36707bb2e7c6730d79d6cdc6d1475d3d7e94c518 (diff) |
md/raid0: apply base queue limits *before* disk_stack_limits
Calling e.g. blk_queue_max_hw_sectors() after calls to
disk_stack_limits() discards the settings determined by
disk_stack_limits().
So we need to make those calls first.
Fixes: 199dc6ed5179 ("md/raid0: update queue parameter in a safer location.")
Cc: stable@vger.kernel.org (v2.6.35+ - please apply with 199dc6ed5179).
Reported-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.com>
-rw-r--r-- | drivers/md/raid0.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c index 63e619b2f44e..f8e5db0cb5aa 100644 --- a/drivers/md/raid0.c +++ b/drivers/md/raid0.c | |||
@@ -376,12 +376,6 @@ static int raid0_run(struct mddev *mddev) | |||
376 | struct md_rdev *rdev; | 376 | struct md_rdev *rdev; |
377 | bool discard_supported = false; | 377 | bool discard_supported = false; |
378 | 378 | ||
379 | rdev_for_each(rdev, mddev) { | ||
380 | disk_stack_limits(mddev->gendisk, rdev->bdev, | ||
381 | rdev->data_offset << 9); | ||
382 | if (blk_queue_discard(bdev_get_queue(rdev->bdev))) | ||
383 | discard_supported = true; | ||
384 | } | ||
385 | blk_queue_max_hw_sectors(mddev->queue, mddev->chunk_sectors); | 379 | blk_queue_max_hw_sectors(mddev->queue, mddev->chunk_sectors); |
386 | blk_queue_max_write_same_sectors(mddev->queue, mddev->chunk_sectors); | 380 | blk_queue_max_write_same_sectors(mddev->queue, mddev->chunk_sectors); |
387 | blk_queue_max_discard_sectors(mddev->queue, mddev->chunk_sectors); | 381 | blk_queue_max_discard_sectors(mddev->queue, mddev->chunk_sectors); |
@@ -390,6 +384,12 @@ static int raid0_run(struct mddev *mddev) | |||
390 | blk_queue_io_opt(mddev->queue, | 384 | blk_queue_io_opt(mddev->queue, |
391 | (mddev->chunk_sectors << 9) * mddev->raid_disks); | 385 | (mddev->chunk_sectors << 9) * mddev->raid_disks); |
392 | 386 | ||
387 | rdev_for_each(rdev, mddev) { | ||
388 | disk_stack_limits(mddev->gendisk, rdev->bdev, | ||
389 | rdev->data_offset << 9); | ||
390 | if (blk_queue_discard(bdev_get_queue(rdev->bdev))) | ||
391 | discard_supported = true; | ||
392 | } | ||
393 | if (!discard_supported) | 393 | if (!discard_supported) |
394 | queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, mddev->queue); | 394 | queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, mddev->queue); |
395 | else | 395 | else |