[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[dm-devel] [PATCH] block: blk_phys_contig_segment() doesn't account for bounce pages



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 us ibm com)

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
 	 */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]