diff -ur /md0/kernels/2.4/v2.4.5-ac9/drivers/block/floppy.c lb-2.4.5-ac9/drivers/block/floppy.c
--- /md0/kernels/2.4/v2.4.5-ac9/drivers/block/floppy.c	Mon Feb 26 10:20:05 2001
+++ lb-2.4.5-ac9/drivers/block/floppy.c	Sat Jun 30 02:38:01 2001
@@ -468,7 +468,7 @@
  */
 static struct floppy_struct user_params[N_DRIVE];
 
-static int floppy_sizes[256];
+static blkoff_t floppy_sizes[256];
 static int floppy_blocksizes[256];
 
 /*
diff -ur /md0/kernels/2.4/v2.4.5-ac9/drivers/block/ll_rw_blk.c lb-2.4.5-ac9/drivers/block/ll_rw_blk.c
--- /md0/kernels/2.4/v2.4.5-ac9/drivers/block/ll_rw_blk.c	Wed Jun 13 16:54:30 2001
+++ lb-2.4.5-ac9/drivers/block/ll_rw_blk.c	Sat Jun 30 03:00:15 2001
@@ -82,7 +82,7 @@
  *
  * if (!blk_size[MAJOR]) then no minor size checking is done.
  */
-int * blk_size[MAX_BLKDEV];
+blkoff_t *blk_size[MAX_BLKDEV];
 
 /*
  * blksize_size contains the size of all block-devices:
@@ -673,7 +673,8 @@
 static int __make_request(request_queue_t * q, int rw,
 				  struct buffer_head * bh)
 {
-	unsigned int sector, count;
+	blkoff_t sector;
+	unsigned count;
 	int max_segments = MAX_SEGMENTS;
 	struct request * req, *freereq = NULL;
 	int rw_ahead, max_sectors, el_ret;
@@ -871,8 +872,8 @@
 		BUG();
 
 	if (blk_size[major]) {
-		unsigned long maxsector = (blk_size[major][MINOR(bh->b_rdev)] << 1) + 1;
-		unsigned long sector = bh->b_rsector;
+		blkoff_t maxsector = (blk_size[major][MINOR(bh->b_rdev)] << 1) + 1;
+		blkoff_t sector = bh->b_rsector;
 		unsigned int count = bh->b_size >> 9;
 
 		if (maxsector < count || maxsector - count < sector) {
@@ -884,7 +885,7 @@
 				   when mounting a device. */
 				printk(KERN_INFO
 				       "attempt to access beyond end of device\n");
-				printk(KERN_INFO "%s: rw=%d, want=%ld, limit=%d\n",
+				printk(KERN_INFO "%s: rw=%d, want=%" BLKOFF_FMT ", limit=%" BLKOFF_FMT "\n",
 				       kdevname(bh->b_rdev), rw,
 				       (sector + count)>>1,
 				       blk_size[major][MINOR(bh->b_rdev)]);
@@ -906,8 +907,8 @@
 		q = blk_get_queue(bh->b_rdev);
 		if (!q) {
 			printk(KERN_ERR
-			       "generic_make_request: Trying to access nonexistent block-device %s (%ld)\n",
-			       kdevname(bh->b_rdev), bh->b_rsector);
+			       "generic_make_request: Trying to access nonexistent block-device %s\n",
+			       kdevname(bh->b_rdev));
 			buffer_IO_error(bh);
 			break;
 		}
diff -ur /md0/kernels/2.4/v2.4.5-ac9/drivers/block/loop.c lb-2.4.5-ac9/drivers/block/loop.c
--- /md0/kernels/2.4/v2.4.5-ac9/drivers/block/loop.c	Thu May  3 11:22:10 2001
+++ lb-2.4.5-ac9/drivers/block/loop.c	Sat Jun 30 02:35:42 2001
@@ -76,7 +76,7 @@
 
 static int max_loop = 8;
 static struct loop_device *loop_dev;
-static int *loop_sizes;
+static blkoff_t *loop_sizes;
 static int *loop_blksizes;
 static devfs_handle_t devfs_handle;      /*  For the directory */
 
@@ -983,7 +983,7 @@
 	if (!loop_dev)
 		return -ENOMEM;
 
-	loop_sizes = kmalloc(max_loop * sizeof(int), GFP_KERNEL);
+	loop_sizes = kmalloc(max_loop * sizeof(blkoff_t), GFP_KERNEL);
 	if (!loop_sizes)
 		goto out_sizes;
 
@@ -1003,7 +1003,7 @@
 		spin_lock_init(&lo->lo_lock);
 	}
 
-	memset(loop_sizes, 0, max_loop * sizeof(int));
+	memset(loop_sizes, 0, max_loop * sizeof(blkoff_t));
 	memset(loop_blksizes, 0, max_loop * sizeof(int));
 	blk_size[MAJOR_NR] = loop_sizes;
 	blksize_size[MAJOR_NR] = loop_blksizes;
diff -ur /md0/kernels/2.4/v2.4.5-ac9/drivers/block/nbd.c lb-2.4.5-ac9/drivers/block/nbd.c
--- /md0/kernels/2.4/v2.4.5-ac9/drivers/block/nbd.c	Fri May 25 22:48:09 2001
+++ lb-2.4.5-ac9/drivers/block/nbd.c	Sat Jun 30 02:55:29 2001
@@ -56,7 +56,7 @@
 
 static int nbd_blksizes[MAX_NBD];
 static int nbd_blksize_bits[MAX_NBD];
-static int nbd_sizes[MAX_NBD];
+static blkoff_t nbd_sizes[MAX_NBD];
 static u64 nbd_bytesizes[MAX_NBD];
 
 static struct nbd_device nbd_dev[MAX_NBD];
diff -ur /md0/kernels/2.4/v2.4.5-ac9/drivers/md/lvm.c lb-2.4.5-ac9/drivers/md/lvm.c
--- /md0/kernels/2.4/v2.4.5-ac9/drivers/md/lvm.c	Wed Jun 13 16:54:31 2001
+++ lb-2.4.5-ac9/drivers/md/lvm.c	Sat Jun 30 01:00:26 2001
@@ -1033,7 +1033,7 @@
 static int lvm_user_bmap(struct inode *inode, struct lv_bmap *user_result)
 {
 	struct buffer_head bh;
-	unsigned long block;
+	blkoff_t block;
 	int err;
 
 	if (get_user(block, &user_result->lv_block))
@@ -1070,7 +1070,7 @@
 	ulong index;
 	ulong pe_start;
 	ulong size = bh->b_size >> 9;
-	ulong rsector_org = bh->b_blocknr * size;
+	blkoff_t rsector_org = bh->b_blocknr * size;
 	ulong rsector_map;
 	kdev_t rdev_map;
 	vg_t *vg_this = vg[VG_BLK(minor)];
diff -ur /md0/kernels/2.4/v2.4.5-ac9/drivers/md/md.c lb-2.4.5-ac9/drivers/md/md.c
--- /md0/kernels/2.4/v2.4.5-ac9/drivers/md/md.c	Wed Jun 13 16:54:31 2001
+++ lb-2.4.5-ac9/drivers/md/md.c	Sat Jun 30 03:00:34 2001
@@ -112,7 +112,7 @@
 static int md_maxreadahead[MAX_MD_DEVS];
 static mdk_thread_t *md_recovery_thread;
 
-int md_size[MAX_MD_DEVS];
+blkoff_t md_size[MAX_MD_DEVS];
 
 extern struct block_device_operations md_fops;
 static devfs_handle_t devfs_handle;
@@ -3055,7 +3055,8 @@
 static int md_status_read_proc(char *page, char **start, off_t off,
 			int count, int *eof, void *data)
 {
-	int sz = 0, j, size;
+	blkoff_t size;
+	int sz = 0, j;
 	struct md_list_head *tmp, *tmp2;
 	mdk_rdev_t *rdev;
 	mddev_t *mddev;
@@ -3096,10 +3097,10 @@
 
 		if (mddev->nb_dev) {
 			if (mddev->pers)
-				sz += sprintf(page + sz, "\n      %d blocks",
+				sz += sprintf(page + sz, "\n      %" BLKOFF_FMT " blocks",
 						 md_size[mdidx(mddev)]);
 			else
-				sz += sprintf(page + sz, "\n      %d blocks", size);
+				sz += sprintf(page + sz, "\n      %" BLKOFF_FMT " blocks", size);
 		}
 
 		if (!mddev->pers) {
@@ -3230,8 +3231,9 @@
 int md_do_sync(mddev_t *mddev, mdp_disk_t *spare)
 {
 	mddev_t *mddev2;
-	unsigned int max_sectors, currspeed,
-		j, window, err, serialize;
+	blkoff_t max_sectors, j;
+	unsigned int currspeed,
+		window, err, serialize;
 	kdev_t read_disk = mddev_to_kdev(mddev);
 	unsigned long mark[SYNC_MARKS];
 	unsigned long mark_cnt[SYNC_MARKS];	
@@ -3292,7 +3294,7 @@
 	 * Tune reconstruction:
 	 */
 	window = MAX_READAHEAD*(PAGE_SIZE/512);
-	printk(KERN_INFO "md: using %dk window, over a total of %d blocks.\n",window/2,max_sectors/2);
+	printk(KERN_INFO "md: using %dk window, over a total of %" BLKOFF_FMT " blocks.\n",window/2,max_sectors/2);
 
 	atomic_set(&mddev->recovery_active, 0);
 	init_waitqueue_head(&mddev->recovery_wait);
@@ -3310,6 +3312,7 @@
 		j += sectors;
 		mddev->curr_resync = j;
 
+		/* README: Uhhh, is this right?  last_check is always 0 here */
 		if (last_check + window > j)
 			continue;
 		
diff -ur /md0/kernels/2.4/v2.4.5-ac9/drivers/md/raid0.c lb-2.4.5-ac9/drivers/md/raid0.c
--- /md0/kernels/2.4/v2.4.5-ac9/drivers/md/raid0.c	Mon Dec 11 16:19:35 2000
+++ lb-2.4.5-ac9/drivers/md/raid0.c	Sat Jun 30 03:01:00 2001
@@ -138,8 +138,8 @@
 	if (create_strip_zones (mddev)) 
 		goto out_free_conf;
 
-	printk("raid0 : md_size is %d blocks.\n", md_size[mdidx(mddev)]);
-	printk("raid0 : conf->smallest->size is %ld blocks.\n", conf->smallest->size);
+	printk("raid0 : md_size is %" BLKOFF_FMT " blocks.\n", md_size[mdidx(mddev)]);
+	printk("raid0 : conf->smallest->size is %" BLKOFF_FMT " blocks.\n", conf->smallest->size);
 	nb_zone = md_size[mdidx(mddev)]/conf->smallest->size +
 			(md_size[mdidx(mddev)] % conf->smallest->size ? 1 : 0);
 	printk("raid0 : nb_zone is %ld.\n", nb_zone);
diff -ur /md0/kernels/2.4/v2.4.5-ac9/drivers/md/raid1.c lb-2.4.5-ac9/drivers/md/raid1.c
--- /md0/kernels/2.4/v2.4.5-ac9/drivers/md/raid1.c	Fri May 25 22:48:09 2001
+++ lb-2.4.5-ac9/drivers/md/raid1.c	Sat Jun 30 02:30:32 2001
@@ -336,7 +336,7 @@
 }
 
 
-static void inline io_request_done(unsigned long sector, raid1_conf_t *conf, int phase)
+static void inline io_request_done(blkoff_t sector, raid1_conf_t *conf, int phase)
 {
 	unsigned long flags;
 	spin_lock_irqsave(&conf->segment_lock, flags);
@@ -451,10 +451,10 @@
 {
 	int new_disk = conf->last_used;
 	const int sectors = bh->b_size >> 9;
-	const unsigned long this_sector = bh->b_rsector;
+	const blkoff_t this_sector = bh->b_rsector;
 	int disk = new_disk;
-	unsigned long new_distance;
-	unsigned long current_distance;
+	blkoff_t new_distance;
+	blkoff_t current_distance;
 	
 	/*
 	 * Check if it is sane at all to balance
@@ -511,9 +511,9 @@
 
 		goto rb_out;
 	}
-	
-	current_distance = abs(this_sector -
-				conf->mirrors[disk].head_position);
+	current_distance = (this_sector > conf->mirrors[disk].head_position) ?
+			this_sector - conf->mirrors[disk].head_position :
+			conf->mirrors[disk].head_position - this_sector;
 	
 	/* Find the disk which is closest */
 	
@@ -526,8 +526,9 @@
 				(!conf->mirrors[disk].operational))
 			continue;
 		
-		new_distance = abs(this_sector -
-					conf->mirrors[disk].head_position);
+		new_distance = (this_sector > conf->mirrors[disk].head_position) ?
+			this_sector - conf->mirrors[disk].head_position :
+			conf->mirrors[disk].head_position - this_sector;
 		
 		if (new_distance < current_distance) {
 			conf->sect_count = 0;
@@ -1305,7 +1306,7 @@
  * issue suitable write requests
  */
 
-static int raid1_sync_request (mddev_t *mddev, unsigned long sector_nr)
+static int raid1_sync_request (mddev_t *mddev, blkoff_t sector_nr)
 {
 	raid1_conf_t *conf = mddev_to_conf(mddev);
 	struct mirror_info *mirror;
diff -ur /md0/kernels/2.4/v2.4.5-ac9/drivers/md/raid5.c lb-2.4.5-ac9/drivers/md/raid5.c
--- /md0/kernels/2.4/v2.4.5-ac9/drivers/md/raid5.c	Fri May 25 22:48:09 2001
+++ lb-2.4.5-ac9/drivers/md/raid5.c	Sat Jun 30 01:24:39 2001
@@ -453,7 +453,7 @@
 {
 	raid5_conf_t *conf = sh->raid_conf;
 	struct buffer_head *bh = sh->bh_cache[i];
-	unsigned long block = sh->sector / (sh->size >> 9);
+	blkoff_t block = sh->sector / (sh->size >> 9);
 
 	init_buffer(bh, raid5_end_read_request, sh);
 	bh->b_dev       = conf->disks[i].dev;
@@ -528,7 +528,7 @@
  * Input: a 'big' sector number,
  * Output: index of the data and parity disk, and the sector # in them.
  */
-static unsigned long raid5_compute_sector(unsigned long r_sector, unsigned int raid_disks,
+static unsigned long raid5_compute_sector(blkoff_t r_sector, unsigned int raid_disks,
 			unsigned int data_disks, unsigned int * dd_idx,
 			unsigned int * pd_idx, raid5_conf_t *conf)
 {
@@ -596,12 +596,12 @@
 {
 	raid5_conf_t *conf = sh->raid_conf;
 	int raid_disks = conf->raid_disks, data_disks = raid_disks - 1;
-	unsigned long new_sector = sh->sector, check;
+	blkoff_t new_sector = sh->sector, check;
 	int sectors_per_chunk = conf->chunk_size >> 9;
-	unsigned long stripe = new_sector / sectors_per_chunk;
+	blkoff_t stripe = new_sector / sectors_per_chunk;
 	int chunk_offset = new_sector % sectors_per_chunk;
 	int chunk_number, dummy1, dummy2, dd_idx = i;
-	unsigned long r_sector, blocknr;
+	blkoff_t r_sector, blocknr;
 
 	switch (conf->algorithm) {
 		case ALGORITHM_LEFT_ASYMMETRIC:
@@ -1153,18 +1153,18 @@
 	return correct_size;
 }
 
-static int raid5_sync_request (mddev_t *mddev, unsigned long sector_nr)
+static int raid5_sync_request (mddev_t *mddev, blkoff_t sector_nr)
 {
 	raid5_conf_t *conf = (raid5_conf_t *) mddev->private;
 	struct stripe_head *sh;
 	int sectors_per_chunk = conf->chunk_size >> 9;
-	unsigned long stripe = sector_nr/sectors_per_chunk;
+	blkoff_t stripe = sector_nr/sectors_per_chunk;
 	int chunk_offset = sector_nr % sectors_per_chunk;
 	int dd_idx, pd_idx;
-	unsigned long first_sector;
+	blkoff_t first_sector;
 	int raid_disks = conf->raid_disks;
 	int data_disks = raid_disks-1;
-	int redone = 0;
+	blkoff_t redone = 0;
 	int bufsize;
 
 	sh = get_active_stripe(conf, sector_nr, 0, 0);
diff -ur /md0/kernels/2.4/v2.4.5-ac9/drivers/scsi/sd.c lb-2.4.5-ac9/drivers/scsi/sd.c
--- /md0/kernels/2.4/v2.4.5-ac9/drivers/scsi/sd.c	Wed Jun 13 16:54:34 2001
+++ lb-2.4.5-ac9/drivers/scsi/sd.c	Sat Jun 30 02:50:55 2001
@@ -87,7 +87,7 @@
 struct hd_struct *sd;
 
 static Scsi_Disk *rscsi_disks;
-static int *sd_sizes;
+static blkoff_t *sd_sizes;
 static int *sd_blocksizes;
 static int *sd_hardsizes;	/* Hardware sector size */
 
@@ -1083,10 +1083,11 @@
 	memset(rscsi_disks, 0, sd_template.dev_max * sizeof(Scsi_Disk));
 
 	/* for every (necessary) major: */
-	sd_sizes = kmalloc((sd_template.dev_max << 4) * sizeof(int), GFP_ATOMIC);
+	/* FIXME: GFP_ATOMIC???  Someone please pass the pipe... */
+	sd_sizes = kmalloc((sd_template.dev_max << 4) * sizeof(blkoff_t), GFP_ATOMIC);
 	if (!sd_sizes)
 		goto cleanup_disks;
-	memset(sd_sizes, 0, (sd_template.dev_max << 4) * sizeof(int));
+	memset(sd_sizes, 0, (sd_template.dev_max << 4) * sizeof(blkoff_t));
 
 	sd_blocksizes = kmalloc((sd_template.dev_max << 4) * sizeof(int), GFP_ATOMIC);
 	if (!sd_blocksizes)
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/affs/super.c lb-2.4.5-ac9/fs/affs/super.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/affs/super.c	Thu May  3 11:22:16 2001
+++ lb-2.4.5-ac9/fs/affs/super.c	Sat Jun 30 02:09:55 2001
@@ -29,7 +29,6 @@
 #include <asm/system.h>
 #include <asm/uaccess.h>
 
-extern int *blk_size[];
 extern struct timezone sys_tz;
 
 static int affs_statfs(struct super_block *sb, struct statfs *buf);
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/block_dev.c lb-2.4.5-ac9/fs/block_dev.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/block_dev.c	Wed Jun 13 16:54:35 2001
+++ lb-2.4.5-ac9/fs/block_dev.c	Sat Jun 30 02:07:06 2001
@@ -14,12 +14,10 @@
 #include <linux/major.h>
 #include <linux/devfs_fs_kernel.h>
 #include <linux/smp_lock.h>
+#include <linux/blkdev.h>
 
 #include <asm/uaccess.h>
 
-extern int *blk_size[];
-extern int *blksize_size[];
-
 #define NBUF 64
 
 ssize_t block_write(struct file * filp, const char * buf,
@@ -27,15 +25,15 @@
 {
 	struct inode * inode = filp->f_dentry->d_inode;
 	ssize_t blocksize, blocksize_bits, i, buffercount, write_error;
-	ssize_t block, blocks;
+	ssize_t blocks;
 	loff_t offset;
 	ssize_t chars;
 	ssize_t written, retval;
 	struct buffer_head * bhlist[NBUF];
-	size_t size;
 	kdev_t dev = inode->i_rdev;
 	struct buffer_head * bh, *bufferlist[NBUF];
 	register char * p;
+	blkoff_t block, size;
 
 	if (is_read_only(dev))
 		return -EPERM;
@@ -56,7 +54,7 @@
 	offset = *ppos & (blocksize-1);
 
 	if (blk_size[MAJOR(dev)])
-		size = ((loff_t) blk_size[MAJOR(dev)][MINOR(dev)] << BLOCK_SIZE_BITS) >> blocksize_bits;
+		size = ((unsigned long long) blk_size[MAJOR(dev)][MINOR(dev)] << BLOCK_SIZE_BITS) >> blocksize_bits;
 	else
 		size = INT_MAX;
 	while (count>0) {
@@ -176,7 +174,6 @@
 ssize_t block_read(struct file * filp, char * buf, size_t count, loff_t *ppos)
 {
 	struct inode * inode = filp->f_dentry->d_inode;
-	size_t block;
 	loff_t offset;
 	ssize_t blocksize;
 	ssize_t blocksize_bits, i;
@@ -189,6 +186,7 @@
 	loff_t size;
 	kdev_t dev;
 	ssize_t read;
+	blkoff_t block;
 
 	dev = inode->i_rdev;
 	blocksize = BLOCK_SIZE;
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/buffer.c lb-2.4.5-ac9/fs/buffer.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/buffer.c	Wed Jun 13 16:54:35 2001
+++ lb-2.4.5-ac9/fs/buffer.c	Sat Jun 30 03:01:21 2001
@@ -546,7 +546,7 @@
  * will force it bad). This shouldn't really happen currently, but
  * the code is ready.
  */
-static inline struct buffer_head * __get_hash_table(kdev_t dev, int block, int size)
+static inline struct buffer_head * __get_hash_table(kdev_t dev, blkoff_t block, int size)
 {
 	struct buffer_head *bh = hash(dev, block);
 
@@ -561,7 +561,7 @@
 	return bh;
 }
 
-struct buffer_head * get_hash_table(kdev_t dev, int block, int size)
+struct buffer_head * get_hash_table(kdev_t dev, blkoff_t block, int size)
 {
 	struct buffer_head *bh;
 
@@ -680,7 +680,6 @@
 
 void set_blocksize(kdev_t dev, int size)
 {
-	extern int *blksize_size[];
 	int i, nlist, slept;
 	struct buffer_head * bh, * bh_next;
 
@@ -724,7 +723,7 @@
 			if (!atomic_read(&bh->b_count)) {
 				if (buffer_dirty(bh))
 					printk(KERN_WARNING
-					       "set_blocksize: dev %s buffer_dirty %lu size %hu\n",
+					       "set_blocksize: dev %s buffer_dirty %" BLKOFF_FMT " size %hu\n",
 					       kdevname(dev), bh->b_blocknr, bh->b_size);
 				remove_inode_queue(bh);
 				__remove_from_queues(bh);
@@ -735,7 +734,7 @@
 				clear_bit(BH_Uptodate, &bh->b_state);
 				printk(KERN_WARNING
 				       "set_blocksize: "
-				       "b_count %d, dev %s, block %lu, from %p\n",
+				       "b_count %d, dev %s, block %" BLKOFF_FMT ", from %p\n",
 				       atomic_read(&bh->b_count), bdevname(bh->b_dev),
 				       bh->b_blocknr, __builtin_return_address(0));
 			}
@@ -980,7 +979,7 @@
  * 14.02.92: changed it to sync dirty buffers a bit: better performance
  * when the filesystem starts to get full of dirty blocks (I hope).
  */
-struct buffer_head * getblk(kdev_t dev, int block, int size)
+struct buffer_head * getblk(kdev_t dev, blkoff_t block, int size)
 {
 	struct buffer_head * bh;
 	int isize;
@@ -1165,7 +1164,7 @@
  * bread() reads a specified block and returns the buffer that contains
  * it. It returns NULL if the block was unreadable.
  */
-struct buffer_head * bread(kdev_t dev, int block, int size)
+struct buffer_head * bread(kdev_t dev, blkoff_t block, int size)
 {
 	struct buffer_head * bh;
 
@@ -1704,7 +1703,7 @@
 int block_read_full_page(struct page *page, get_block_t *get_block)
 {
 	struct inode *inode = page->mapping->host;
-	unsigned long iblock, lblock;
+	blkoff_t iblock, lblock;
 	struct buffer_head *bh, *head, *arr[MAX_BUF_PER_PAGE];
 	unsigned int blocksize, blocks;
 	int nr, i;
@@ -1717,7 +1716,7 @@
 	head = page->buffers;
 
 	blocks = PAGE_CACHE_SIZE >> inode->i_sb->s_blocksize_bits;
-	iblock = page->index << (PAGE_CACHE_SHIFT - inode->i_sb->s_blocksize_bits);
+	iblock = (blkoff_t)page->index << (PAGE_CACHE_SHIFT - inode->i_sb->s_blocksize_bits);
 	lblock = (inode->i_size+blocksize-1) >> inode->i_sb->s_blocksize_bits;
 	bh = head;
 	nr = 0;
@@ -1994,7 +1993,7 @@
 	goto done;
 }
 
-int generic_block_bmap(struct address_space *mapping, long block, get_block_t *get_block)
+blkoff_t generic_block_bmap(struct address_space *mapping, blkoff_t block, get_block_t *get_block)
 {
 	struct buffer_head tmp;
 	struct inode *inode = mapping->host;
@@ -2078,7 +2077,7 @@
 	int		pageind;
 	int		bhind;
 	int		offset;
-	unsigned long	blocknr;
+	blkoff_t	blocknr;
 	struct kiobuf *	iobuf = NULL;
 	struct page *	map;
 	struct buffer_head *tmp, **bhs = NULL;
@@ -2194,7 +2193,7 @@
  * FIXME: we need a swapper_inode->get_block function to remove
  *        some of the bmap kludges and interface ugliness here.
  */
-int brw_page(int rw, struct page *page, kdev_t dev, int b[], int size)
+int brw_page(int rw, struct page *page, kdev_t dev, blkoff_t b[], int size)
 {
 	struct buffer_head *head, *bh;
 
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/efs/file.c lb-2.4.5-ac9/fs/efs/file.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/efs/file.c	Sat Feb 26 23:33:05 2000
+++ lb-2.4.5-ac9/fs/efs/file.c	Sat Jun 30 01:40:42 2001
@@ -8,7 +8,7 @@
 
 #include <linux/efs_fs.h>
 
-int efs_get_block(struct inode *inode, long iblock,
+int efs_get_block(struct inode *inode, blkoff_t iblock,
 		  struct buffer_head *bh_result, int create)
 {
 	int error = -EROFS;
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/ext2/inode.c lb-2.4.5-ac9/fs/ext2/inode.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/ext2/inode.c	Wed Jun 13 16:54:35 2001
+++ lb-2.4.5-ac9/fs/ext2/inode.c	Sat Jun 30 01:45:23 2001
@@ -503,7 +503,7 @@
  * reachable from inode.
  */
 
-static int ext2_get_block(struct inode *inode, long iblock, struct buffer_head *bh_result, int create)
+static int ext2_get_block(struct inode *inode, blkoff_t iblock, struct buffer_head *bh_result, int create)
 {
 	int err = -EIO;
 	int offsets[4];
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/fat/file.c lb-2.4.5-ac9/fs/fat/file.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/fat/file.c	Wed Jun 13 16:54:35 2001
+++ lb-2.4.5-ac9/fs/fat/file.c	Sat Jun 30 01:43:40 2001
@@ -52,7 +52,7 @@
 }
 
 
-int fat_get_block(struct inode *inode, long iblock, struct buffer_head *bh_result, int create)
+int fat_get_block(struct inode *inode, blkoff_t iblock, struct buffer_head *bh_result, int create)
 {
 	struct super_block *sb = inode->i_sb;
 	unsigned long phys;
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/freevxfs/vxfs_subr.c lb-2.4.5-ac9/fs/freevxfs/vxfs_subr.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/freevxfs/vxfs_subr.c	Fri May 25 22:48:09 2001
+++ lb-2.4.5-ac9/fs/freevxfs/vxfs_subr.c	Sat Jun 30 01:46:58 2001
@@ -134,7 +134,7 @@
  *   Zero on success, else a negativ error code (-EIO).
  */
 static int
-vxfs_getblk(struct inode *ip, long iblock,
+vxfs_getblk(struct inode *ip, blkoff_t iblock,
 	    struct buffer_head *bp, int create)
 {
 	daddr_t			pblock;
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/hfs/file.c lb-2.4.5-ac9/fs/hfs/file.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/hfs/file.c	Mon Feb 26 10:20:13 2001
+++ lb-2.4.5-ac9/fs/hfs/file.c	Sat Jun 30 01:47:27 2001
@@ -106,7 +106,7 @@
  * block number.  This function just calls hfs_extent_map() to do the
  * real work and then stuffs the appropriate info into the buffer_head.
  */
-int hfs_get_block(struct inode *inode, long iblock, struct buffer_head *bh_result, int create)
+int hfs_get_block(struct inode *inode, blkoff_t iblock, struct buffer_head *bh_result, int create)
 {
 	unsigned long phys;
 
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/hpfs/file.c lb-2.4.5-ac9/fs/hpfs/file.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/hpfs/file.c	Wed Jun 13 16:54:35 2001
+++ lb-2.4.5-ac9/fs/hpfs/file.c	Sat Jun 30 01:48:00 2001
@@ -68,7 +68,7 @@
 	hpfs_write_inode(i);
 }
 
-int hpfs_get_block(struct inode *inode, long iblock, struct buffer_head *bh_result, int create)
+int hpfs_get_block(struct inode *inode, blkoff_t iblock, struct buffer_head *bh_result, int create)
 {
 	secno s;
 	s = hpfs_bmap(inode, iblock);
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/isofs/inode.c lb-2.4.5-ac9/fs/isofs/inode.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/isofs/inode.c	Wed Jun 13 16:54:35 2001
+++ lb-2.4.5-ac9/fs/isofs/inode.c	Sat Jun 30 03:01:27 2001
@@ -877,7 +877,7 @@
 /* Life is simpler than for other filesystem since we never
  * have to create a new block, only find an existing one.
  */
-static int isofs_get_block(struct inode *inode, long iblock,
+static int isofs_get_block(struct inode *inode, blkoff_t iblock,
 		    struct buffer_head *bh_result, int create)
 {
 	unsigned long b_off;
@@ -958,12 +958,12 @@
 
 abort_too_many_sections:
 	printk("isofs_get_block: More than 100 file sections ?!?, aborting...\n");
-	printk("isofs_get_block: ino=%lu block=%ld firstext=%u sect_size=%u nextino=%lu\n",
+	printk("isofs_get_block: ino=%lu block=%" BLKOFF_FMT " firstext=%u sect_size=%u nextino=%lu\n",
 	       inode->i_ino, iblock, firstext, (unsigned) sect_size, nextino);
 	goto abort;
 }
 
-static int isofs_bmap(struct inode *inode, int block)
+static blkoff_t isofs_bmap(struct inode *inode, blkoff_t block)
 {
 	struct buffer_head dummy;
 	int error;
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/minix/inode.c lb-2.4.5-ac9/fs/minix/inode.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/minix/inode.c	Thu May  3 11:22:16 2001
+++ lb-2.4.5-ac9/fs/minix/inode.c	Sat Jun 30 01:50:58 2001
@@ -362,7 +362,7 @@
 /*
  * the global minix fs getblk function.
  */
-struct buffer_head *minix_getblk(struct inode *inode, int block, int create)
+struct buffer_head *minix_getblk(struct inode *inode, blkoff_t block, int create)
 {
 	struct buffer_head dummy;
 	int error;
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/minix/itree_common.c lb-2.4.5-ac9/fs/minix/itree_common.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/minix/itree_common.c	Thu May  3 11:22:16 2001
+++ lb-2.4.5-ac9/fs/minix/itree_common.c	Sat Jun 30 01:52:21 2001
@@ -140,7 +140,7 @@
 	return -EAGAIN;
 }
 
-static inline int get_block(struct inode * inode, long block,
+static inline int get_block(struct inode * inode, blkoff_t block,
 			struct buffer_head *bh_result, int create)
 {
 	int err = -EIO;
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/partitions/check.c lb-2.4.5-ac9/fs/partitions/check.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/partitions/check.c	Fri May 25 22:48:09 2001
+++ lb-2.4.5-ac9/fs/partitions/check.c	Sat Jun 30 02:59:39 2001
@@ -33,8 +33,6 @@
 #include "ibm.h"
 #include "ultrix.h"
 
-extern int *blk_size[];
-
 struct gendisk *gendisk_head;
 int warn_no_part = 1; /*This is ugly: should make genhd removable media aware*/
 
@@ -250,7 +248,7 @@
 				char buf[64];
 
 				len += sprintf(page + len,
-					       "%4d  %4d %10d %s\n",
+					       "%4d  %4d %10" BLKOFF_FMT " %s\n",
 					       dsk->major, n, dsk->sizes[n],
 					       disk_name(dsk, n, buf));
 				if (len < offset)
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/qnx4/inode.c lb-2.4.5-ac9/fs/qnx4/inode.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/qnx4/inode.c	Thu May  3 11:22:17 2001
+++ lb-2.4.5-ac9/fs/qnx4/inode.c	Sat Jun 30 01:53:05 2001
@@ -204,7 +204,7 @@
 	return NULL;
 }
 
-int qnx4_get_block( struct inode *inode, long iblock, struct buffer_head *bh, int create )
+int qnx4_get_block( struct inode *inode, blkoff_t iblock, struct buffer_head *bh, int create )
 {
 	unsigned long phys;
 
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/sysv/inode.c lb-2.4.5-ac9/fs/sysv/inode.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/sysv/inode.c	Wed Jun 13 16:54:36 2001
+++ lb-2.4.5-ac9/fs/sysv/inode.c	Sat Jun 30 01:55:02 2001
@@ -787,7 +787,7 @@
 	return result;
 }
 
-static int sysv_get_block(struct inode *inode, long iblock, struct buffer_head *bh_result, int create)
+static int sysv_get_block(struct inode *inode, blkoff_t iblock, struct buffer_head *bh_result, int create)
 {
 	struct super_block *sb;
 	int ret, err, new;
diff -ur /md0/kernels/2.4/v2.4.5-ac9/fs/udf/inode.c lb-2.4.5-ac9/fs/udf/inode.c
--- /md0/kernels/2.4/v2.4.5-ac9/fs/udf/inode.c	Tue Jan 30 14:38:52 2001
+++ lb-2.4.5-ac9/fs/udf/inode.c	Sat Jun 30 01:55:51 2001
@@ -56,7 +56,7 @@
 static void udf_update_extents(struct inode *,
 	long_ad [EXTENT_MERGE_SIZE], int, int,
 	lb_addr, Uint32, struct buffer_head **);
-static int udf_get_block(struct inode *, long, struct buffer_head *, int);
+static int udf_get_block(struct inode *, blkoff_t, struct buffer_head *, int);
 
 /*
  * udf_put_inode
@@ -300,7 +300,7 @@
 	return dbh;
 }
 
-static int udf_get_block(struct inode *inode, long block, struct buffer_head *bh_result, int create)
+static int udf_get_block(struct inode *inode, blkoff_t block, struct buffer_head *bh_result, int create)
 {
 	int err, new;
 	struct buffer_head *bh;
diff -ur /md0/kernels/2.4/v2.4.5-ac9/include/linux/blkdev.h lb-2.4.5-ac9/include/linux/blkdev.h
--- /md0/kernels/2.4/v2.4.5-ac9/include/linux/blkdev.h	Wed Jun 13 16:56:34 2001
+++ lb-2.4.5-ac9/include/linux/blkdev.h	Sat Jun 30 03:08:12 2001
@@ -1,6 +1,9 @@
 #ifndef _LINUX_BLKDEV_H
 #define _LINUX_BLKDEV_H
 
+#ifndef _LINUX_TYPES_H
+#include <linux/types.h>
+#endif
 #include <linux/major.h>
 #include <linux/sched.h>
 #include <linux/genhd.h>
@@ -33,9 +36,10 @@
 	kdev_t rq_dev;
 	int cmd;		/* READ or WRITE */
 	int errors;
-	unsigned long sector;
+	blkoff_t sector;
+	blkoff_t hard_sector;
 	unsigned long nr_sectors;
-	unsigned long hard_sector, hard_nr_sectors;
+	unsigned long hard_nr_sectors;
 	unsigned int nr_segments;
 	unsigned int nr_hw_segments;
 	unsigned long current_nr_sectors;
@@ -163,7 +167,7 @@
 extern void blk_queue_make_request(request_queue_t *, make_request_fn *);
 extern void generic_unplug_device(void *);
 
-extern int * blk_size[MAX_BLKDEV];
+extern blkoff_t * blk_size[MAX_BLKDEV];
 
 extern int * blksize_size[MAX_BLKDEV];
 
diff -ur /md0/kernels/2.4/v2.4.5-ac9/include/linux/fs.h lb-2.4.5-ac9/include/linux/fs.h
--- /md0/kernels/2.4/v2.4.5-ac9/include/linux/fs.h	Wed Jun 13 16:56:33 2001
+++ lb-2.4.5-ac9/include/linux/fs.h	Sat Jun 30 03:08:03 2001
@@ -228,7 +228,7 @@
 struct buffer_head {
 	/* First cache line: */
 	struct buffer_head *b_next;	/* Hash queue list */
-	unsigned long b_blocknr;	/* block number */
+	blkoff_t b_blocknr;		/* block number */
 	unsigned short b_size;		/* block size */
 	unsigned short b_list;		/* List that this buffer appears */
 	kdev_t b_dev;			/* device (B_FREE = free) */
@@ -249,7 +249,7 @@
 	void (*b_end_io)(struct buffer_head *bh, int uptodate); /* I/O completion */
  	void *b_private;		/* reserved for b_end_io */
 
-	unsigned long b_rsector;	/* Real buffer location on disk */
+	blkoff_t b_rsector;		/* Real buffer location on disk */
 	wait_queue_head_t b_wait;
 
 	struct inode *	     b_inode;
@@ -1289,8 +1289,8 @@
 extern struct file * get_empty_filp(void);
 extern void file_move(struct file *f, struct list_head *list);
 extern void file_moveto(struct file *new, struct file *old);
-extern struct buffer_head * get_hash_table(kdev_t, int, int);
-extern struct buffer_head * getblk(kdev_t, int, int);
+extern struct buffer_head * get_hash_table(kdev_t, blkoff_t, int);
+extern struct buffer_head * getblk(kdev_t, blkoff_t, int);
 extern void ll_rw_block(int, int, struct buffer_head * bh[]);
 extern void submit_bh(int, struct buffer_head *);
 extern int is_read_only(kdev_t);
@@ -1307,12 +1307,12 @@
 		__bforget(buf);
 }
 extern void set_blocksize(kdev_t, int);
-extern struct buffer_head * bread(kdev_t, int, int);
+extern struct buffer_head * bread(kdev_t, blkoff_t, int);
 extern void wakeup_bdflush(int wait);
 
-extern int brw_page(int, struct page *, kdev_t, int [], int);
+extern int brw_page(int, struct page *, kdev_t, blkoff_t [], int);
 
-typedef int (get_block_t)(struct inode*,long,struct buffer_head*,int);
+typedef int (get_block_t)(struct inode*,blkoff_t,struct buffer_head*,int);
 
 /* Generic buffer handling for block filesystems.. */
 extern int block_flushpage(struct page *, unsigned long);
@@ -1324,7 +1324,7 @@
 				unsigned long *);
 extern int block_sync_page(struct page *);
 
-int generic_block_bmap(struct address_space *, long, get_block_t *);
+blkoff_t generic_block_bmap(struct address_space *, blkoff_t, get_block_t *);
 int generic_commit_write(struct file *, struct page *, unsigned, unsigned);
 int block_truncate_page(struct address_space *, loff_t, get_block_t *);
 
diff -ur /md0/kernels/2.4/v2.4.5-ac9/include/linux/genhd.h lb-2.4.5-ac9/include/linux/genhd.h
--- /md0/kernels/2.4/v2.4.5-ac9/include/linux/genhd.h	Sat Jun 30 02:27:32 2001
+++ lb-2.4.5-ac9/include/linux/genhd.h	Sat Jun 30 03:08:12 2001
@@ -63,7 +63,7 @@
 	int max_p;			/* maximum partitions per device */
 
 	struct hd_struct *part;		/* [indexed by minor] */
-	int *sizes;			/* [idem], device size in blocks */
+	blkoff_t *sizes;		/* [idem], device size in blocks */
 	int nr_real;			/* number of real devices */
 
 	void *real_devices;		/* internal use */
diff -ur /md0/kernels/2.4/v2.4.5-ac9/include/linux/raid/linear.h lb-2.4.5-ac9/include/linux/raid/linear.h
--- /md0/kernels/2.4/v2.4.5-ac9/include/linux/raid/linear.h	Tue Jun 19 13:32:19 2001
+++ lb-2.4.5-ac9/include/linux/raid/linear.h	Sat Jun 30 03:09:00 2001
@@ -5,8 +5,8 @@
 
 struct dev_info {
 	kdev_t		dev;
-	unsigned long	size;
-	unsigned long	offset;
+	blkoff_t	size;
+	blkoff_t	offset;
 };
 
 typedef struct dev_info dev_info_t;
diff -ur /md0/kernels/2.4/v2.4.5-ac9/include/linux/raid/md.h lb-2.4.5-ac9/include/linux/raid/md.h
--- /md0/kernels/2.4/v2.4.5-ac9/include/linux/raid/md.h	Sat Jun 30 02:27:33 2001
+++ lb-2.4.5-ac9/include/linux/raid/md.h	Sat Jun 30 03:08:12 2001
@@ -58,7 +58,7 @@
 #define MD_MINOR_VERSION                90
 #define MD_PATCHLEVEL_VERSION           0
 
-extern int md_size[MAX_MD_DEVS];
+extern blkoff_t md_size[MAX_MD_DEVS];
 extern struct hd_struct md_hd_struct[MAX_MD_DEVS];
 
 extern void add_mddev_mapping (mddev_t *mddev, kdev_t dev, void *data);
diff -ur /md0/kernels/2.4/v2.4.5-ac9/include/linux/raid/md_k.h lb-2.4.5-ac9/include/linux/raid/md_k.h
--- /md0/kernels/2.4/v2.4.5-ac9/include/linux/raid/md_k.h	Wed Jun 13 16:54:38 2001
+++ lb-2.4.5-ac9/include/linux/raid/md_k.h	Sat Jun 30 03:01:42 2001
@@ -16,6 +16,7 @@
 #define _MD_K_H
 
 #include <linux/kernel.h>	// for panic()
+#include <linux/types.h>
 
 #define MD_RESERVED       0UL
 #define LINEAR            1UL
@@ -163,14 +164,14 @@
 
 	kdev_t dev;			/* Device number */
 	kdev_t old_dev;			/*  "" when it was last imported */
-	unsigned long size;		/* Device size (in blocks) */
+	blkoff_t size;		/* Device size (in blocks) */
 	mddev_t *mddev;			/* RAID array if running */
 	unsigned long last_events;	/* IO event timestamp */
 
 	struct block_device *bdev;	/* block device handle */
 
 	mdp_super_t *sb;
-	unsigned long sb_offset;
+	blkoff_t sb_offset;
 
 	int faulty;			/* if faulty do not issue IO requests */
 	int desc_nr;			/* descriptor index in the superblock */
@@ -238,7 +239,7 @@
 
 	int (*stop_resync)(mddev_t *mddev);
 	int (*restart_resync)(mddev_t *mddev);
-	int (*sync_request)(mddev_t *mddev, unsigned long block_nr);
+	int (*sync_request)(mddev_t *mddev, blkoff_t block_nr);
 };
 
 
diff -ur /md0/kernels/2.4/v2.4.5-ac9/include/linux/raid/raid0.h lb-2.4.5-ac9/include/linux/raid/raid0.h
--- /md0/kernels/2.4/v2.4.5-ac9/include/linux/raid/raid0.h	Tue Jun 19 13:32:19 2001
+++ lb-2.4.5-ac9/include/linux/raid/raid0.h	Sat Jun 30 03:09:01 2001
@@ -5,9 +5,9 @@
 
 struct strip_zone
 {
-	unsigned long zone_offset;	/* Zone offset in md_dev */
-	unsigned long dev_offset;	/* Zone offset in real dev */
-	unsigned long size;		/* Zone size */
+	blkoff_t zone_offset;	/* Zone offset in md_dev */
+	blkoff_t dev_offset;	/* Zone offset in real dev */
+	blkoff_t size;		/* Zone size */
 	int nb_dev;			/* # of devices attached to the zone */
 	mdk_rdev_t *dev[MD_SB_DISKS]; /* Devices attached to the zone */
 };
diff -ur /md0/kernels/2.4/v2.4.5-ac9/include/linux/raid/raid1.h lb-2.4.5-ac9/include/linux/raid/raid1.h
--- /md0/kernels/2.4/v2.4.5-ac9/include/linux/raid/raid1.h	Tue Jun 19 13:32:19 2001
+++ lb-2.4.5-ac9/include/linux/raid/raid1.h	Sat Jun 30 03:09:02 2001
@@ -7,8 +7,8 @@
 	int		number;
 	int		raid_disk;
 	kdev_t		dev;
-	int		sect_limit;
-	int		head_position;
+	blkoff_t	sect_limit;
+	blkoff_t	head_position;
 
 	/*
 	 * State bits:
@@ -27,7 +27,7 @@
 	int			raid_disks;
 	int			working_disks;
 	int			last_used;
-	unsigned long		next_sect;
+	blkoff_t		next_sect;
 	int			sect_count;
 	mdk_thread_t		*thread, *resync_thread;
 	int			resync_mirrors;
@@ -47,7 +47,7 @@
 	md_wait_queue_head_t	wait_buffer;
 
 	/* for use when syncing mirrors: */
-	unsigned long	start_active, start_ready,
+	blkoff_t	start_active, start_ready,
 		start_pending, start_future;
 	int	cnt_done, cnt_active, cnt_ready,
 		cnt_pending, cnt_future;
diff -ur /md0/kernels/2.4/v2.4.5-ac9/include/linux/raid/raid5.h lb-2.4.5-ac9/include/linux/raid/raid5.h
--- /md0/kernels/2.4/v2.4.5-ac9/include/linux/raid/raid5.h	Tue Jun 19 13:32:23 2001
+++ lb-2.4.5-ac9/include/linux/raid/raid5.h	Sat Jun 30 03:09:03 2001
@@ -132,7 +132,7 @@
 	struct buffer_head	*bh_read[MD_SB_DISKS];	/* read request buffers of the MD device */
 	struct buffer_head	*bh_write[MD_SB_DISKS];	/* write request buffers of the MD device */
 	struct buffer_head	*bh_written[MD_SB_DISKS]; /* write request buffers of the MD device that have been scheduled for write */
-	unsigned long		sector;			/* sector of this row */
+	blkoff_t		sector;			/* sector of this row */
 	int			size;			/* buffers size */
 	int			pd_idx;			/* parity disk index */
 	unsigned long		state;			/* state flags */
diff -ur /md0/kernels/2.4/v2.4.5-ac9/include/linux/types.h lb-2.4.5-ac9/include/linux/types.h
--- /md0/kernels/2.4/v2.4.5-ac9/include/linux/types.h	Tue Jun 19 00:54:47 2001
+++ lb-2.4.5-ac9/include/linux/types.h	Sat Jun 30 02:59:33 2001
@@ -3,6 +3,14 @@
 
 #ifdef	__KERNEL__
 #include <linux/config.h>
+
+#if defined(CONFIG_BLKOFF_LONGLONG)
+#define BLKOFF_FMT	"Lu"
+typedef unsigned long long	blkoff_t;
+#else
+#define BLKOFF_FMT	"lu"
+typedef unsigned long		blkoff_t;
+#endif
 #endif
 
 #include <linux/posix_types.h>
diff -ur /md0/kernels/2.4/v2.4.5-ac9/mm/page_io.c lb-2.4.5-ac9/mm/page_io.c
--- /md0/kernels/2.4/v2.4.5-ac9/mm/page_io.c	Wed Jun 13 16:54:38 2001
+++ lb-2.4.5-ac9/mm/page_io.c	Sat Jun 30 01:38:25 2001
@@ -36,7 +36,7 @@
 static int rw_swap_page_base(int rw, swp_entry_t entry, struct page *page)
 {
 	unsigned long offset;
-	int zones[PAGE_SIZE/512];
+	blkoff_t zones[PAGE_SIZE/512];
 	int zones_used;
 	kdev_t dev = 0;
 	int block_size;
