blk_phys_contig_segment() doesn't account for bouce pages and a later recalculation that accounts for bounce pages, in blk_rq_check_limits() while dispatching the request, fails with "over max segments limit". Signed-off-by: Malahal Naineni (malahal@xxxxxxxxxx) diff -r 528f6f2c7e80 -r 5d97698a7bc5 block/blk-merge.c --- a/block/blk-merge.c Fri Aug 20 01:33:12 2010 -0700 +++ b/block/blk-merge.c Wed Aug 25 13:44:33 2010 -0700 @@ -101,6 +101,13 @@ static int blk_phys_contig_segment(struc return 0; /* + * A high page is never considered part of another segment, + * since that might change with the bounce page. + */ + if (page_to_pfn(__BVEC_END(bio)->bv_page) > queue_bounce_pfn(q) || + page_to_pfn(__BVEC_START(nxt)->bv_page) > queue_bounce_pfn(q)) + return 0; + /* * bio and nxt are contiguous in memory; check if the queue allows * these two to be merged into one */ -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel