diff -urN blk-18b/arch/i386/config.in blk-18b-1/arch/i386/config.in
--- blk-18b/arch/i386/config.in	Thu Nov 22 19:32:44 2001
+++ blk-18b-1/arch/i386/config.in	Thu Nov 22 19:32:58 2001
@@ -167,10 +167,8 @@
    define_bool CONFIG_X86_PAE y
 fi
 
-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-   if [ "$CONFIG_NOHIGHMEM" != "y"]; then
-      bool 'HIGHMEM I/O support (EXPERIMENTAL)' CONFIG_HIGHIO
-   fi
+if [ "$CONFIG_HIGHMEM" = "y" ]; then
+   bool 'HIGHMEM I/O support (EXPERIMENTAL)' CONFIG_HIGHIO
 fi
 
 bool 'Math emulation' CONFIG_MATH_EMULATION
diff -urN blk-18b/drivers/block/elevator.c blk-18b-1/drivers/block/elevator.c
--- blk-18b/drivers/block/elevator.c	Thu Nov 22 19:32:44 2001
+++ blk-18b-1/drivers/block/elevator.c	Thu Nov 22 19:32:58 2001
@@ -110,6 +110,7 @@
 			break;
 		} else if (__rq->sector - count == bh->b_rsector) {
 			ret = ELEVATOR_FRONT_MERGE;
+			__rq->elevator_sequence -= count;
 			*req = __rq;
 			break;
 		}
diff -urN blk-18b/drivers/block/ll_rw_blk.c blk-18b-1/drivers/block/ll_rw_blk.c
--- blk-18b/drivers/block/ll_rw_blk.c	Thu Nov 22 19:32:44 2001
+++ blk-18b-1/drivers/block/ll_rw_blk.c	Thu Nov 22 19:32:58 2001
@@ -1176,7 +1176,7 @@
 	 */
 	queue_nr_requests = 64;
 	if (total_ram > MB(32))
-		queue_nr_requests = 256;
+		queue_nr_requests = 128;
 
 	/*
 	 * Batch frees according to queue length
diff -urN blk-18b/include/linux/blkdev.h blk-18b-1/include/linux/blkdev.h
--- blk-18b/include/linux/blkdev.h	Thu Nov 22 19:32:44 2001
+++ blk-18b-1/include/linux/blkdev.h	Thu Nov 22 19:33:01 2001
@@ -142,7 +142,7 @@
 {
 	struct page *page = bh->b_page;
 
-	if (page - mem_map <= q->bounce_pfn)
+	if ((page - page->zone->zone_mem_map) + (page->zone->zone_start_paddr >> PAGE_SHIFT) < q->bounce_pfn)
 		return bh;
 
 	return create_bounce(rw, bh);
diff -urN blk-18b/include/linux/elevator.h blk-18b-1/include/linux/elevator.h
--- blk-18b/include/linux/elevator.h	Thu Feb 22 03:45:11 2001
+++ blk-18b-1/include/linux/elevator.h	Thu Nov 22 19:32:58 2001
@@ -93,8 +93,8 @@
 
 #define ELEVATOR_LINUS							\
 ((elevator_t) {								\
-	8192,				/* read passovers */		\
-	16384,				/* write passovers */		\
+	256,				/* read passovers */		\
+	512,				/* write passovers */		\
 									\
 	elevator_linus_merge,		/* elevator_merge_fn */		\
 	elevator_linus_merge_cleanup,	/* elevator_merge_cleanup_fn */	\