diff -Nrup linux-2.6.0-test6-uc0-develer/drivers/Makefile linux-2.6.x/drivers/Makefile
--- linux-2.6.0-test6-uc0-develer/drivers/Makefile	2003-09-28 02:50:41.000000000 +0200
+++ linux-2.6.x/drivers/Makefile	2003-09-29 01:05:48.000000000 +0200
@@ -17,7 +17,8 @@ obj-$(CONFIG_PNP)		+= pnp/
 obj-y				+= char/
 obj-y				+= serial/
 obj-$(CONFIG_PARPORT)		+= parport/
-obj-y				+= base/ block/ misc/ net/ media/
+obj-y				+= base/ misc/ net/ media/
+obj-$(CONFIG_BIO)		+= block/
 obj-$(CONFIG_NUBUS)		+= nubus/
 obj-$(CONFIG_ATM)		+= atm/
 obj-$(CONFIG_PPC_PMAC)		+= macintosh/
diff -Nrup linux-2.6.0-test6-uc0-develer/drivers/block/Makefile linux-2.6.x/drivers/block/Makefile
--- linux-2.6.0-test6-uc0-develer/drivers/block/Makefile	2003-09-28 02:50:48.000000000 +0200
+++ linux-2.6.x/drivers/block/Makefile	2003-09-29 01:05:07.000000000 +0200
@@ -13,7 +13,7 @@
 # kblockd threads
 #
 
-obj-y	:= elevator.o ll_rw_blk.o ioctl.o genhd.o scsi_ioctl.o
+obj-$(CONFIG_BIO) += elevator.o ll_rw_blk.o ioctl.o genhd.o scsi_ioctl.o
 
 obj-$(CONFIG_IOSCHED_NOOP)	+= noop-iosched.o
 obj-$(CONFIG_IOSCHED_AS)	+= as-iosched.o
diff -Nrup linux-2.6.0-test6-uc0-develer/fs/Makefile linux-2.6.x/fs/Makefile
--- linux-2.6.0-test6-uc0-develer/fs/Makefile	2003-09-28 02:50:29.000000000 +0200
+++ linux-2.6.x/fs/Makefile	2003-09-29 01:09:34.000000000 +0200
@@ -5,12 +5,14 @@
 # Rewritten to use lists instead of if-statements.
 # 
 
-obj-y :=	open.o read_write.o file_table.o buffer.o \
-		bio.o super.o block_dev.o char_dev.o stat.o exec.o pipe.o \
+obj-y :=	open.o read_write.o buffer.o file_table.o \
+		super.o char_dev.o stat.o exec.o pipe.o \
 		namei.o fcntl.o ioctl.o readdir.o select.o fifo.o locks.o \
 		dcache.o inode.o attr.o bad_inode.o file.o dnotify.o \
 		filesystems.o namespace.o seq_file.o xattr.o libfs.o \
-		fs-writeback.o mpage.o direct-io.o aio.o
+		fs-writeback.o aio.o
+
+obj-$(CONFIG_BIO)		+= bio.o block_dev.o mpage.o direct-io.o
 
 obj-$(CONFIG_EPOLL)		+= eventpoll.o
 obj-$(CONFIG_COMPAT)		+= compat.o
diff -Nrup linux-2.6.0-test6-uc0-develer/fs/buffer.c linux-2.6.x/fs/buffer.c
--- linux-2.6.0-test6-uc0-develer/fs/buffer.c	2003-09-28 02:50:29.000000000 +0200
+++ linux-2.6.x/fs/buffer.c	2003-09-29 03:01:25.000000000 +0200
@@ -35,6 +35,8 @@
 #include <linux/suspend.h>
 #include <linux/buffer_head.h>
 #include <linux/bio.h>
+#include <linux/pagemap.h>
+#include <linux/backing-dev.h>
 #include <linux/notifier.h>
 #include <linux/cpu.h>
 #include <asm/bitops.h>
@@ -1072,6 +1074,8 @@ no_grow:
 	goto try_again;
 }
 
+#ifdef CONFIG_BIO
+
 static inline void
 link_dev_buffers(struct page *page, struct buffer_head *head)
 {
@@ -1220,6 +1224,8 @@ __getblk_slow(struct block_device *bdev,
 	}
 }
 
+#endif /* CONFIG_BIO */
+
 /*
  * The relationship between dirty buffers and dirty pages:
  *
@@ -1395,6 +1401,8 @@ static void bh_lru_install(struct buffer
 		__brelse(evictee);
 }
 
+#ifdef CONFIG_BIO
+
 /*
  * Look up the bh in this cpu's LRU.  If it's there, move it to the head.
  */
@@ -1503,6 +1511,8 @@ __bread(struct block_device *bdev, secto
 }
 EXPORT_SYMBOL(__bread);
 
+#endif /* CONFIG_BIO */
+
 /*
  * invalidate_bh_lrus() is called rarely - at unmount.  Because it is only for
  * unmount it only needs to ensure that all buffers from the target device are
@@ -1557,6 +1567,8 @@ static inline void discard_buffer(struct
 	unlock_buffer(bh);
 }
 
+#ifdef CONFIG_BIO
+
 /**
  * try_to_release_page() - release old fs-specific metadata on a page
  *
@@ -1638,6 +1650,8 @@ out:
 }
 EXPORT_SYMBOL(block_invalidatepage);
 
+#endif /* CONFIG_BIO */
+
 /*
  * We attach and possibly dirty the buffers atomically wrt
  * __set_page_dirty_buffers() via private_lock.  try_to_free_buffers
@@ -1707,6 +1721,8 @@ void unmap_underlying_metadata(struct bl
 }
 EXPORT_SYMBOL(unmap_underlying_metadata);
 
+#ifdef CONFIG_BIO
+
 /*
  * NOTE! All mapped/uptodate combinations are valid:
  *
@@ -1902,6 +1918,8 @@ recover:
 	goto done;
 }
 
+#endif /* CONFIG_BIO */
+
 static int __block_prepare_write(struct inode *inode, struct page *page,
 		unsigned from, unsigned to, get_block_t *get_block)
 {
@@ -2507,6 +2525,8 @@ out:
 }
 EXPORT_SYMBOL(nobh_truncate_page);
 
+#ifdef CONFIG_BIO
+
 int block_truncate_page(struct address_space *mapping,
 			loff_t from, get_block_t *get_block)
 {
@@ -2889,6 +2909,8 @@ int block_sync_page(struct page *page)
 	return 0;
 }
 
+#endif /* CONFIG_BIO */
+
 /*
  * There are no bdflush tunables left.  But distributions are
  * still running obsolete flush daemons, so we terminate them here.
diff -Nrup linux-2.6.0-test6-uc0-develer/fs/dcache.c linux-2.6.x/fs/dcache.c
--- linux-2.6.0-test6-uc0-develer/fs/dcache.c	2003-09-28 02:50:09.000000000 +0200
+++ linux-2.6.x/fs/dcache.c	2003-09-29 03:40:43.000000000 +0200
@@ -1636,6 +1636,8 @@ void __init vfs_caches_init(unsigned lon
 	inode_init(mempages);
 	files_init(mempages); 
 	mnt_init(mempages);
+#ifdef CONFIG_BIO
 	bdev_cache_init();
+#endif
 	chrdev_init();
 }
diff -Nrup linux-2.6.0-test6-uc0-develer/fs/fs-writeback.c linux-2.6.x/fs/fs-writeback.c
--- linux-2.6.0-test6-uc0-develer/fs/fs-writeback.c	2003-09-28 02:51:21.000000000 +0200
+++ linux-2.6.x/fs/fs-writeback.c	2003-09-29 03:46:24.000000000 +0200
@@ -216,6 +216,7 @@ __writeback_single_inode(struct inode *i
 	__sync_single_inode(inode, wbc);
 }
 
+#ifdef CONFIG_BIO
 /*
  * Write out a superblock's list of dirty inodes.  A wait will be performed
  * upon no inodes, all inodes or the final one, depending upon sync_mode.
@@ -321,6 +322,7 @@ sync_sb_inodes(struct super_block *sb, s
 	}
 	return;		/* Leave any unwritten inodes on s_io */
 }
+#endif /* CONFIG_BIO */
 
 /*
  * Start writeback of dirty pagecache data against all unlocked inodes.
diff -Nrup linux-2.6.0-test6-uc0-develer/fs/partitions/Makefile linux-2.6.x/fs/partitions/Makefile
--- linux-2.6.0-test6-uc0-develer/fs/partitions/Makefile	2003-09-28 02:50:17.000000000 +0200
+++ linux-2.6.x/fs/partitions/Makefile	2003-09-29 03:43:16.000000000 +0200
@@ -2,7 +2,7 @@
 # Makefile for the linux kernel.
 #
 
-obj-y := check.o
+obj-$(CONFIG_BIO) += check.o
 
 obj-$(CONFIG_DEVFS_FS) += devfs.o
 obj-$(CONFIG_ACORN_PARTITION) += acorn.o
diff -Nrup linux-2.6.0-test6-uc0-develer/fs/partitions/check.c linux-2.6.x/fs/partitions/check.c
--- linux-2.6.0-test6-uc0-develer/fs/partitions/check.c	2003-09-28 02:51:00.000000000 +0200
+++ linux-2.6.x/fs/partitions/check.c	2003-09-29 03:41:58.000000000 +0200
@@ -129,6 +129,7 @@ char *disk_name(struct gendisk *hd, int 
 	return buf;
 }
 
+#ifdef CONFIG_BIO
 const char *bdevname(struct block_device *bdev, char *buf)
 {
 	int part = MINOR(bdev->bd_dev) - bdev->bd_disk->first_minor;
@@ -157,6 +158,7 @@ const char *__bdevname(dev_t dev, char *
 
 	return buffer;
 }
+#endif /* CONFIG_BIO */
 
 static struct parsed_partitions *
 check_partition(struct gendisk *hd, struct block_device *bdev)
@@ -413,6 +415,8 @@ int rescan_partitions(struct gendisk *di
 	return res;
 }
 
+#ifdef CONFIG_BIO
+
 unsigned char *read_dev_sector(struct block_device *bdev, sector_t n, Sector *p)
 {
 	struct address_space *mapping = bdev->bd_inode->i_mapping;
@@ -435,6 +439,8 @@ fail:
 	return NULL;
 }
 
+#endif /* CONFIG_BIO */
+
 void del_gendisk(struct gendisk *disk)
 {
 	int p;
diff -Nrup linux-2.6.0-test6-uc0-develer/fs/proc/proc_misc.c linux-2.6.x/fs/proc/proc_misc.c
--- linux-2.6.0-test6-uc0-develer/fs/proc/proc_misc.c	2003-09-28 02:50:09.000000000 +0200
+++ linux-2.6.x/fs/proc/proc_misc.c	2003-09-29 03:48:59.000000000 +0200
@@ -316,6 +316,7 @@ static struct file_operations proc_parti
 	.release	= seq_release,
 };
 
+#ifdef CONFIG_BIO
 extern struct seq_operations diskstats_op;
 static int diskstats_open(struct inode *inode, struct file *file)
 {
@@ -327,6 +328,7 @@ static struct file_operations proc_disks
 	.llseek		= seq_lseek,
 	.release	= seq_release,
 };
+#endif /* CONFIG_BIO */
 
 #ifdef CONFIG_MODULES
 extern struct seq_operations modules_op;
@@ -469,7 +471,9 @@ static int devices_read_proc(char *page,
 				 int count, int *eof, void *data)
 {
 	int len = get_chrdev_list(page);
+#ifdef CONFIG_BIO
 	len += get_blkdev_list(page+len);
+#endif
 	return proc_calc_metrics(page, start, off, count, eof, len);
 }
 
@@ -675,13 +679,17 @@ void __init proc_misc_init(void)
 	if (entry)
 		entry->proc_fops = &proc_kmsg_operations;
 	create_seq_entry("cpuinfo", 0, &proc_cpuinfo_operations);
+#ifdef CONFIG_BIO
 	create_seq_entry("partitions", 0, &proc_partitions_operations);
+#endif
 	create_seq_entry("stat", 0, &proc_stat_operations);
 	create_seq_entry("interrupts", 0, &proc_interrupts_operations);
 	create_seq_entry("slabinfo",S_IWUSR|S_IRUGO,&proc_slabinfo_operations);
 	create_seq_entry("buddyinfo",S_IRUGO, &fragmentation_file_operations);
 	create_seq_entry("vmstat",S_IRUGO, &proc_vmstat_file_operations);
+#ifdef CONFIG_BIO
 	create_seq_entry("diskstats", 0, &proc_diskstats_operations);
+#endif
 #ifdef CONFIG_MODULES
 	create_seq_entry("modules", 0, &proc_modules_operations);
 #endif
diff -Nrup linux-2.6.0-test6-uc0-develer/fs/super.c linux-2.6.x/fs/super.c
--- linux-2.6.0-test6-uc0-develer/fs/super.c	2003-09-28 02:50:18.000000000 +0200
+++ linux-2.6.x/fs/super.c	2003-09-29 01:51:14.000000000 +0200
@@ -452,9 +452,12 @@ static void mark_files_ro(struct super_b
 int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
 {
 	int retval;
-	
+
+#ifdef CONFIG_BIO
 	if (!(flags & MS_RDONLY) && bdev_read_only(sb->s_bdev))
 		return -EACCES;
+#endif /* CONFIG_BIO */
+
 	if (flags & MS_RDONLY)
 		acct_auto_close(sb);
 	shrink_dcache_sb(sb);
@@ -550,6 +553,8 @@ void kill_litter_super(struct super_bloc
 	kill_anon_super(sb);
 }
 
+#ifdef CONFIG_BIO
+
 static int set_bdev_super(struct super_block *s, void *data)
 {
 	s->s_bdev = data;
@@ -616,6 +621,8 @@ void kill_block_super(struct super_block
 	close_bdev_excl(bdev, BDEV_FS);
 }
 
+#endif /* CONFIG_BIO */
+
 struct super_block *get_sb_nodev(struct file_system_type *fs_type,
 	int flags, void *data,
 	int (*fill_super)(struct super_block *, void *, int))
diff -Nrup linux-2.6.0-test6-uc0-develer/include/linux/bio.h linux-2.6.x/include/linux/bio.h
--- linux-2.6.0-test6-uc0-develer/include/linux/bio.h	2003-09-28 02:50:39.000000000 +0200
+++ linux-2.6.x/include/linux/bio.h	2003-09-29 00:43:22.000000000 +0200
@@ -20,6 +20,8 @@
 #ifndef __LINUX_BIO_H
 #define __LINUX_BIO_H
 
+#ifdef CONFIG_BIO
+
 #include <linux/highmem.h>
 #include <linux/mempool.h>
 
@@ -296,4 +298,6 @@ extern inline char *__bio_kmap_irq(struc
 	__bio_kmap_irq((bio), (bio)->bi_idx, (flags))
 #define bio_kunmap_irq(buf,flags)	__bio_kunmap_irq(buf, flags)
 
+#endif /* CONFIG_BIO */
+
 #endif /* __LINUX_BIO_H */
diff -Nrup linux-2.6.0-test6-uc0-develer/include/linux/blkdev.h linux-2.6.x/include/linux/blkdev.h
--- linux-2.6.0-test6-uc0-develer/include/linux/blkdev.h	2003-09-28 02:50:11.000000000 +0200
+++ linux-2.6.x/include/linux/blkdev.h	2003-09-29 00:44:06.000000000 +0200
@@ -1,6 +1,8 @@
 #ifndef _LINUX_BLKDEV_H
 #define _LINUX_BLKDEV_H
 
+#ifdef CONFIG_BIO
+
 #include <linux/config.h>
 #include <linux/major.h>
 #include <linux/genhd.h>
@@ -680,5 +682,6 @@ void kblockd_flush(void);
 #define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \
 	MODULE_ALIAS("block-major-" __stringify(major) "-*")
 
+#endif /* CONFIG_BIO */
 
 #endif
diff -Nrup linux-2.6.0-test6-uc0-develer/include/linux/mpage.h linux-2.6.x/include/linux/mpage.h
--- linux-2.6.0-test6-uc0-develer/include/linux/mpage.h	2003-09-28 02:50:17.000000000 +0200
+++ linux-2.6.x/include/linux/mpage.h	2003-09-29 02:01:24.000000000 +0200
@@ -10,6 +10,8 @@
  * nested includes.  Get it right in the .c file).
  */
 
+#ifdef CONFIG_BIO
+
 struct writeback_control;
 
 int mpage_readpages(struct address_space *mapping, struct list_head *pages,
@@ -23,3 +25,5 @@ generic_writepages(struct address_space 
 {
 	return mpage_writepages(mapping, wbc, NULL);
 }
+
+#endif /* CONFIG_BIO */
diff -Nrup linux-2.6.0-test6-uc0-develer/kernel/exit.c linux-2.6.x/kernel/exit.c
--- linux-2.6.0-test6-uc0-develer/kernel/exit.c	2003-09-28 02:50:54.000000000 +0200
+++ linux-2.6.x/kernel/exit.c	2003-09-29 01:45:34.000000000 +0200
@@ -687,8 +687,10 @@ NORET_TYPE void do_exit(long code)
 		panic("Attempted to kill the idle task!");
 	if (unlikely(tsk->pid == 1))
 		panic("Attempted to kill init!");
+#ifdef CONFIG_BIO
 	if (tsk->io_context)
 		exit_io_context();
+#endif /* CONFIG_BIO */
 	tsk->flags |= PF_EXITING;
 	del_timer_sync(&tsk->real_timer);
 
diff -Nrup linux-2.6.0-test6-uc0-develer/mm/filemap.c linux-2.6.x/mm/filemap.c
--- linux-2.6.0-test6-uc0-develer/mm/filemap.c	2003-09-28 02:50:15.000000000 +0200
+++ linux-2.6.x/mm/filemap.c	2003-09-29 01:52:55.000000000 +0200
@@ -25,7 +25,7 @@
 #include <linux/hash.h>
 #include <linux/writeback.h>
 #include <linux/pagevec.h>
-#include <linux/blkdev.h>
+#include <linux/backing-dev.h>
 #include <linux/security.h>
 /*
  * This is needed for the following functions:
@@ -1625,8 +1625,10 @@ inline int generic_write_checks(struct i
 			*count = inode->i_sb->s_maxbytes - *pos;
 	} else {
 		loff_t isize;
+#ifdef CONFIG_BIO
 		if (bdev_read_only(inode->i_bdev))
 			return -EPERM;
+#endif /* CONFIG_BIO */
 		isize = i_size_read(inode);
 		if (*pos >= isize) {
 			if (*count || *pos > isize)
diff -Nrup linux-2.6.0-test6-uc0-develer/mm/mempool.c linux-2.6.x/mm/mempool.c
--- linux-2.6.0-test6-uc0-develer/mm/mempool.c	2003-09-28 02:50:30.000000000 +0200
+++ linux-2.6.x/mm/mempool.c	2003-09-29 01:55:38.000000000 +0200
@@ -216,6 +216,7 @@ repeat_alloc:
 			return element;
 	}
 
+#ifdef CONFIG_BIO
 	/*
 	 * Kick the VM at this point.
 	 */
@@ -241,6 +242,7 @@ repeat_alloc:
 	finish_wait(&pool->wait, &wait);
 
 	goto repeat_alloc;
+#endif CONFIG_BIO
 }
 EXPORT_SYMBOL(mempool_alloc);
 
diff -Nrup linux-2.6.0-test6-uc0-develer/mm/page-writeback.c linux-2.6.x/mm/page-writeback.c
--- linux-2.6.0-test6-uc0-develer/mm/page-writeback.c	2003-09-28 02:50:36.000000000 +0200
+++ linux-2.6.x/mm/page-writeback.c	2003-09-29 02:24:06.000000000 +0200
@@ -189,7 +189,9 @@ static void balance_dirty_pages(struct a
 			if (pages_written >= write_chunk)
 				break;		/* We've done our duty */
 		}
+#ifdef CONFIG_BIO
 		blk_congestion_wait(WRITE, HZ/10);
+#endif /* CONFIG_BIO */
 	}
 
 	if (nr_reclaimable + ps.nr_writeback <= dirty_thresh)
@@ -265,7 +267,11 @@ static void background_writeout(unsigned
 		if (wbc.nr_to_write > 0) {
 			/* Wrote less than expected */
 			if (wbc.encountered_congestion)
+#ifdef CONFIG_BIO
 				blk_congestion_wait(WRITE, HZ/10);
+#else
+				;
+#endif
 			else
 				break;
 		}
@@ -335,7 +341,11 @@ static void wb_kupdate(unsigned long arg
 		writeback_inodes(&wbc);
 		if (wbc.nr_to_write > 0) {
 			if (wbc.encountered_congestion)
+#ifdef CONFIG_BIO
 				blk_congestion_wait(WRITE, HZ/10);
+#else
+				;
+#endif
 			else
 				break;	/* All the old data is written */
 		}
@@ -442,7 +452,12 @@ int do_writepages(struct address_space *
 {
 	if (mapping->a_ops->writepages)
 		return mapping->a_ops->writepages(mapping, wbc);
+#ifdef CONFIG_BIO
 	return generic_writepages(mapping, wbc);
+#else
+	BUG();
+	return NULL;
+#endif
 }
 
 /**
diff -Nrup linux-2.6.0-test6-uc0-develer/mm/page_alloc.c linux-2.6.x/mm/page_alloc.c
--- linux-2.6.0-test6-uc0-develer/mm/page_alloc.c	2003-09-28 02:50:08.000000000 +0200
+++ linux-2.6.x/mm/page_alloc.c	2003-09-29 00:53:14.000000000 +0200
@@ -543,7 +543,6 @@ __alloc_pages(unsigned int gfp_mask, uns
 	struct task_struct *p = current;
 	int i;
 	int cold;
-	int do_retry;
 
 	might_sleep_if(wait);
 
@@ -607,7 +606,9 @@ __alloc_pages(unsigned int gfp_mask, uns
 
 	/* here we're in the low on memory slow path */
 
+#ifdef CONFIG_BIO
 rebalance:
+#endif
 	if ((p->flags & (PF_MEMALLOC | PF_MEMDIE)) && !in_interrupt()) {
 		/* go through the zonelist yet again, ignoring mins */
 		for (i = 0; zones[i] != NULL; i++) {
@@ -648,24 +649,28 @@ rebalance:
 		min += z->pages_low * sysctl_lower_zone_protection;
 	}
 
-	/*
-	 * Don't let big-order allocations loop unless the caller explicitly
-	 * requests that.  Wait for some write requests to complete then retry.
-	 *
-	 * In this implementation, __GFP_REPEAT means __GFP_NOFAIL, but that
-	 * may not be true in other implementations.
-	 */
-	do_retry = 0;
-	if (!(gfp_mask & __GFP_NORETRY)) {
-		if ((order <= 3) || (gfp_mask & __GFP_REPEAT))
-			do_retry = 1;
-		if (gfp_mask & __GFP_NOFAIL)
-			do_retry = 1;
-	}
-	if (do_retry) {
-		blk_congestion_wait(WRITE, HZ/50);
-		goto rebalance;
+#ifdef CONFIG_BIO
+	{
+		/*
+		 * Don't let big-order allocations loop unless the caller explicitly
+		 * requests that.  Wait for some write requests to complete then retry.
+		 *
+		 * In this implementation, __GFP_REPEAT means __GFP_NOFAIL, but that
+		 * may not be true in other implementations.
+		 */
+		bool do_retry = false;
+		if (!(gfp_mask & __GFP_NORETRY)) {
+			if ((order <= 3) || (gfp_mask & __GFP_REPEAT))
+				do_retry = true;
+			if (gfp_mask & __GFP_NOFAIL)
+				do_retry = true;
+		}
+		if (do_retry) {
+			blk_congestion_wait(WRITE, HZ/50);
+			goto rebalance;
+		}
 	}
+#endif /* CONFIG_BIO */
 
 nopage:
 	if (!(gfp_mask & __GFP_NOWARN)) {
@@ -906,7 +911,11 @@ void si_meminfo(struct sysinfo *val)
 	val->totalram = totalram_pages;
 	val->sharedram = 0;
 	val->freeram = nr_free_pages();
+#ifdef CONFIG_BIO
 	val->bufferram = nr_blockdev_pages();
+#else
+	val->bufferram = 0;
+#endif
 #ifdef CONFIG_HIGHMEM
 	val->totalhigh = totalhigh_pages;
 	val->freehigh = nr_free_highpages();
diff -Nrup linux-2.6.0-test6-uc0-develer/mm/readahead.c linux-2.6.x/mm/readahead.c
--- linux-2.6.0-test6-uc0-develer/mm/readahead.c	2003-09-28 02:50:08.000000000 +0200
+++ linux-2.6.x/mm/readahead.c	2003-09-29 00:54:21.000000000 +0200
@@ -11,6 +11,7 @@
 #include <linux/fs.h>
 #include <linux/mm.h>
 #include <linux/blkdev.h>
+#include <linux/pagemap.h>
 #include <linux/backing-dev.h>
 #include <linux/pagevec.h>
 
diff -Nrup linux-2.6.0-test6-uc0-develer/mm/swap.c linux-2.6.x/mm/swap.c
--- linux-2.6.0-test6-uc0-develer/mm/swap.c	2003-09-28 02:50:16.000000000 +0200
+++ linux-2.6.x/mm/swap.c	2003-09-29 03:02:30.000000000 +0200
@@ -308,6 +308,8 @@ void __pagevec_lru_add_active(struct pag
 	pagevec_reinit(pvec);
 }
 
+#ifdef CONFIG_BIO
+
 /*
  * Try to drop buffers from the pages in a pagevec
  */
@@ -325,6 +327,8 @@ void pagevec_strip(struct pagevec *pvec)
 	}
 }
 
+#endif /* CONFIG_BIO */
+
 /**
  * pagevec_lookup - gang pagecache lookup
  * @pvec:	Where the resulting pages are placed
diff -Nrup linux-2.6.0-test6-uc0-develer/mm/truncate.c linux-2.6.x/mm/truncate.c
--- linux-2.6.0-test6-uc0-develer/mm/truncate.c	2003-09-28 02:51:05.000000000 +0200
+++ linux-2.6.x/mm/truncate.c	2003-09-29 03:04:58.000000000 +0200
@@ -20,7 +20,11 @@ static int do_invalidatepage(struct page
 	int (*invalidatepage)(struct page *, unsigned long);
 	invalidatepage = page->mapping->a_ops->invalidatepage;
 	if (invalidatepage == NULL)
+#ifdef CONFIG_BIO
 		invalidatepage = block_invalidatepage;
+#else
+		BUG();
+#endif
 	return (*invalidatepage)(page, offset);
 }
 
diff -Nrup linux-2.6.0-test6-uc0-develer/mm/vmscan.c linux-2.6.x/mm/vmscan.c
--- linux-2.6.0-test6-uc0-develer/mm/vmscan.c	2003-09-28 02:50:09.000000000 +0200
+++ linux-2.6.x/mm/vmscan.c	2003-09-29 02:45:41.000000000 +0200
@@ -878,6 +878,8 @@ int try_to_free_pages(struct zone *cz,
 		}
 		if (!(gfp_mask & __GFP_FS))
 			break;		/* Let the caller handle it */
+
+#ifdef CONFIG_BIO
 		/*
 		 * Try to write back as many pages as we just scanned.  Not
 		 * sure if that makes sense, but it's an attempt to avoid
@@ -887,6 +889,8 @@ int try_to_free_pages(struct zone *cz,
 
 		/* Take a nap, wait for some writeback to complete */
 		blk_congestion_wait(WRITE, HZ/10);
+#endif /* CONFIG_BIO */
+
 		if (cz - cz->zone_pgdat->node_zones < ZONE_HIGHMEM) {
 			shrink_slab(total_scanned, gfp_mask);
 			if (reclaim_state) {
@@ -976,8 +980,10 @@ static int balance_pgdat(pg_data_t *pgda
 		}
 		if (all_zones_ok)
 			break;
+#ifdef CONFIG_BIO
 		if (to_free > 0)
 			blk_congestion_wait(WRITE, HZ/10);
+#endif /* CONFIG_BIO */
 	}
 
 	for (i = 0; i < pgdat->nr_zones; i++) {
