aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/raid0.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/raid0.c')
-rw-r--r--drivers/md/raid0.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
index d3a4ce06015a..c3bec024612e 100644
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -20,6 +20,7 @@
20 20
21#include <linux/blkdev.h> 21#include <linux/blkdev.h>
22#include <linux/seq_file.h> 22#include <linux/seq_file.h>
23#include <linux/slab.h>
23#include "md.h" 24#include "md.h"
24#include "raid0.h" 25#include "raid0.h"
25 26
@@ -176,14 +177,15 @@ static int create_strip_zones(mddev_t *mddev)
176 disk_stack_limits(mddev->gendisk, rdev1->bdev, 177 disk_stack_limits(mddev->gendisk, rdev1->bdev,
177 rdev1->data_offset << 9); 178 rdev1->data_offset << 9);
178 /* as we don't honour merge_bvec_fn, we must never risk 179 /* as we don't honour merge_bvec_fn, we must never risk
179 * violating it, so limit ->max_sector to one PAGE, as 180 * violating it, so limit ->max_segments to 1, lying within
180 * a one page request is never in violation. 181 * a single page.
181 */ 182 */
182 183
183 if (rdev1->bdev->bd_disk->queue->merge_bvec_fn && 184 if (rdev1->bdev->bd_disk->queue->merge_bvec_fn) {
184 queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9)) 185 blk_queue_max_segments(mddev->queue, 1);
185 blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9); 186 blk_queue_segment_boundary(mddev->queue,
186 187 PAGE_CACHE_SIZE - 1);
188 }
187 if (!smallest || (rdev1->sectors < smallest->sectors)) 189 if (!smallest || (rdev1->sectors < smallest->sectors))
188 smallest = rdev1; 190 smallest = rdev1;
189 cnt++; 191 cnt++;
@@ -325,7 +327,7 @@ static int raid0_run(mddev_t *mddev)
325 } 327 }
326 if (md_check_no_bitmap(mddev)) 328 if (md_check_no_bitmap(mddev))
327 return -EINVAL; 329 return -EINVAL;
328 blk_queue_max_sectors(mddev->queue, mddev->chunk_sectors); 330 blk_queue_max_hw_sectors(mddev->queue, mddev->chunk_sectors);
329 mddev->queue->queue_lock = &mddev->queue->__queue_lock; 331 mddev->queue->queue_lock = &mddev->queue->__queue_lock;
330 332
331 ret = create_strip_zones(mddev); 333 ret = create_strip_zones(mddev);
@@ -453,7 +455,7 @@ static int raid0_make_request(struct request_queue *q, struct bio *bio)
453 int cpu; 455 int cpu;
454 456
455 if (unlikely(bio_rw_flagged(bio, BIO_RW_BARRIER))) { 457 if (unlikely(bio_rw_flagged(bio, BIO_RW_BARRIER))) {
456 bio_endio(bio, -EOPNOTSUPP); 458 md_barrier_request(mddev, bio);
457 return 0; 459 return 0;
458 } 460 }
459 461
@@ -567,6 +569,7 @@ static void raid0_exit (void)
567module_init(raid0_init); 569module_init(raid0_init);
568module_exit(raid0_exit); 570module_exit(raid0_exit);
569MODULE_LICENSE("GPL"); 571MODULE_LICENSE("GPL");
572MODULE_DESCRIPTION("RAID0 (striping) personality for MD");
570MODULE_ALIAS("md-personality-2"); /* RAID0 */ 573MODULE_ALIAS("md-personality-2"); /* RAID0 */
571MODULE_ALIAS("md-raid0"); 574MODULE_ALIAS("md-raid0");
572MODULE_ALIAS("md-level-0"); 575MODULE_ALIAS("md-level-0");