···172172 disk_stack_limits(mddev->gendisk, rdev->bdev,173173 rdev->data_offset << 9);174174 /* as we don't honour merge_bvec_fn, we must never risk175175- * violating it, so limit ->max_sector to one PAGE, as176176- * a one page request is never in violation.175175+ * violating it, so limit max_segments to 1 lying within176176+ * a single page.177177 */178178- if (rdev->bdev->bd_disk->queue->merge_bvec_fn &&179179- queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9))180180- blk_queue_max_hw_sectors(mddev->queue, PAGE_SIZE>>9);178178+ if (rdev->bdev->bd_disk->queue->merge_bvec_fn) {179179+ blk_queue_max_segments(mddev->queue, 1);180180+ blk_queue_segment_boundary(mddev->queue,181181+ PAGE_CACHE_SIZE - 1);182182+ }181183182184 conf->array_sectors += rdev->sectors;183185 cnt++;
+12-8
drivers/md/multipath.c
···301301 rdev->data_offset << 9);302302303303 /* as we don't honour merge_bvec_fn, we must never risk304304- * violating it, so limit ->max_sector to one PAGE, as305305- * a one page request is never in violation.304304+ * violating it, so limit ->max_segments to one, lying305305+ * within a single page.306306 * (Note: it is very unlikely that a device with307307 * merge_bvec_fn will be involved in multipath.)308308 */309309- if (q->merge_bvec_fn &&310310- queue_max_sectors(q) > (PAGE_SIZE>>9))311311- blk_queue_max_hw_sectors(mddev->queue, PAGE_SIZE>>9);309309+ if (q->merge_bvec_fn) {310310+ blk_queue_max_segments(mddev->queue, 1);311311+ blk_queue_segment_boundary(mddev->queue,312312+ PAGE_CACHE_SIZE - 1);313313+ }312314313315 conf->working_disks++;314316 mddev->degraded--;···478476 /* as we don't honour merge_bvec_fn, we must never risk479477 * violating it, not that we ever expect a device with480478 * a merge_bvec_fn to be involved in multipath */481481- if (rdev->bdev->bd_disk->queue->merge_bvec_fn &&482482- queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9))483483- blk_queue_max_hw_sectors(mddev->queue, PAGE_SIZE>>9);479479+ if (rdev->bdev->bd_disk->queue->merge_bvec_fn) {480480+ blk_queue_max_segments(mddev->queue, 1);481481+ blk_queue_segment_boundary(mddev->queue,482482+ PAGE_CACHE_SIZE - 1);483483+ }484484485485 if (!test_bit(Faulty, &rdev->flags))486486 conf->working_disks++;
+7-6
drivers/md/raid0.c
···176176 disk_stack_limits(mddev->gendisk, rdev1->bdev,177177 rdev1->data_offset << 9);178178 /* as we don't honour merge_bvec_fn, we must never risk179179- * violating it, so limit ->max_sector to one PAGE, as180180- * a one page request is never in violation.179179+ * violating it, so limit ->max_segments to 1, lying within180180+ * a single page.181181 */182182183183- if (rdev1->bdev->bd_disk->queue->merge_bvec_fn &&184184- queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9))185185- blk_queue_max_hw_sectors(mddev->queue, PAGE_SIZE>>9);186186-183183+ if (rdev1->bdev->bd_disk->queue->merge_bvec_fn) {184184+ blk_queue_max_segments(mddev->queue, 1);185185+ blk_queue_segment_boundary(mddev->queue,186186+ PAGE_CACHE_SIZE - 1);187187+ }187188 if (!smallest || (rdev1->sectors < smallest->sectors))188189 smallest = rdev1;189190 cnt++;
+17-11
drivers/md/raid1.c
···1152115211531153 disk_stack_limits(mddev->gendisk, rdev->bdev,11541154 rdev->data_offset << 9);11551155- /* as we don't honour merge_bvec_fn, we must never risk11561156- * violating it, so limit ->max_sector to one PAGE, as11571157- * a one page request is never in violation.11551155+ /* as we don't honour merge_bvec_fn, we must11561156+ * never risk violating it, so limit11571157+ * ->max_segments to one lying with a single11581158+ * page, as a one page request is never in11591159+ * violation.11581160 */11591159- if (rdev->bdev->bd_disk->queue->merge_bvec_fn &&11601160- queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9))11611161- blk_queue_max_hw_sectors(mddev->queue, PAGE_SIZE>>9);11611161+ if (rdev->bdev->bd_disk->queue->merge_bvec_fn) {11621162+ blk_queue_max_segments(mddev->queue, 1);11631163+ blk_queue_segment_boundary(mddev->queue,11641164+ PAGE_CACHE_SIZE - 1);11651165+ }1162116611631167 p->head_position = 0;11641168 rdev->raid_disk = mirror;···21022098 disk_stack_limits(mddev->gendisk, rdev->bdev,21032099 rdev->data_offset << 9);21042100 /* as we don't honour merge_bvec_fn, we must never risk21052105- * violating it, so limit ->max_sector to one PAGE, as21062106- * a one page request is never in violation.21012101+ * violating it, so limit ->max_segments to 1 lying within21022102+ * a single page, as a one page request is never in violation.21072103 */21082108- if (rdev->bdev->bd_disk->queue->merge_bvec_fn &&21092109- queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9))21102110- blk_queue_max_hw_sectors(mddev->queue, PAGE_SIZE>>9);21042104+ if (rdev->bdev->bd_disk->queue->merge_bvec_fn) {21052105+ blk_queue_max_segments(mddev->queue, 1);21062106+ blk_queue_segment_boundary(mddev->queue,21072107+ PAGE_CACHE_SIZE - 1);21082108+ }21112109 }2112211021132111 mddev->degraded = 0;
+17-11
drivers/md/raid10.c
···1155115511561156 disk_stack_limits(mddev->gendisk, rdev->bdev,11571157 rdev->data_offset << 9);11581158- /* as we don't honour merge_bvec_fn, we must never risk11591159- * violating it, so limit ->max_sector to one PAGE, as11601160- * a one page request is never in violation.11581158+ /* as we don't honour merge_bvec_fn, we must11591159+ * never risk violating it, so limit11601160+ * ->max_segments to one lying with a single11611161+ * page, as a one page request is never in11621162+ * violation.11611163 */11621162- if (rdev->bdev->bd_disk->queue->merge_bvec_fn &&11631163- queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9))11641164- blk_queue_max_hw_sectors(mddev->queue, PAGE_SIZE>>9);11641164+ if (rdev->bdev->bd_disk->queue->merge_bvec_fn) {11651165+ blk_queue_max_segments(mddev->queue, 1);11661166+ blk_queue_segment_boundary(mddev->queue,11671167+ PAGE_CACHE_SIZE - 1);11681168+ }1165116911661170 p->head_position = 0;11671171 rdev->raid_disk = mirror;···22592255 disk_stack_limits(mddev->gendisk, rdev->bdev,22602256 rdev->data_offset << 9);22612257 /* as we don't honour merge_bvec_fn, we must never risk22622262- * violating it, so limit ->max_sector to one PAGE, as22632263- * a one page request is never in violation.22582258+ * violating it, so limit max_segments to 1 lying22592259+ * within a single page.22642260 */22652265- if (rdev->bdev->bd_disk->queue->merge_bvec_fn &&22662266- queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9))22672267- blk_queue_max_hw_sectors(mddev->queue, PAGE_SIZE>>9);22612261+ if (rdev->bdev->bd_disk->queue->merge_bvec_fn) {22622262+ blk_queue_max_segments(mddev->queue, 1);22632263+ blk_queue_segment_boundary(mddev->queue,22642264+ PAGE_CACHE_SIZE - 1);22652265+ }2268226622692267 disk->head_position = 0;22702268 }