New large block-device patch for 2.5.31+bk

From: Peter Chubb (peter@chubb.wattle.id.au)
Date: Thu Aug 22 2002 - 00:08:29 EST


Hi,
        Here's the latest large-block device patch. Expect more
changes as Al Viro continues his partition cleanup (I've just
converted int *xxx_sizes to sector_t *xxx_sizes; he's gradually
getting rid of xxx_sizes[] altogether --- and a good thing too!).

I think I've addressed all the comments I've received so far, except
for the request for something that works on 2.4.X.

The patch enables support for large (>2TB) block devices for all platforms
where sizeof(long)==8, and via a config option for power-PC and IA32.
It's been tested on IA64 and IA32 only.

Still to-do: 16-byte command support for SCSI.
Software RAID works iff each raid member is smaller than 2TB.

Changes:
        -- Use sector_t not int or long for partition start and size
        -- Adjust printk() formats to allow sector_t to be either 32
           or 64 bit.
        -- Where the sector number cannot be >2^32, cast to long to
           avoid 64-bit division and modulo operations (e.g., in the
           floppy and cdrom code)
        -- bmap() takes and returns sector_t
        -- return -EFBIG if the BLKGETSIZE ioctl cannot represent the
           size of the device
        -- Clean up the loop device error checking on losetup, to
           return -EFBIG for too large a backing file.
        -- Add a few BUG_ON() commands where we do not expect
           too-large requests.

Anyone using bitkeeper can pull these changes from
bk://gelato.unsw.edu.au:2023

Large disc testing courtesy of OSDL, www.osdl.org

diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/block/Config.help linux-2.5-lbd/drivers/block/Config.help
--- linux-2.5-import/drivers/block/Config.help Fri Aug 16 13:24:09 2002
+++ linux-2.5-lbd/drivers/block/Config.help Thu Aug 15 12:15:36 2002
@@ -258,3 +258,7 @@
   supported by this driver, and for further information on the use of
   this driver.
 
+CONFIG_LBD
+ Say Y here if you want to attach large (bigger than 2TB) discs to
+ your machine, or if you want to have a raid or loopback device
+ bigger than 2TB. Otherwise say N.
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/block/Config.in linux-2.5-lbd/drivers/block/Config.in
--- linux-2.5-import/drivers/block/Config.in Fri Aug 16 13:24:09 2002
+++ linux-2.5-lbd/drivers/block/Config.in Thu Aug 15 12:15:36 2002
@@ -48,4 +48,7 @@
 fi
 dep_bool ' Initial RAM disk (initrd) support' CONFIG_BLK_DEV_INITRD $CONFIG_BLK_DEV_RAM
 
+if [ "$CONFIG_X86" = "y" -o "$CONFIG_PPC32" = "y" ]; then
+ bool 'Support for Large Block Devices' CONFIG_LBD
+fi
 endmenu
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/block/blkpg.c linux-2.5-lbd/drivers/block/blkpg.c
--- linux-2.5-import/drivers/block/blkpg.c Fri Aug 16 13:24:09 2002
+++ linux-2.5-lbd/drivers/block/blkpg.c Thu Aug 15 12:15:36 2002
@@ -68,19 +68,24 @@
 {
         struct gendisk *g;
         long long ppstart, pplength;
- long pstart, plength;
         int i;
         kdev_t dev = to_kdev_t(bdev->bd_dev);
         struct hd_struct *part;
 
- /* convert bytes to sectors, check for fit in a hd_struct */
+ /* convert bytes to sectors */
         ppstart = (p->start >> 9);
         pplength = (p->length >> 9);
- pstart = ppstart;
- plength = pplength;
- if (pstart != ppstart || plength != pplength
- || pstart < 0 || plength < 0)
- return -EINVAL;
+
+ /* check for fit in a hd_struct */
+ if (sizeof(sector_t) == sizeof(long) &&
+ sizeof(long long) > sizeof(long)) {
+ long pstart, plength;
+ pstart = ppstart;
+ plength = pplength;
+ if (pstart != ppstart || plength != pplength
+ || pstart < 0 || plength < 0)
+ return -EINVAL;
+ }
 
         /* find the drive major */
         g = get_gendisk(dev);
@@ -102,13 +107,13 @@
 
         /* overlap? */
         for (i = 1; i < (1<<g->minor_shift); i++)
- if (!(pstart+plength <= part[i].start_sect ||
- pstart >= part[i].start_sect + part[i].nr_sects))
+ if (ppstart+pplength <= part[i].start_sect ||
+ ppstart >= part[i].start_sect + part[i].nr_sects)
                         return -EBUSY;
 
         /* all seems OK */
- part[p->pno].start_sect = pstart;
- part[p->pno].nr_sects = plength;
+ part[p->pno].start_sect = ppstart;
+ part[p->pno].nr_sects = pplength;
         devfs_register_partitions (g, minor(dev), 0);
         return 0;
 }
@@ -261,10 +266,17 @@
                         intval = bdev_hardsect_size(bdev);
                         return put_user(intval, (int *) arg);
 
- case BLKGETSIZE:
+ case BLKGETSIZE:
+ {
+ unsigned long ret;
                         /* size in sectors, works up to 2 TB */
                         ullval = bdev->bd_inode->i_size;
- return put_user((unsigned long)(ullval >> 9), (unsigned long *) arg);
+ ret = ullval >> 9;
+ if ((u64)ret != (ullval >> 9))
+ return -EFBIG;
+ return put_user(ret, (unsigned long *) arg);
+ }
+
                 case BLKGETSIZE64:
                         /* size in bytes */
                         ullval = bdev->bd_inode->i_size;
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/block/cciss.c linux-2.5-lbd/drivers/block/cciss.c
--- linux-2.5-import/drivers/block/cciss.c Fri Aug 16 13:24:09 2002
+++ linux-2.5-lbd/drivers/block/cciss.c Thu Aug 15 12:15:36 2002
@@ -175,8 +175,8 @@
                 drv = &h->drv[i];
                 if (drv->block_size == 0)
                         continue;
- size = sprintf(buffer+len, "cciss/c%dd%d: blksz=%d nr_blocks=%d\n",
- ctlr, i, drv->block_size, drv->nr_blocks);
+ size = sprintf(buffer+len, "cciss/c%dd%d: blksz=%d nr_blocks=%llu\n",
+ ctlr, i, drv->block_size, (unsigned long long)drv->nr_blocks);
                 pos += size; len += size;
         }
 
@@ -405,7 +405,7 @@
                 } else {
                         driver_geo.heads = 0xff;
                         driver_geo.sectors = 0x3f;
- driver_geo.cylinders = hba[ctlr]->drv[dsk].nr_blocks / (0xff*0x3f);
+ driver_geo.cylinders = (int)hba[ctlr]->drv[dsk].nr_blocks / (0xff*0x3f);
                 }
                 driver_geo.start=
                         hba[ctlr]->hd[minor(inode->i_rdev)].start_sect;
@@ -753,6 +753,7 @@
          * on this controller to zero. We will reread all of this data
          */
         memset(hba[ctlr]->hd, 0, sizeof(struct hd_struct) * 256);
+ memset(hba[ctlr]->sizes, 0, sizeof(hba[0]->sizes[0]) * 256);
         memset(hba[ctlr]->drv, 0, sizeof(drive_info_struct)
                                                 * CISS_MAX_LUN);
         /*
@@ -1191,7 +1192,7 @@
                         total_size = 0;
                         block_size = BLOCK_SIZE;
         }
- printk(KERN_INFO " blocks= %d block_size= %d\n",
+ printk(KERN_INFO " blocks= %u block_size= %d\n",
                                         total_size, block_size);
         /* Execute the command to read the disk geometry */
         memset(inq_buff, 0, sizeof(InquiryData_struct));
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/block/cciss.h linux-2.5-lbd/drivers/block/cciss.h
--- linux-2.5-import/drivers/block/cciss.h Fri Aug 16 13:24:09 2002
+++ linux-2.5-lbd/drivers/block/cciss.h Thu Aug 15 12:15:36 2002
@@ -29,7 +29,7 @@
 {
          __u32 LunID;
         int usage_count;
- int nr_blocks;
+ sector_t nr_blocks;
         int block_size;
         int heads;
         int sectors;
@@ -85,7 +85,7 @@
         char names[12 * NWD];
            // indexed by minor numbers
         struct hd_struct hd[256];
- int sizes[256];
+ sector_t sizes[256];
 #ifdef CONFIG_CISS_SCSI_TAPE
         void *scsi_ctlr; /* ptr to structure containing scsi related stuff */
 #endif
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/block/floppy.c linux-2.5-lbd/drivers/block/floppy.c
--- linux-2.5-import/drivers/block/floppy.c Fri Aug 16 13:24:09 2002
+++ linux-2.5-lbd/drivers/block/floppy.c Thu Aug 15 12:15:36 2002
@@ -489,7 +489,7 @@
  */
 static struct floppy_struct user_params[N_DRIVE];
 
-static int floppy_sizes[256];
+static sector_t floppy_sizes[256];
 
 /*
  * The driver is trying to determine the correct media format
@@ -2664,8 +2664,10 @@
 
         max_sector = _floppy->sect * _floppy->head;
 
- TRACK = CURRENT->sector / max_sector;
- fsector_t = CURRENT->sector % max_sector;
+ /* There can't be more than 2^16 (minimum max int) sectors on
+ a floppy, for goodness sake! */
+ TRACK = (int)CURRENT->sector / max_sector;
+ fsector_t = (int)CURRENT->sector % max_sector;
         if (_floppy->track && TRACK >= _floppy->track) {
                 if (CURRENT->current_nr_sectors & 1) {
                         current_count_sectors = 1;
@@ -2998,7 +3000,7 @@
 
         if (usage_count == 0) {
                 printk("warning: usage count=0, CURRENT=%p exiting\n", CURRENT);
- printk("sect=%ld flags=%lx\n", CURRENT->sector, CURRENT->flags);
+ printk("sect=%llu flags=%lx\n", (unsigned long long)CURRENT->sector, CURRENT->flags);
                 return;
         }
         if (fdc_busy){
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/block/genhd.c linux-2.5-lbd/drivers/block/genhd.c
--- linux-2.5-import/drivers/block/genhd.c Fri Aug 16 13:24:09 2002
+++ linux-2.5-lbd/drivers/block/genhd.c Thu Aug 22 11:17:31 2002
@@ -164,9 +164,9 @@
                 int minormask = (1<<sgp->minor_shift) - 1;
                 if ((n & minormask) && sgp->part[n].nr_sects == 0)
                         continue;
- seq_printf(part, "%4d %4d %10ld %s\n",
+ seq_printf(part, "%4d %4d %10llu %s\n",
                         sgp->major, n + sgp->first_minor,
- sgp->part[n].nr_sects >> 1 ,
+ (unsigned long long)sgp->part[n].nr_sects >> 1 ,
                         disk_name(sgp, n + sgp->first_minor, buf));
         }
 
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/block/ll_rw_blk.c linux-2.5-lbd/drivers/block/ll_rw_blk.c
--- linux-2.5-import/drivers/block/ll_rw_blk.c Fri Aug 16 13:24:09 2002
+++ linux-2.5-lbd/drivers/block/ll_rw_blk.c Thu Aug 15 12:15:36 2002
@@ -70,10 +70,10 @@
  *
  * if (!blk_size[MAJOR]) then no minor size checking is done.
  */
-int * blk_size[MAX_BLKDEV];
+sector_t * blk_size[MAX_BLKDEV];
 
 /*
- * How many reqeusts do we allocate per queue,
+ * How many requests do we allocate per queue,
  * and how many do we "batch" on freeing them?
  */
 int queue_nr_requests, batch_requests;
@@ -558,7 +558,7 @@
         } while (bit < __REQ_NR_BITS);
 
         if (rq->flags & REQ_CMD)
- printk("sector %lu, nr/cnr %lu/%u\n", rq->sector,
+ printk("sector %llu, nr/cnr %lu/%u\n", (unsigned long long)rq->sector,
                                                        rq->nr_sectors,
                                                        rq->current_nr_sectors);
 
@@ -1672,10 +1672,10 @@
                          * device, e.g., when mounting a device. */
                         printk(KERN_INFO
                                "attempt to access beyond end of device\n");
- printk(KERN_INFO "%s: rw=%ld, want=%ld, limit=%Lu\n",
+ printk(KERN_INFO "%s: rw=%ld, want=%Lu, limit=%Lu\n",
                                bdevname(bio->bi_bdev),
                                bio->bi_rw,
- sector + nr_sectors,
+ (unsigned long long) sector + nr_sectors,
                                (long long) maxsector);
 
                         set_bit(BIO_EOF, &bio->bi_flags);
@@ -1979,8 +1979,8 @@
 
         req->errors = 0;
         if (!uptodate)
- printk("end_request: I/O error, dev %s, sector %lu\n",
- kdevname(req->rq_dev), req->sector);
+ printk("end_request: I/O error, dev %s, sector %llu\n",
+ kdevname(req->rq_dev), (unsigned long long)req->sector);
 
         total_nsect = 0;
         while ((bio = req->bio)) {
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/block/loop.c linux-2.5-lbd/drivers/block/loop.c
--- linux-2.5-import/drivers/block/loop.c Fri Aug 16 13:24:09 2002
+++ linux-2.5-lbd/drivers/block/loop.c Thu Aug 22 11:52:32 2002
@@ -83,14 +83,14 @@
 
 static int max_loop = 8;
 static struct loop_device *loop_dev;
-static int *loop_sizes;
+static sector_t *loop_sizes;
 static devfs_handle_t devfs_handle; /* For the directory */
 
 /*
  * Transfer functions
  */
 static int transfer_none(struct loop_device *lo, int cmd, char *raw_buf,
- char *loop_buf, int size, int real_block)
+ char *loop_buf, int size, sector_t real_block)
 {
         if (raw_buf != loop_buf) {
                 if (cmd == READ)
@@ -103,7 +103,7 @@
 }
 
 static int transfer_xor(struct loop_device *lo, int cmd, char *raw_buf,
- char *loop_buf, int size, int real_block)
+ char *loop_buf, int size, sector_t real_block)
 {
         char *in, *out, *key;
         int i, keysize;
@@ -154,24 +154,31 @@
         &xor_funcs
 };
 
-#define MAX_DISK_SIZE 1024*1024*1024
 
-static unsigned long
-compute_loop_size(struct loop_device *lo, struct dentry * lo_dentry)
+static int figure_loop_size(struct loop_device *lo)
 {
- loff_t size = lo_dentry->d_inode->i_mapping->host->i_size;
- return (size - lo->lo_offset) >> BLOCK_SIZE_BITS;
-}
+ loff_t size = lo->lo_backing_file->f_dentry->d_inode->i_mapping->host->i_size;
+ sector_t x;
 
-static void figure_loop_size(struct loop_device *lo)
-{
- loop_sizes[lo->lo_number] = compute_loop_size(lo,
- lo->lo_backing_file->f_dentry);
-
+ /*
+ * Unfortunately, if we want to do I/O on the device,
+ * the number of 512-byte sectors has to fit into a sector_t.
+ */
+ size = (size - lo->lo_offset) >> 9;
+ x = (sector_t)size;
+ if ((loff_t)x != size)
+ return -EFBIG;
+ /*
+ * Convert sectors to blocks
+ */
+ size >>= (BLOCK_SIZE_BITS - 9);
+
+ loop_sizes[lo->lo_number] = (sector_t)size;
+ return 0;
 }
 
 static inline int lo_do_transfer(struct loop_device *lo, int cmd, char *rbuf,
- char *lbuf, int size, int rblock)
+ char *lbuf, int size, sector_t rblock)
 {
         if (!lo->transfer)
                 return 0;
@@ -187,18 +194,18 @@
         struct address_space_operations *aops = mapping->a_ops;
         struct page *page;
         char *kaddr, *data;
- unsigned long index;
+ pgoff_t index;
         unsigned size, offset;
         int len;
         int ret = 0;
 
         down(&mapping->host->i_sem);
         index = pos >> PAGE_CACHE_SHIFT;
- offset = pos & (PAGE_CACHE_SIZE - 1);
+ offset = pos & ((pgoff_t)PAGE_CACHE_SIZE - 1);
         data = kmap(bvec->bv_page) + bvec->bv_offset;
         len = bvec->bv_len;
         while (len > 0) {
- int IV = index * (PAGE_CACHE_SIZE/bsize) + offset/bsize;
+ sector_t IV = index * (PAGE_CACHE_SIZE/bsize) + offset/bsize;
                 int transfer_result;
 
                 size = PAGE_CACHE_SIZE - offset;
@@ -218,7 +225,7 @@
                          * The transfer failed, but we still write the data to
                          * keep prepare/commit calls balanced.
                          */
- printk(KERN_ERR "loop: transfer error block %ld\n", index);
+ printk(KERN_ERR "loop: transfer error block %llu\n", (unsigned long long)index);
                         memset(kaddr + offset, 0, size);
                 }
                 if (aops->commit_write(file, page, offset, offset+size))
@@ -704,7 +711,11 @@
         lo->lo_backing_file = file;
         lo->transfer = NULL;
         lo->ioctl = NULL;
- figure_loop_size(lo);
+ if (figure_loop_size(lo)) {
+ error = -EFBIG;
+ fput(file);
+ goto out_putf;
+ }
         lo->old_gfp_mask = inode->i_mapping->gfp_mask;
         inode->i_mapping->gfp_mask = GFP_NOIO;
 
@@ -800,6 +811,7 @@
         struct loop_info info;
         int err;
         unsigned int type;
+ loff_t offset;
 
         if (lo->lo_encrypt_key_size && lo->lo_key_owner != current->uid &&
             !capable(CAP_SYS_ADMIN))
@@ -815,13 +827,23 @@
                 return -EINVAL;
         if (type == LO_CRYPT_XOR && info.lo_encrypt_key_size == 0)
                 return -EINVAL;
+
         err = loop_release_xfer(lo);
         if (!err)
                 err = loop_init_xfer(lo, type, &info);
+
+ offset = lo->lo_offset;
+ if (offset != info.lo_offset) {
+ lo->lo_offset = info.lo_offset;
+ if (figure_loop_size(lo)){
+ err = -EFBIG;
+ lo->lo_offset = offset;
+ }
+ }
+
         if (err)
                 return err;
 
- lo->lo_offset = info.lo_offset;
         strncpy(lo->lo_name, info.lo_name, LO_NAME_SIZE);
 
         lo->transfer = xfer_funcs[type]->transfer;
@@ -834,7 +856,7 @@
                        info.lo_encrypt_key_size);
                 lo->lo_key_owner = current->uid;
         }
- figure_loop_size(lo);
+
         return 0;
 }
 
@@ -901,18 +923,25 @@
                 err = loop_get_status(lo, (struct loop_info *) arg);
                 break;
         case BLKGETSIZE:
+ {
+ unsigned long val;
                 if (lo->lo_state != Lo_bound) {
                         err = -ENXIO;
                         break;
                 }
- err = put_user((unsigned long) loop_sizes[lo->lo_number] << 1, (unsigned long *) arg);
+ val = loop_sizes[lo->lo_number] << 1;
+ if ((sector_t)val != loop_sizes[lo->lo_number] << 1)
+ err = -EFBIG;
+ else
+ err = put_user(val, (unsigned long *) arg);
                 break;
+ }
         case BLKGETSIZE64:
                 if (lo->lo_state != Lo_bound) {
                         err = -ENXIO;
                         break;
                 }
- err = put_user((u64)loop_sizes[lo->lo_number] << 10, (u64*)arg);
+ err = put_user(((u64)loop_sizes[lo->lo_number]) << 10, (u64*)arg);
                 break;
         default:
                 err = lo->ioctl ? lo->ioctl(lo, cmd, arg) : -EINVAL;
@@ -1045,7 +1074,7 @@
         if (!loop_dev)
                 return -ENOMEM;
 
- loop_sizes = kmalloc(max_loop * sizeof(int), GFP_KERNEL);
+ loop_sizes = kmalloc(max_loop * sizeof(loop_sizes[0]), GFP_KERNEL);
         if (!loop_sizes)
                 goto out_mem;
 
@@ -1054,7 +1083,7 @@
 
         for (i = 0; i < max_loop; i++) {
                 struct loop_device *lo = &loop_dev[i];
- memset(lo, 0, sizeof(struct loop_device));
+ memset(lo, 0, sizeof(*lo));
                 init_MUTEX(&lo->lo_ctl_mutex);
                 init_MUTEX_LOCKED(&lo->lo_sem);
                 init_MUTEX_LOCKED(&lo->lo_bh_mutex);
@@ -1062,7 +1091,7 @@
                 spin_lock_init(&lo->lo_lock);
         }
 
- memset(loop_sizes, 0, max_loop * sizeof(int));
+ memset(loop_sizes, 0, max_loop * sizeof(*loop_sizes));
         blk_size[MAJOR_NR] = loop_sizes;
         for (i = 0; i < max_loop; i++)
                 register_disk(NULL, mk_kdev(MAJOR_NR, i), 1, &lo_fops, 0);
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/block/nbd.c linux-2.5-lbd/drivers/block/nbd.c
--- linux-2.5-import/drivers/block/nbd.c Fri Aug 16 13:24:09 2002
+++ linux-2.5-lbd/drivers/block/nbd.c Thu Aug 15 12:15:36 2002
@@ -59,7 +59,7 @@
 
 static int nbd_blksizes[MAX_NBD];
 static int nbd_blksize_bits[MAX_NBD];
-static int nbd_sizes[MAX_NBD];
+static sector_t nbd_sizes[MAX_NBD];
 static u64 nbd_bytesizes[MAX_NBD];
 
 static struct nbd_device nbd_dev[MAX_NBD];
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/block/ps2esdi.c linux-2.5-lbd/drivers/block/ps2esdi.c
--- linux-2.5-import/drivers/block/ps2esdi.c Fri Aug 16 13:24:09 2002
+++ linux-2.5-lbd/drivers/block/ps2esdi.c Thu Aug 15 12:15:36 2002
@@ -108,6 +108,7 @@
 static DECLARE_WAIT_QUEUE_HEAD(ps2esdi_int);
 
 static int no_int_yet;
+static sector_t ps2esdi_sizes[MAX_HD << 6];
 static int ps2esdi_drives;
 static struct hd_struct ps2esdi[MAX_HD << 6];
 static u_short io_base;
@@ -540,7 +541,7 @@
         /* is request is valid */
         else {
                 printk("Grrr. error. ps2esdi_drives: %d, %lu %lu\n", ps2esdi_drives,
- CURRENT->sector, ps2esdi[minor(CURRENT->rq_dev)].nr_sects);
+ (unsigned long)CURRENT->sector, (unsigned long)ps2esdi[minor(CURRENT->rq_dev)].nr_sects);
                 end_request(CURRENT, FAIL);
         }
 
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/block/rd.c linux-2.5-lbd/drivers/block/rd.c
--- linux-2.5-import/drivers/block/rd.c Fri Aug 16 13:24:09 2002
+++ linux-2.5-lbd/drivers/block/rd.c Thu Aug 15 12:15:36 2002
@@ -77,7 +77,7 @@
  */
 
 static unsigned long rd_length[NUM_RAMDISKS]; /* Size of RAM disks in bytes */
-static int rd_kbsize[NUM_RAMDISKS]; /* Size in blocks of 1024 bytes */
+static sector_t rd_kbsize[NUM_RAMDISKS]; /* Size in blocks of 1024 bytes */
 static devfs_handle_t devfs_handle;
 static struct block_device *rd_bdev[NUM_RAMDISKS];/* Protected device data */
 
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/ide/ide-cd.c linux-2.5-lbd/drivers/ide/ide-cd.c
--- linux-2.5-import/drivers/ide/ide-cd.c Mon Aug 19 13:07:06 2002
+++ linux-2.5-lbd/drivers/ide/ide-cd.c Thu Aug 22 11:17:31 2002
@@ -1173,7 +1173,7 @@
         if (rq->current_nr_sectors < bio_sectors(rq->bio) &&
             (rq->sector % SECTORS_PER_FRAME) != 0) {
                 printk ("%s: cdrom_read_from_buffer: buffer botch (%ld)\n",
- drive->name, rq->sector);
+ drive->name, (long)rq->sector);
                 cdrom_end_request(drive, 0);
                 return -1;
         }
@@ -2784,11 +2784,13 @@
 static int ll_10byte_cmd_build(request_queue_t *q, struct request *rq)
 {
         int hard_sect = queue_hardsect_size(q);
- sector_t block = rq->hard_sector / (hard_sect >> 9);
+ unsigned block = (long)rq->hard_sector / (hard_sect >> 9);
         unsigned long blocks = rq->hard_nr_sectors / (hard_sect >> 9);
 
         if (!(rq->flags & REQ_CMD))
                 return 0;
+
+ BUG_ON(sizeof(rq->hard_sector) > 4 && (rq->hard_sector >> 32));
 
         if (rq->hard_nr_sectors != rq->nr_sectors) {
                 printk(KERN_ERR "ide-cd: hard_nr_sectors differs from nr_sectors! %lu %lu\n",
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/ide/ide-disk.c linux-2.5-lbd/drivers/ide/ide-disk.c
--- linux-2.5-import/drivers/ide/ide-disk.c Mon Aug 19 13:07:06 2002
+++ linux-2.5-lbd/drivers/ide/ide-disk.c Thu Aug 22 11:17:02 2002
@@ -843,7 +843,7 @@
                                 }
                         }
                         if (HWGROUP(drive) && HWGROUP(drive)->rq)
- printk(", sector=%ld", HWGROUP(drive)->rq->sector);
+ printk(", sector=%llu", (unsigned long long)HWGROUP(drive)->rq->sector);
                 }
         }
 #endif /* FANCY_STATUS_DUMPS */
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/ide/ide-floppy.c linux-2.5-lbd/drivers/ide/ide-floppy.c
--- linux-2.5-import/drivers/ide/ide-floppy.c Mon Aug 19 13:07:06 2002
+++ linux-2.5-lbd/drivers/ide/ide-floppy.c Thu Aug 22 11:10:29 2002
@@ -1379,7 +1379,7 @@
                 return ide_stopped;
         }
         if (rq->flags & REQ_CMD) {
- if ((rq->sector % floppy->bs_factor) ||
+ if (((long)rq->sector % floppy->bs_factor) ||
                     (rq->nr_sectors % floppy->bs_factor)) {
                         printk("%s: unsupported r/w request size\n",
                                 drive->name);
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/ide/ide.c linux-2.5-lbd/drivers/ide/ide.c
--- linux-2.5-import/drivers/ide/ide.c Mon Aug 19 13:07:06 2002
+++ linux-2.5-lbd/drivers/ide/ide.c Thu Aug 22 11:17:31 2002
@@ -832,7 +832,7 @@
                                         }
                                 }
                                 if (HWGROUP(drive) && HWGROUP(drive)->rq)
- printk(", sector=%ld", HWGROUP(drive)->rq->sector);
+ printk(", sector=%llu", (unsigned long long)HWGROUP(drive)->rq->sector);
                         }
                 }
 #endif /* FANCY_STATUS_DUMPS */
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/ieee1394/sbp2.c linux-2.5-lbd/drivers/ieee1394/sbp2.c
--- linux-2.5-import/drivers/ieee1394/sbp2.c Fri Aug 16 13:24:25 2002
+++ linux-2.5-lbd/drivers/ieee1394/sbp2.c Thu Aug 15 12:15:40 2002
@@ -3105,12 +3105,13 @@
 
         heads = 64;
         sectors = 32;
- cylinders = disk->capacity / (heads * sectors);
+ cylinders = (int)disk->capacity / (heads * sectors);
+
 
         if (cylinders > 1024) {
                 heads = 255;
                 sectors = 63;
- cylinders = disk->capacity / (heads * sectors);
+ cylinders = (int)disk->capacity / (heads * sectors);
         }
 
         geom[0] = heads;
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/md/linear.c linux-2.5-lbd/drivers/md/linear.c
--- linux-2.5-import/drivers/md/linear.c Fri Aug 16 13:24:34 2002
+++ linux-2.5-lbd/drivers/md/linear.c Thu Aug 15 12:15:41 2002
@@ -72,10 +72,12 @@
                 goto out;
         }
 
- nb_zone = conf->nr_zones =
- md_size[mdidx(mddev)] / conf->smallest->size +
- ((md_size[mdidx(mddev)] % conf->smallest->size) ? 1 : 0);
-
+ {
+ sector_t sz = md_size[mdidx(mddev)];
+ unsigned round = sector_div(sz, conf->smallest->size);
+ nb_zone = conf->nr_zones = sz + (round ? 1 : 0);
+ }
+
         conf->hash_table = kmalloc (sizeof (struct linear_hash) * nb_zone,
                                         GFP_KERNEL);
         if (!conf->hash_table)
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/md/lvm.c linux-2.5-lbd/drivers/md/lvm.c
--- linux-2.5-import/drivers/md/lvm.c Fri Aug 16 13:24:34 2002
+++ linux-2.5-lbd/drivers/md/lvm.c Thu Aug 15 12:15:41 2002
@@ -370,7 +370,7 @@
 /* gendisk structures */
 static struct hd_struct lvm_hd_struct[MAX_LV];
 static int lvm_blocksizes[MAX_LV];
-static int lvm_size[MAX_LV];
+static sector_t lvm_size[MAX_LV];
 
 static struct gendisk lvm_gendisk =
 {
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/md/md.c linux-2.5-lbd/drivers/md/md.c
--- linux-2.5-import/drivers/md/md.c Mon Aug 19 13:07:08 2002
+++ linux-2.5-lbd/drivers/md/md.c Thu Aug 22 13:02:07 2002
@@ -111,7 +111,7 @@
 static void md_recover_arrays(void);
 static mdk_thread_t *md_recovery_thread;
 
-int md_size[MAX_MD_DEVS];
+sector_t md_size[MAX_MD_DEVS];
 
 static struct block_device_operations md_fops;
 static devfs_handle_t devfs_handle;
@@ -300,35 +300,35 @@
         return dname->name;
 }
 
-static unsigned int calc_dev_sboffset(struct block_device *bdev)
+static sector_t calc_dev_sboffset(struct block_device *bdev)
 {
- unsigned int size = bdev->bd_inode->i_size >> BLOCK_SIZE_BITS;
+ sector_t size = bdev->bd_inode->i_size >> BLOCK_SIZE_BITS;
         return MD_NEW_SIZE_BLOCKS(size);
 }
 
-static unsigned int calc_dev_size(struct block_device *bdev, mddev_t *mddev)
+static sector_t calc_dev_size(struct block_device *bdev, mddev_t *mddev)
 {
- unsigned int size;
+ sector_t size;
 
         if (mddev->persistent)
                 size = calc_dev_sboffset(bdev);
         else
                 size = bdev->bd_inode->i_size >> BLOCK_SIZE_BITS;
         if (mddev->chunk_size)
- size &= ~(mddev->chunk_size/1024 - 1);
+ size &= ~((sector_t)mddev->chunk_size/1024 - 1);
         return size;
 }
 
-static unsigned int zoned_raid_size(mddev_t *mddev)
+static sector_t zoned_raid_size(mddev_t *mddev)
 {
- unsigned int mask;
+ sector_t mask;
         mdk_rdev_t * rdev;
         struct list_head *tmp;
 
         /*
          * do size and offset calculations.
          */
- mask = ~(mddev->chunk_size/1024 - 1);
+ mask = ~((sector_t)mddev->chunk_size/1024 - 1);
 
         ITERATE_RDEV(mddev,rdev,tmp) {
                 rdev->size &= mask;
@@ -418,7 +418,7 @@
 
 static int read_disk_sb(mdk_rdev_t * rdev)
 {
- unsigned long sb_offset;
+ sector_t sb_offset;
 
         if (!rdev->sb) {
                 MD_BUG();
@@ -594,10 +594,10 @@
                 MD_BUG();
         free_disk_sb(rdev);
         list_del_init(&rdev->same_set);
- unlock_rdev(rdev);
 #ifndef MODULE
         md_autodetect_dev(rdev->bdev->bd_dev);
 #endif
+ unlock_rdev(rdev);
         rdev->faulty = 0;
         kfree(rdev);
 }
@@ -683,9 +683,9 @@
 
 static void print_rdev(mdk_rdev_t *rdev)
 {
- printk(KERN_INFO "md: rdev %s, SZ:%08ld F:%d DN:%d ",
+ printk(KERN_INFO "md: rdev %s, SZ:%08llu F:%d DN:%d ",
                 bdev_partition_name(rdev->bdev),
- rdev->size, rdev->faulty, rdev->desc_nr);
+ (unsigned long long)rdev->size, rdev->faulty, rdev->desc_nr);
         if (rdev->sb) {
                 printk(KERN_INFO "md: rdev superblock:\n");
                 print_sb(rdev->sb);
@@ -767,7 +767,8 @@
 
 static int write_disk_sb(mdk_rdev_t * rdev)
 {
- unsigned long sb_offset, size;
+ sector_t sb_offset;
+ sector_t size;
 
         if (!rdev->sb) {
                 MD_BUG();
@@ -784,8 +785,10 @@
 
         sb_offset = calc_dev_sboffset(rdev->bdev);
         if (rdev->sb_offset != sb_offset) {
- printk(KERN_INFO "%s's sb offset has changed from %ld to %ld, skipping\n",
- bdev_partition_name(rdev->bdev), rdev->sb_offset, sb_offset);
+ printk(KERN_INFO "%s's sb offset has changed from %llu to %llu, skipping\n",
+ bdev_partition_name(rdev->bdev),
+ (unsigned long long)rdev->sb_offset,
+ (unsigned long long)sb_offset);
                 goto skip;
         }
         /*
@@ -795,12 +798,14 @@
          */
         size = calc_dev_size(rdev->bdev, rdev->mddev);
         if (size != rdev->size) {
- printk(KERN_INFO "%s's size has changed from %ld to %ld since import, skipping\n",
- bdev_partition_name(rdev->bdev), rdev->size, size);
+ printk(KERN_INFO "%s's size has changed from %llu to %llu since import, skipping\n",
+ bdev_partition_name(rdev->bdev),
+ (unsigned long long)rdev->size,
+ (unsigned long long)size);
                 goto skip;
         }
 
- printk(KERN_INFO "(write) %s's sb offset: %ld\n", bdev_partition_name(rdev->bdev), sb_offset);
+ printk(KERN_INFO "(write) %s's sb offset: %llu\n", bdev_partition_name(rdev->bdev), (unsigned long long)sb_offset);
 
         if (!sync_page_io(rdev->bdev, sb_offset<<1, MD_SB_BYTES, rdev->sb_page, WRITE))
                 goto fail;
@@ -990,7 +995,7 @@
 {
         int err;
         mdk_rdev_t *rdev;
- unsigned int size;
+ sector_t size;
 
         rdev = (mdk_rdev_t *) kmalloc(sizeof(*rdev), GFP_KERNEL);
         if (!rdev) {
@@ -1267,9 +1272,9 @@
                 rdev->size = calc_dev_size(rdev->bdev, mddev);
                 if (rdev->size < mddev->chunk_size / 1024) {
                         printk(KERN_WARNING
- "md: Dev %s smaller than chunk_size: %ldk < %dk\n",
+ "md: Dev %s smaller than chunk_size: %lluk < %dk\n",
                                 bdev_partition_name(rdev->bdev),
- rdev->size, mddev->chunk_size / 1024);
+ (unsigned long long)rdev->size, mddev->chunk_size / 1024);
                         return -EINVAL;
                 }
         }
@@ -1945,7 +1950,7 @@
 
 static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info)
 {
- int size;
+ sector_t size;
         mdk_rdev_t *rdev;
         dev_t dev;
         dev = MKDEV(info->major,info->minor);
@@ -2111,8 +2116,9 @@
         size = calc_dev_size(rdev->bdev, mddev);
 
         if (size < mddev->size) {
- printk(KERN_WARNING "md%d: disk size %d blocks < array size %ld\n",
- mdidx(mddev), size, mddev->size);
+ printk(KERN_WARNING "md%d: disk size %llu blocks < array size %llu\n",
+ mdidx(mddev), (unsigned long long)size,
+ (unsigned long long)mddev->size);
                 err = -ENOSPC;
                 goto abort_export;
         }
@@ -2434,9 +2440,9 @@
                 }
 
                 default:
- printk(KERN_WARNING "md: %s(pid %d) used obsolete MD ioctl, "
- "upgrade your software to use new ictls.\n",
- current->comm, current->pid);
+ printk(KERN_WARNING "md: %s(pid %d) used obsolete MD ioctl, %x"
+ "upgrade your software to use new ioctls.\n",
+ current->comm, current->pid, cmd);
                         err = -EINVAL;
                         goto abort_unlock;
         }
@@ -2733,7 +2739,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;
+ int sz = 0, j;
+ sector_t size;
         struct list_head *tmp, *tmp2;
         mdk_rdev_t *rdev;
         mddev_t *mddev;
@@ -2767,10 +2774,10 @@
 
                 if (!list_empty(&mddev->disks)) {
                         if (mddev->pers)
- sz += sprintf(page + sz, "\n %d blocks",
- md_size[mdidx(mddev)]);
+ sz += sprintf(page + sz, "\n %llu blocks",
+ (unsigned long long)md_size[mdidx(mddev)]);
                         else
- sz += sprintf(page + sz, "\n %d blocks", size);
+ sz += sprintf(page + sz, "\n %llu blocks", (unsigned long long)size);
                 }
 
                 if (!mddev->pers) {
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/md/multipath.c linux-2.5-lbd/drivers/md/multipath.c
--- linux-2.5-import/drivers/md/multipath.c Fri Aug 16 13:24:34 2002
+++ linux-2.5-lbd/drivers/md/multipath.c Thu Aug 15 12:15:41 2002
@@ -138,8 +138,8 @@
         conf = mddev_to_conf(mp_bh->mddev);
         bdev = conf->multipaths[mp_bh->path].bdev;
         md_error (mp_bh->mddev, bdev);
- printk(KERN_ERR "multipath: %s: rescheduling sector %lu\n",
- bdev_partition_name(bdev), bio->bi_sector);
+ printk(KERN_ERR "multipath: %s: rescheduling sector %llu\n",
+ bdev_partition_name(bdev), (unsigned long long)bio->bi_sector);
         multipath_reschedule_retry(mp_bh);
         return;
 }
@@ -340,10 +340,10 @@
 }
 
 #define IO_ERROR KERN_ALERT \
-"multipath: %s: unrecoverable IO read error for block %lu\n"
+"multipath: %s: unrecoverable IO read error for block %llu\n"
 
 #define REDIRECT_SECTOR KERN_ERR \
-"multipath: %s: redirecting sector %lu to another IO path\n"
+"multipath: %s: redirecting sector %llu to another IO path\n"
 
 /*
  * This is a kernel thread which:
@@ -377,11 +377,11 @@
                 multipath_map (mddev, &bio->bi_bdev);
                 if (bio->bi_bdev == bdev) {
                         printk(IO_ERROR,
- bdev_partition_name(bio->bi_bdev), bio->bi_sector);
+ bdev_partition_name(bio->bi_bdev), (unsigned long long)bio->bi_sector);
                         multipath_end_bh_io(mp_bh, 0);
                 } else {
                         printk(REDIRECT_SECTOR,
- bdev_partition_name(bio->bi_bdev), bio->bi_sector);
+ bdev_partition_name(bio->bi_bdev), (unsigned long long)bio->bi_sector);
                         generic_make_request(bio);
                 }
         }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/md/raid0.c linux-2.5-lbd/drivers/md/raid0.c
--- linux-2.5-import/drivers/md/raid0.c Fri Aug 16 13:24:34 2002
+++ linux-2.5-lbd/drivers/md/raid0.c Thu Aug 22 13:53:33 2002
@@ -46,9 +46,9 @@
                 printk("raid0: looking at %s\n", bdev_partition_name(rdev1->bdev));
                 c = 0;
                 ITERATE_RDEV(mddev,rdev2,tmp2) {
- printk("raid0: comparing %s(%ld) with %s(%ld)\n",
- bdev_partition_name(rdev1->bdev), rdev1->size,
- bdev_partition_name(rdev2->bdev), rdev2->size);
+ printk("raid0: comparing %s(%llu) with %s(%llu)\n",
+ bdev_partition_name(rdev1->bdev), (unsigned long long)rdev1->size,
+ bdev_partition_name(rdev2->bdev), (unsigned long long)rdev2->size);
                         if (rdev2 == rdev1) {
                                 printk("raid0: END\n");
                                 break;
@@ -87,7 +87,7 @@
         cnt = 0;
         smallest = NULL;
         ITERATE_RDEV(mddev, rdev1, tmp1) {
- int j = rdev1->sb->this_disk.raid_disk;
+ int j = rdev1->raid_disk;
 
                 if (j < 0 || j >= mddev->raid_disks) {
                         printk("raid0: bad disk number %d - aborting!\n", j);
@@ -135,7 +135,8 @@
                                 c++;
                                 if (!smallest || (rdev->size <smallest->size)) {
                                         smallest = rdev;
- printk(" (%ld) is smallest!.\n", rdev->size);
+ printk(" (%llu) is smallest!.\n",
+ (unsigned long long)rdev->size);
                                 }
                         } else
                                 printk(" nope.\n");
@@ -176,16 +177,21 @@
         if (create_strip_zones (mddev))
                 goto out_free_conf;
 
- printk("raid0 : md_size is %d blocks.\n", md_size[mdidx(mddev)]);
+ printk("raid0 : md_size is %llu blocks.\n", (unsigned long long)md_size[mdidx(mddev)]);
         printk("raid0 : conf->smallest->size is %ld blocks.\n", conf->smallest->size);
- nb_zone = md_size[mdidx(mddev)]/conf->smallest->size +
- (md_size[mdidx(mddev)] % conf->smallest->size ? 1 : 0);
+ {
+#if __GNUC__ < 3 /* work around bug in gcc 2.9[56] */
+ volatile
+#endif
+ sector_t sz = md_size[mdidx(mddev)];
+ unsigned round = sector_div(sz, conf->smallest->size);
+ nb_zone = sz + (round ? 1 : 0);
+ }
         printk("raid0 : nb_zone is %ld.\n", nb_zone);
         conf->nr_zones = nb_zone;
 
         printk("raid0 : Allocating %ld bytes for hash.\n",
                                 nb_zone*sizeof(struct raid0_hash));
-
         conf->hash_table = vmalloc (sizeof (struct raid0_hash)*nb_zone);
         if (!conf->hash_table)
                 goto out_free_zone_conf;
@@ -312,7 +318,7 @@
         return 1;
 
 bad_map:
- printk ("raid0_make_request bug: can't convert block across chunks or bigger than %dk %ld %d\n", chunk_size, bio->bi_sector, bio->bi_size >> 10);
+ printk ("raid0_make_request bug: can't convert block across chunks or bigger than %dk %llu %d\n", chunk_size, (unsigned long long)bio->bi_sector, bio->bi_size >> 10);
         goto outerr;
 bad_hash:
         printk("raid0_make_request bug: hash==NULL for block %ld\n", block);
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/md/raid1.c linux-2.5-lbd/drivers/md/raid1.c
--- linux-2.5-import/drivers/md/raid1.c Fri Aug 16 13:24:34 2002
+++ linux-2.5-lbd/drivers/md/raid1.c Thu Aug 15 12:15:41 2002
@@ -292,8 +292,8 @@
                 /*
                  * oops, read error:
                  */
- printk(KERN_ERR "raid1: %s: rescheduling sector %lu\n",
- bdev_partition_name(conf->mirrors[mirror].bdev), r1_bio->sector);
+ printk(KERN_ERR "raid1: %s: rescheduling sector %llu\n",
+ bdev_partition_name(conf->mirrors[mirror].bdev), (unsigned long long)r1_bio->sector);
                 reschedule_retry(r1_bio);
                 return;
         }
@@ -836,10 +836,10 @@
 }
 
 #define IO_ERROR KERN_ALERT \
-"raid1: %s: unrecoverable I/O read error for block %lu\n"
+"raid1: %s: unrecoverable I/O read error for block %llu\n"
 
 #define REDIRECT_SECTOR KERN_ERR \
-"raid1: %s: redirecting sector %lu to another mirror\n"
+"raid1: %s: redirecting sector %llu to another mirror\n"
 
 static void end_sync_read(struct bio *bio)
 {
@@ -906,7 +906,7 @@
                  * There is no point trying a read-for-reconstruct as
                  * reconstruct is about to be aborted
                  */
- printk(IO_ERROR, bdev_partition_name(bio->bi_bdev), r1_bio->sector);
+ printk(IO_ERROR, bdev_partition_name(bio->bi_bdev), (unsigned long long)r1_bio->sector);
                 md_done_sync(mddev, r1_bio->master_bio->bi_size >> 9, 0);
                 resume_device(conf);
                 put_buf(r1_bio);
@@ -949,7 +949,7 @@
                  * Nowhere to write this to... I guess we
                  * must be done
                  */
- printk(IO_ERROR, bdev_partition_name(bio->bi_bdev), r1_bio->sector);
+ printk(IO_ERROR, bdev_partition_name(bio->bi_bdev), (unsigned long long)r1_bio->sector);
                 md_done_sync(mddev, r1_bio->master_bio->bi_size >> 9, 0);
                 resume_device(conf);
                 put_buf(r1_bio);
@@ -1005,12 +1005,12 @@
                         bdev = bio->bi_bdev;
                         map(mddev, &bio->bi_bdev);
                         if (bio->bi_bdev == bdev) {
- printk(IO_ERROR, bdev_partition_name(bio->bi_bdev), r1_bio->sector);
+ printk(IO_ERROR, bdev_partition_name(bio->bi_bdev), (unsigned long long)r1_bio->sector);
                                 raid_end_bio_io(r1_bio, 0);
                                 break;
                         }
                         printk(REDIRECT_SECTOR,
- bdev_partition_name(bio->bi_bdev), r1_bio->sector);
+ bdev_partition_name(bio->bi_bdev), (unsigned long long)r1_bio->sector);
                         bio->bi_sector = r1_bio->sector;
                         bio->bi_rw = r1_bio->cmd;
 
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/md/raid5.c linux-2.5-lbd/drivers/md/raid5.c
--- linux-2.5-import/drivers/md/raid5.c Fri Aug 16 13:24:34 2002
+++ linux-2.5-lbd/drivers/md/raid5.c Thu Aug 15 12:15:41 2002
@@ -195,8 +195,8 @@
 
                 if (dev->toread || dev->towrite || dev->written ||
                     test_bit(R5_LOCKED, &dev->flags)) {
- printk("sector=%lx i=%d %p %p %p %d\n",
- sh->sector, i, dev->toread,
+ printk("sector=%llx i=%d %p %p %p %d\n",
+ (unsigned long long)sh->sector, i, dev->toread,
                                dev->towrite, dev->written,
                                test_bit(R5_LOCKED, &dev->flags));
                         BUG();
@@ -416,7 +416,7 @@
 }
 
 
-static unsigned long compute_blocknr(struct stripe_head *sh, int i);
+static sector_t compute_blocknr(struct stripe_head *sh, int i);
         
 static void raid5_build_block (struct stripe_head *sh, int i)
 {
@@ -675,7 +675,7 @@
                 if (test_bit(R5_UPTODATE, &sh->dev[i].flags))
                         ptr[count++] = p;
                 else
- printk("compute_block() %d, stripe %lu, %d not present\n", dd_idx, sh->sector, i);
+ printk("compute_block() %d, stripe %llu, %d not present\n", dd_idx, (unsigned long long)sh->sector, i);
 
                 check_xor();
         }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/mtd/devices/blkmtd.c linux-2.5-lbd/drivers/mtd/devices/blkmtd.c
--- linux-2.5-import/drivers/mtd/devices/blkmtd.c Fri Aug 16 13:24:38 2002
+++ linux-2.5-lbd/drivers/mtd/devices/blkmtd.c Thu Aug 15 12:15:42 2002
@@ -163,9 +163,10 @@
 static int blkmtd_readpage(mtd_raw_dev_data_t *rawdevice, struct page *page)
 {
   int err;
- int sectornr, sectors, i;
+ sector_t sectornr;
+ int sectors, i;
   struct kiobuf *iobuf;
- unsigned long *blocks;
+ sector_t *blocks;
 
   if(!rawdevice) {
     printk("blkmtd: readpage: PANIC file->private_data == NULL\n");
@@ -224,7 +225,7 @@
 
   /* Pre 2.4.4 doesn't have space for the block list in the kiobuf */
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,4)
- blocks = kmalloc(KIO_MAX_SECTORS * sizeof(unsigned long));
+ blocks = kmalloc(KIO_MAX_SECTORS * sizeof(*blocks));
   if(blocks == NULL) {
     printk("blkmtd: cant allocate iobuf blocks\n");
     free_kiovec(1, &iobuf);
@@ -240,7 +241,7 @@
   iobuf->length = PAGE_SIZE;
   iobuf->locked = 1;
   iobuf->maplist[0] = page;
- sectornr = page->index << (PAGE_SHIFT - rawdevice->sector_bits);
+ sectornr = (sector_t)page->index << (PAGE_SHIFT - rawdevice->sector_bits);
   sectors = 1 << (PAGE_SHIFT - rawdevice->sector_bits);
   if(rawdevice->partial_last_page && page->index == rawdevice->partial_last_page) {
     DEBUG(3, "blkmtd: handling partial last page\n");
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/mtd/mtdblock.c linux-2.5-lbd/drivers/mtd/mtdblock.c
--- linux-2.5-import/drivers/mtd/mtdblock.c Fri Aug 16 13:24:37 2002
+++ linux-2.5-lbd/drivers/mtd/mtdblock.c Thu Aug 15 12:15:42 2002
@@ -46,7 +46,7 @@
 
 static spinlock_t mtdblks_lock;
 
-static int mtd_sizes[MAX_MTD_DEVICES];
+static sector_t mtd_sizes[MAX_MTD_DEVICES];
 
 /*
  * Cache stuff...
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/mtd/nftlcore.c linux-2.5-lbd/drivers/mtd/nftlcore.c
--- linux-2.5-import/drivers/mtd/nftlcore.c Fri Aug 16 13:24:37 2002
+++ linux-2.5-lbd/drivers/mtd/nftlcore.c Thu Aug 15 12:15:42 2002
@@ -824,9 +824,9 @@
 
                 DEBUG(MTD_DEBUG_LEVEL2, "NFTL_request\n");
                 DEBUG(MTD_DEBUG_LEVEL3,
- "NFTL %s request, from sector 0x%04lx for %d sectors\n",
+ "NFTL %s request, from sector 0x%04llx for %d sectors\n",
                       (req->cmd == READ) ? "Read " : "Write",
- req->sector, req->current_nr_sectors);
+ (unsigned long long)req->sector, req->current_nr_sectors);
 
                 dev = minor(req->rq_dev);
                 block = req->sector;
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/scsi/scsi.c linux-2.5-lbd/drivers/scsi/scsi.c
--- linux-2.5-import/drivers/scsi/scsi.c Fri Aug 16 13:25:16 2002
+++ linux-2.5-lbd/drivers/scsi/scsi.c Thu Aug 15 12:15:47 2002
@@ -2370,16 +2370,16 @@
                 for (SDpnt = shpnt->host_queue; SDpnt; SDpnt = SDpnt->next) {
                         for (SCpnt = SDpnt->device_queue; SCpnt; SCpnt = SCpnt->next) {
                                 /* (0) h:c:t:l (dev sect nsect cnumsec sg) (ret all flg) (to/cmd to ito) cmd snse result %d %x */
- printk(KERN_INFO "(%3d) %2d:%1d:%2d:%2d (%6s %4ld %4ld %4ld %4x %1d) (%1d %1d 0x%2x) (%4d %4d %4d) 0x%2.2x 0x%2.2x 0x%8.8x\n",
+ printk(KERN_INFO "(%3d) %2d:%1d:%2d:%2d (%6s %4llu %4ld %4ld %4x %1d) (%1d %1d 0x%2x) (%4d %4d %4d) 0x%2.2x 0x%2.2x 0x%8.8x\n",
                                        i++,
 
                                        SCpnt->host->host_no,
                                        SCpnt->channel,
- SCpnt->target,
- SCpnt->lun,
+ SCpnt->target,
+ SCpnt->lun,
 
- kdevname(SCpnt->request->rq_dev),
- SCpnt->request->sector,
+ kdevname(SCpnt->request->rq_dev),
+ (unsigned long long)SCpnt->request->sector,
                                        SCpnt->request->nr_sectors,
                                        (long)SCpnt->request->current_nr_sectors,
                                        SCpnt->request->rq_status,
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/scsi/sd.c linux-2.5-lbd/drivers/scsi/sd.c
--- linux-2.5-import/drivers/scsi/sd.c Fri Aug 16 13:25:17 2002
+++ linux-2.5-lbd/drivers/scsi/sd.c Thu Aug 22 11:17:23 2002
@@ -298,7 +298,8 @@
  **/
 static int sd_init_command(Scsi_Cmnd * SCpnt)
 {
- int dsk_nr, part_nr, block, this_count;
+ int dsk_nr, part_nr, this_count;
+ sector_t block;
         Scsi_Device *sdp;
 #if CONFIG_SCSI_LOGGING
         char nbuff[6];
@@ -315,8 +316,8 @@
         block = SCpnt->request->sector;
         this_count = SCpnt->request_bufflen >> 9;
 
- SCSI_LOG_HLQUEUE(1, printk("sd_command_init: dsk_nr=%d, block=%d, "
- "count=%d\n", dsk_nr, block, this_count));
+ SCSI_LOG_HLQUEUE(1, printk("sd_command_init: dsk_nr=%d, block=%llu, "
+ "count=%d\n", dsk_nr, (unsigned long long)block, this_count));
 
         sdp = SCpnt->device;
         /* >>>>> the "(part_nr & 0xf)" excludes 15th partition, why?? */
@@ -339,8 +340,8 @@
                 return 0;
         }
         SCSI_LOG_HLQUEUE(2, sd_dskname(dsk_nr, nbuff));
- SCSI_LOG_HLQUEUE(2, printk("%s : [part_nr=%d], block=%d\n",
- nbuff, part_nr, block));
+ SCSI_LOG_HLQUEUE(2, printk("%s : [part_nr=%d], block=%llu\n",
+ nbuff, part_nr, (unsigned long long)block));
 
         /*
          * If we have a 1K hardware sectorsize, prevent access to single
@@ -611,8 +612,8 @@
         int result = SCpnt->result;
         int this_count = SCpnt->bufflen >> 9;
         int good_sectors = (result == 0 ? this_count : 0);
- int block_sectors = 1;
- long error_sector;
+ sector_t block_sectors = 1;
+ sector_t error_sector;
 #if CONFIG_SCSI_LOGGING
         char nbuff[6];
 
@@ -947,7 +948,7 @@
                     SRpnt->sr_sense_buffer[2] == NOT_READY)
                         sdp->changed = 1;
 
- /* Either no media are present but the drive didnt tell us,
+ /* Either no media are present but the drive didn't tell us,
                    or they are present but the read capacity command fails */
                 /* sdkp->media_present = 0; -- not always correct */
                 sdkp->capacity = 0x200000; /* 1 GB - random */
@@ -955,7 +956,7 @@
                 return;
         }
 
- sdkp->capacity = 1 + ((buffer[0] << 24) |
+ sdkp->capacity = 1 + (((sector_t)buffer[0] << 24) |
                               (buffer[1] << 16) |
                               (buffer[2] << 8) |
                               buffer[3]);
@@ -991,24 +992,31 @@
                  * Jacques Gelinas (Jacques@solucorp.qc.ca)
                  */
                 int hard_sector = sector_size;
- int sz = sdkp->capacity * (hard_sector/256);
+ sector_t sz = sdkp->capacity * (hard_sector/256);
                 request_queue_t *queue = &sdp->request_queue;
+ sector_t mb;
 
                 blk_queue_hardsect_size(queue, hard_sector);
+ /* avoid 64-bit division on 32-bit platforms */
+ mb = sz >> 1;
+ sector_div(sz, 1250);
+ mb -= sz - 974;
+ sector_div(mb, 1950);
+
                 printk(KERN_NOTICE "SCSI device %s: "
- "%d %d-byte hdwr sectors (%d MB)\n",
- diskname, sdkp->capacity,
- hard_sector, (sz/2 - sz/1250 + 974)/1950);
+ "%llu %d-byte hdwr sectors (%llu MB)\n",
+ diskname, (unsigned long long)sdkp->capacity,
+ hard_sector, (unsigned long long)mb);
         }
 
         /* Rescale capacity to 512-byte units */
         if (sector_size == 4096)
                 sdkp->capacity <<= 3;
- if (sector_size == 2048)
+ else if (sector_size == 2048)
                 sdkp->capacity <<= 2;
- if (sector_size == 1024)
+ else if (sector_size == 1024)
                 sdkp->capacity <<= 1;
- if (sector_size == 256)
+ else if (sector_size == 256)
                 sdkp->capacity >>= 1;
 
         sdkp->device->sector_size = sector_size;
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/scsi/sd.h linux-2.5-lbd/drivers/scsi/sd.h
--- linux-2.5-import/drivers/scsi/sd.h Fri Aug 16 13:25:17 2002
+++ linux-2.5-lbd/drivers/scsi/sd.h Thu Aug 15 12:15:47 2002
@@ -23,7 +23,7 @@
 extern struct hd_struct *sd;
 
 typedef struct scsi_disk {
- unsigned capacity; /* size in 512-byte sectors */
+ sector_t capacity; /* size in 512-byte sectors */
         Scsi_Device *device;
         unsigned char media_present;
         unsigned char write_prot;
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/scsi/sr.c linux-2.5-lbd/drivers/scsi/sr.c
--- linux-2.5-import/drivers/scsi/sr.c Fri Aug 16 13:25:17 2002
+++ linux-2.5-lbd/drivers/scsi/sr.c Thu Aug 15 12:15:47 2002
@@ -88,7 +88,7 @@
 };
 
 Scsi_CD *scsi_CDs;
-static int *sr_sizes;
+static sector_t *sr_sizes;
 
 static int sr_open(struct cdrom_device_info *, int);
 void get_sectorsize(int);
@@ -324,7 +324,7 @@
         /*
          * request doesn't start on hw block boundary, add scatter pads
          */
- if ((SCpnt->request->sector % (s_size >> 9)) || (SCpnt->request_bufflen % s_size)) {
+ if (((unsigned int)SCpnt->request->sector % (s_size >> 9)) || (SCpnt->request_bufflen % s_size)) {
                 printk("sr: unaligned transfer\n");
                 return 0;
         }
@@ -340,7 +340,7 @@
         SCpnt->cmnd[1] = (SCpnt->device->scsi_level <= SCSI_2) ?
                          ((SCpnt->lun << 5) & 0xe0) : 0;
 
- block = SCpnt->request->sector / (s_size >> 9);
+ block = (unsigned int)SCpnt->request->sector / (s_size >> 9);
 
         if (this_count > 0xffff)
                 this_count = 0xffff;
@@ -715,10 +715,10 @@
                 goto cleanup_dev;
         memset(scsi_CDs, 0, sr_template.dev_max * sizeof(Scsi_CD));
 
- sr_sizes = kmalloc(sr_template.dev_max * sizeof(int), GFP_ATOMIC);
+ sr_sizes = kmalloc(sr_template.dev_max * sizeof(sr_sizes[0]), GFP_ATOMIC);
         if (!sr_sizes)
                 goto cleanup_cds;
- memset(sr_sizes, 0, sr_template.dev_max * sizeof(int));
+ memset(sr_sizes, 0, sr_template.dev_max * sizeof(sr_sizes[0]));
         return 0;
 
 cleanup_cds:
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/adfs/inode.c linux-2.5-lbd/fs/adfs/inode.c
--- linux-2.5-import/fs/adfs/inode.c Fri Aug 16 13:25:59 2002
+++ linux-2.5-lbd/fs/adfs/inode.c Thu Aug 15 12:15:51 2002
@@ -67,7 +67,7 @@
                 &ADFS_I(page->mapping->host)->mmu_private);
 }
 
-static int _adfs_bmap(struct address_space *mapping, long block)
+static sector_t _adfs_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping, block, adfs_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/affs/file.c linux-2.5-lbd/fs/affs/file.c
--- linux-2.5-import/fs/affs/file.c Fri Aug 16 13:26:03 2002
+++ linux-2.5-lbd/fs/affs/file.c Thu Aug 15 12:15:51 2002
@@ -337,10 +337,11 @@
         struct buffer_head *ext_bh;
         u32 ext;
 
- pr_debug("AFFS: get_block(%u, %ld)\n", (u32)inode->i_ino, block);
+ pr_debug("AFFS: get_block(%u, %lu)\n", (u32)inode->i_ino, (unsigned long)block);
 
- if (block < 0)
- goto err_small;
+
+ if (block > (sector_t)0x7fffffffUL)
+ BUG();
 
         if (block >= AFFS_I(inode)->i_blkcnt) {
                 if (block > AFFS_I(inode)->i_blkcnt || !create)
@@ -351,12 +352,12 @@
         //lock cache
         affs_lock_ext(inode);
 
- ext = block / AFFS_SB(sb)->s_hashsize;
+ ext = (u32)block / AFFS_SB(sb)->s_hashsize;
         block -= ext * AFFS_SB(sb)->s_hashsize;
         ext_bh = affs_get_extblock(inode, ext);
         if (IS_ERR(ext_bh))
                 goto err_ext;
- map_bh(bh_result, sb, be32_to_cpu(AFFS_BLOCK(sb, ext_bh, block)));
+ map_bh(bh_result, sb, (sector_t)be32_to_cpu(AFFS_BLOCK(sb, ext_bh, block)));
 
         if (create) {
                 u32 blocknr = affs_alloc_block(inode, ext_bh->b_blocknr);
@@ -421,7 +422,7 @@
         return cont_prepare_write(page, from, to, affs_get_block,
                 &AFFS_I(page->mapping->host)->mmu_private);
 }
-static int _affs_bmap(struct address_space *mapping, long block)
+static sector_t _affs_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping,block,affs_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/affs/inode.c linux-2.5-lbd/fs/affs/inode.c
--- linux-2.5-import/fs/affs/inode.c Fri Aug 16 13:26:03 2002
+++ linux-2.5-lbd/fs/affs/inode.c Thu Aug 15 12:15:51 2002
@@ -416,7 +416,7 @@
         }
         affs_fix_checksum(sb, bh);
         mark_buffer_dirty_inode(bh, inode);
- dentry->d_fsdata = (void *)bh->b_blocknr;
+ dentry->d_fsdata = (void *)(long)bh->b_blocknr;
 
         affs_lock_dir(dir);
         retval = affs_insert_hash(dir, bh);
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/bfs/file.c linux-2.5-lbd/fs/bfs/file.c
--- linux-2.5-import/fs/bfs/file.c Fri Aug 16 13:26:03 2002
+++ linux-2.5-lbd/fs/bfs/file.c Thu Aug 15 12:15:51 2002
@@ -145,7 +145,7 @@
         return block_prepare_write(page, from, to, bfs_get_block);
 }
 
-static int bfs_bmap(struct address_space *mapping, long block)
+static sector_t bfs_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping, block, bfs_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/buffer.c linux-2.5-lbd/fs/buffer.c
--- linux-2.5-import/fs/buffer.c Fri Aug 16 13:25:57 2002
+++ linux-2.5-lbd/fs/buffer.c Thu Aug 15 12:15:51 2002
@@ -1818,7 +1818,7 @@
                 unsigned from, unsigned to, get_block_t *get_block)
 {
         unsigned block_start, block_end;
- unsigned long block;
+ sector_t block;
         int err = 0;
         unsigned blocksize, bbits;
         struct buffer_head *bh, *head, *wait[2], **wait_bh=wait;
@@ -1835,7 +1835,7 @@
         head = page_buffers(page);
 
         bbits = inode->i_blkbits;
- block = page->index << (PAGE_CACHE_SHIFT - bbits);
+ block = (sector_t)page->index << (PAGE_CACHE_SHIFT - bbits);
 
         for(bh = head, block_start = 0; bh != head || !block_start;
             block++, block_start=block_end, bh = bh->b_this_page) {
@@ -1966,7 +1966,7 @@
 int block_read_full_page(struct page *page, get_block_t *get_block)
 {
         struct inode *inode = page->mapping->host;
- unsigned long iblock, lblock;
+ sector_t iblock, lblock;
         struct buffer_head *bh, *head, *arr[MAX_BUF_PER_PAGE];
         unsigned int blocksize, blocks;
         int nr, i;
@@ -1981,7 +1981,7 @@
         head = page_buffers(page);
 
         blocks = PAGE_CACHE_SIZE >> inode->i_blkbits;
- iblock = page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits);
+ iblock = (sector_t)page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits);
         lblock = (inode->i_size+blocksize-1) >> inode->i_blkbits;
         bh = head;
         nr = 0;
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/efs/inode.c linux-2.5-lbd/fs/efs/inode.c
--- linux-2.5-import/fs/efs/inode.c Fri Aug 16 13:26:04 2002
+++ linux-2.5-lbd/fs/efs/inode.c Thu Aug 15 12:15:51 2002
@@ -19,7 +19,7 @@
 {
         return block_read_full_page(page,efs_get_block);
 }
-static int _efs_bmap(struct address_space *mapping, long block)
+static sector_t _efs_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping,block,efs_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/ext2/inode.c linux-2.5-lbd/fs/ext2/inode.c
--- linux-2.5-import/fs/ext2/inode.c Fri Aug 16 13:26:04 2002
+++ linux-2.5-lbd/fs/ext2/inode.c Thu Aug 15 12:15:51 2002
@@ -601,7 +601,7 @@
         return block_prepare_write(page,from,to,ext2_get_block);
 }
 
-static int ext2_bmap(struct address_space *mapping, long block)
+static sector_t ext2_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping,block,ext2_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/ext3/ialloc.c linux-2.5-lbd/fs/ext3/ialloc.c
--- linux-2.5-import/fs/ext3/ialloc.c Fri Aug 16 13:26:04 2002
+++ linux-2.5-lbd/fs/ext3/ialloc.c Thu Aug 15 12:15:51 2002
@@ -479,9 +479,10 @@
                         !(inode = iget(sb, ino)) || is_bad_inode(inode) ||
                         NEXT_ORPHAN(inode) > max_ino) {
                 ext3_warning(sb, __FUNCTION__,
- "bad orphan inode %ld! e2fsck was run?\n", ino);
- printk(KERN_NOTICE "ext3_test_bit(bit=%d, block=%ld) = %d\n",
- bit, bitmap_bh->b_blocknr,
+ "bad orphan inode %lu! e2fsck was run?\n", (unsigned long)ino);
+ printk(KERN_NOTICE "ext3_test_bit(bit=%d, block=%llu) = %d\n",
+ bit,
+ (unsigned long long)bitmap_bh->b_blocknr,
                         ext3_test_bit(bit, bitmap_bh->b_data));
                 printk(KERN_NOTICE "inode=%p\n", inode);
                 if (inode) {
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/ext3/inode.c linux-2.5-lbd/fs/ext3/inode.c
--- linux-2.5-import/fs/ext3/inode.c Fri Aug 16 13:26:04 2002
+++ linux-2.5-lbd/fs/ext3/inode.c Thu Aug 15 12:15:51 2002
@@ -1167,7 +1167,7 @@
  * So, if we see any bmap calls here on a modified, data-journaled file,
  * take extra steps to flush any blocks which might be in the cache.
  */
-static int ext3_bmap(struct address_space *mapping, long block)
+static sector_t ext3_bmap(struct address_space *mapping, sector_t block)
 {
         struct inode *inode = mapping->host;
         journal_t *journal;
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/fat/file.c linux-2.5-lbd/fs/fat/file.c
--- linux-2.5-import/fs/fat/file.c Fri Aug 16 13:26:04 2002
+++ linux-2.5-lbd/fs/fat/file.c Thu Aug 15 12:15:51 2002
@@ -59,7 +59,7 @@
                 BUG();
                 return -EIO;
         }
- if (!(iblock % MSDOS_SB(sb)->cluster_size)) {
+ if (!((unsigned long)iblock % MSDOS_SB(sb)->cluster_size)) {
                 int error;
 
                 error = fat_add_cluster(inode);
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/fat/inode.c linux-2.5-lbd/fs/fat/inode.c
--- linux-2.5-import/fs/fat/inode.c Fri Aug 16 13:26:04 2002
+++ linux-2.5-lbd/fs/fat/inode.c Thu Aug 15 12:15:51 2002
@@ -987,7 +987,7 @@
         return cont_prepare_write(page,from,to,fat_get_block,
                 &MSDOS_I(page->mapping->host)->mmu_private);
 }
-static int _fat_bmap(struct address_space *mapping, long block)
+static sector_t _fat_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping,block,fat_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/freevxfs/vxfs_subr.c linux-2.5-lbd/fs/freevxfs/vxfs_subr.c
--- linux-2.5-import/fs/freevxfs/vxfs_subr.c Fri Aug 16 13:26:05 2002
+++ linux-2.5-lbd/fs/freevxfs/vxfs_subr.c Thu Aug 15 12:15:51 2002
@@ -43,7 +43,7 @@
 
 
 static int vxfs_readpage(struct file *, struct page *);
-static int vxfs_bmap(struct address_space *, long);
+static sector_t vxfs_bmap(struct address_space *, sector_t);
 
 struct address_space_operations vxfs_aops = {
         .readpage = vxfs_readpage,
@@ -186,8 +186,8 @@
  * Locking status:
  * We are under the bkl.
  */
-static int
-vxfs_bmap(struct address_space *mapping, long block)
+static sector_t
+vxfs_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping, block, vxfs_getblk);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/hfs/inode.c linux-2.5-lbd/fs/hfs/inode.c
--- linux-2.5-import/fs/hfs/inode.c Fri Aug 16 13:26:05 2002
+++ linux-2.5-lbd/fs/hfs/inode.c Thu Aug 15 12:15:51 2002
@@ -242,7 +242,7 @@
         return cont_prepare_write(page,from,to,hfs_get_block,
                 &HFS_I(page->mapping->host)->mmu_private);
 }
-static int hfs_bmap(struct address_space *mapping, long block)
+static sector_t hfs_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping,block,hfs_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/hpfs/file.c linux-2.5-lbd/fs/hpfs/file.c
--- linux-2.5-import/fs/hpfs/file.c Fri Aug 16 13:26:05 2002
+++ linux-2.5-lbd/fs/hpfs/file.c Thu Aug 15 12:15:51 2002
@@ -111,7 +111,7 @@
         return cont_prepare_write(page,from,to,hpfs_get_block,
                 &hpfs_i(page->mapping->host)->mmu_private);
 }
-static int _hpfs_bmap(struct address_space *mapping, long block)
+static sector_t _hpfs_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping,block,hpfs_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/inode.c linux-2.5-lbd/fs/inode.c
--- linux-2.5-import/fs/inode.c Fri Aug 16 13:25:57 2002
+++ linux-2.5-lbd/fs/inode.c Thu Aug 15 12:15:51 2002
@@ -917,9 +917,9 @@
  * file.
  */
  
-int bmap(struct inode * inode, int block)
+sector_t bmap(struct inode * inode, sector_t block)
 {
- int res = 0;
+ sector_t res = 0;
         if (inode->i_mapping->a_ops->bmap)
                 res = inode->i_mapping->a_ops->bmap(inode->i_mapping, block);
         return res;
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/isofs/inode.c linux-2.5-lbd/fs/isofs/inode.c
--- linux-2.5-import/fs/isofs/inode.c Fri Aug 16 13:26:06 2002
+++ linux-2.5-lbd/fs/isofs/inode.c Thu Aug 15 12:15:51 2002
@@ -970,7 +970,7 @@
                  */
                 if (b_off > ((inode->i_size + PAGE_CACHE_SIZE - 1) >> ISOFS_BUFFER_BITS(inode))) {
                         printk("isofs_get_blocks: block >= EOF (%ld, %ld)\n",
- iblock, (unsigned long) inode->i_size);
+ (long)iblock, (unsigned long) inode->i_size);
                         goto abort;
                 }
                 
@@ -992,7 +992,7 @@
                                 if (++section > 100) {
                                         printk("isofs_get_blocks: More than 100 file sections ?!?, aborting...\n");
                                         printk("isofs_get_blocks: ino=%lu block=%ld firstext=%u sect_size=%u nextino=%lu\n",
- inode->i_ino, iblock, firstext, (unsigned) sect_size, nextino);
+ inode->i_ino, (long)iblock, firstext, (unsigned) sect_size, nextino);
                                         goto abort;
                                 }
                         }
@@ -1044,9 +1044,9 @@
         return 0;
 }
 
-struct buffer_head *isofs_bread(struct inode *inode, unsigned int block)
+struct buffer_head *isofs_bread(struct inode *inode, sector_t block)
 {
- unsigned int blknr = isofs_bmap(inode, block);
+ sector_t blknr = isofs_bmap(inode, block);
         if (!blknr)
                 return NULL;
         return sb_bread(inode->i_sb, blknr);
@@ -1057,7 +1057,7 @@
         return block_read_full_page(page,isofs_get_block);
 }
 
-static int _isofs_bmap(struct address_space *mapping, long block)
+static sector_t _isofs_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping,block,isofs_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/jbd/commit.c linux-2.5-lbd/fs/jbd/commit.c
--- linux-2.5-import/fs/jbd/commit.c Fri Aug 16 13:26:06 2002
+++ linux-2.5-lbd/fs/jbd/commit.c Thu Aug 15 12:15:51 2002
@@ -355,8 +355,8 @@
                         }
                         
                         bh = jh2bh(descriptor);
- jbd_debug(4, "JBD: got buffer %ld (%p)\n",
- bh->b_blocknr, bh->b_data);
+ jbd_debug(4, "JBD: got buffer %llu (%p)\n",
+ (unsigned long long)bh->b_blocknr, bh->b_data);
                         header = (journal_header_t *)&bh->b_data[0];
                         header->h_magic = htonl(JFS_MAGIC_NUMBER);
                         header->h_blocktype = htonl(JFS_DESCRIPTOR_BLOCK);
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/jbd/revoke.c linux-2.5-lbd/fs/jbd/revoke.c
--- linux-2.5-import/fs/jbd/revoke.c Fri Aug 16 13:26:06 2002
+++ linux-2.5-lbd/fs/jbd/revoke.c Thu Aug 15 12:15:51 2002
@@ -388,7 +388,7 @@
                 record = find_revoke_record(journal, bh->b_blocknr);
                 if (record) {
                         jbd_debug(4, "cancelled existing revoke on "
- "blocknr %lu\n", bh->b_blocknr);
+ "blocknr %llu\n", (u64)bh->b_blocknr);
                         list_del(&record->hash);
                         kmem_cache_free(revoke_record_cache, record);
                         did_revoke = 1;
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/jfs/inode.c linux-2.5-lbd/fs/jfs/inode.c
--- linux-2.5-import/fs/jfs/inode.c Fri Aug 16 13:26:06 2002
+++ linux-2.5-lbd/fs/jfs/inode.c Thu Aug 15 12:15:52 2002
@@ -282,7 +282,7 @@
         return block_prepare_write(page, from, to, jfs_get_block);
 }
 
-static int jfs_bmap(struct address_space *mapping, long block)
+static sector_t jfs_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping, block, jfs_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/jfs/jfs_metapage.c linux-2.5-lbd/fs/jfs/jfs_metapage.c
--- linux-2.5-import/fs/jfs/jfs_metapage.c Fri Aug 16 13:26:07 2002
+++ linux-2.5-lbd/fs/jfs/jfs_metapage.c Thu Aug 15 12:15:52 2002
@@ -256,7 +256,7 @@
         return block_prepare_write(page, from, to, direct_get_block);
 }
 
-static int direct_bmap(struct address_space *mapping, long block)
+static sector_t direct_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping, block, direct_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/minix/inode.c linux-2.5-lbd/fs/minix/inode.c
--- linux-2.5-import/fs/minix/inode.c Fri Aug 16 13:26:08 2002
+++ linux-2.5-lbd/fs/minix/inode.c Thu Aug 15 12:15:52 2002
@@ -328,7 +328,7 @@
 {
         return block_prepare_write(page,from,to,minix_get_block);
 }
-static int minix_bmap(struct address_space *mapping, long block)
+static sector_t minix_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping,block,minix_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/partitions/acorn.c linux-2.5-lbd/fs/partitions/acorn.c
--- linux-2.5-import/fs/partitions/acorn.c Fri Aug 16 13:26:10 2002
+++ linux-2.5-lbd/fs/partitions/acorn.c Thu Aug 15 12:16:10 2002
@@ -17,10 +17,10 @@
 
 static struct adfs_discrecord *
 adfs_partition(struct parsed_partitions *state, char *name, char *data,
- unsigned long first_sector, int slot)
+ sector_t first_sector, int slot)
 {
         struct adfs_discrecord *dr;
- unsigned int nr_sects;
+ sector_t nr_sects;
 
         if (adfs_checkbblk(data))
                 return NULL;
@@ -42,7 +42,7 @@
 #ifdef CONFIG_ACORN_PARTITION_RISCIX
 static int
 riscix_partition(struct parsed_partitions *state, struct block_device *bdev,
- unsigned long first_sect, int slot, unsigned long nr_sects)
+ sector_t first_sect, int slot, sector_t nr_sects)
 {
         Sector sect;
         struct riscix_record *rr;
@@ -55,7 +55,7 @@
 
 
         if (rr->magic == RISCIX_MAGIC) {
- unsigned long size = nr_sects > 2 ? 2 : nr_sects;
+ sector_t size = nr_sects > 2 ? 2 : nr_sects;
                 int part;
 
                 printk(" <");
@@ -83,11 +83,11 @@
 
 static int
 linux_partition(struct parsed_partitions *state, struct block_device *bdev,
- unsigned long first_sect, int slot, unsigned long nr_sects)
+ sector_t first_sect, int slot, sector_t nr_sects)
 {
         Sector sect;
         struct linux_part *linuxp;
- unsigned long size = nr_sects > 2 ? 2 : nr_sects;
+ sector_t size = nr_sects > 2 ? 2 : nr_sects;
 
         printk(" [Linux]");
 
@@ -117,7 +117,7 @@
 static int
 adfspart_check_CUMANA(struct parsed_partitions *state, struct block_device *bdev)
 {
- unsigned long first_sector = 0;
+ sector_t first_sector = 0;
         unsigned int start_blk = 0;
         Sector sect;
         unsigned char *data;
@@ -209,7 +209,8 @@
 static int
 adfspart_check_ADFS(struct parsed_partitions *state, struct block_device *bdev)
 {
- unsigned long start_sect, nr_sects, sectscyl, heads;
+ sector_t start_sect, nr_sects, sectscyl;
+ unsigned heads;
         Sector sect;
         unsigned char *data;
         struct adfs_discrecord *dr;
@@ -268,7 +269,7 @@
 #endif
 
 #ifdef CONFIG_ACORN_PARTITION_ICS
-static int adfspart_check_ICSLinux(struct block_device *bdev, unsigned long block)
+static int adfspart_check_ICSLinux(struct block_device *bdev, sector_t block)
 {
         Sector sect;
         unsigned char *data = read_dev_sector(bdev, block, &sect);
@@ -306,7 +307,7 @@
         /*
          * Try ICS style partitions - sector 0 contains partition info.
          */
- data = read_dev_sector(bdev, 0, &sect);
+ data = read_dev_sector(bdev, (sector_t)0, &sect);
         if (!data)
                     return -1;
 
@@ -374,7 +375,7 @@
         int slot = 1;
         int i;
 
- data = read_dev_sector(bdev, 0, &sect);
+ data = read_dev_sector(bdev, (sector_t)0, &sect);
         if (!data)
                 return -1;
 
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/partitions/check.c linux-2.5-lbd/fs/partitions/check.c
--- linux-2.5-import/fs/partitions/check.c Fri Aug 16 13:26:10 2002
+++ linux-2.5-lbd/fs/partitions/check.c Fri Aug 16 09:51:56 2002
@@ -415,14 +415,14 @@
  */
 
 void register_disk(struct gendisk *gdev, kdev_t dev, unsigned minors,
- struct block_device_operations *ops, long size)
+ struct block_device_operations *ops, sector_t size)
 {
         if (!gdev)
                 return;
         grok_partitions(dev, size);
 }
 
-void grok_partitions(kdev_t dev, long size)
+void grok_partitions(kdev_t dev, sector_t size)
 {
         struct block_device *bdev;
         struct gendisk *g = get_gendisk(dev);
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/partitions/check.h linux-2.5-lbd/fs/partitions/check.h
--- linux-2.5-import/fs/partitions/check.h Fri Aug 16 13:26:10 2002
+++ linux-2.5-lbd/fs/partitions/check.h Thu Aug 15 12:16:16 2002
@@ -5,14 +5,13 @@
  * add_gd_partition adds a partitions details to the devices partition
  * description.
  */
-
 enum { MAX_PART = 256 };
 
 struct parsed_partitions {
         char name[40];
         struct {
- unsigned long from;
- unsigned long size;
+ sector_t from;
+ sector_t size;
                 int flags;
         } parts[MAX_PART];
         int next;
@@ -20,7 +19,7 @@
 };
 
 static inline void
-put_partition(struct parsed_partitions *p, int n, int from, int size)
+put_partition(struct parsed_partitions *p, int n, sector_t from, sector_t size)
 {
         if (n < p->limit) {
                 p->parts[n].from = from;
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/partitions/efi.c linux-2.5-lbd/fs/partitions/efi.c
--- linux-2.5-import/fs/partitions/efi.c Fri Aug 16 13:26:10 2002
+++ linux-2.5-lbd/fs/partitions/efi.c Thu Aug 15 12:16:16 2002
@@ -629,6 +629,7 @@
         kfree(gpt);
         printk("\n");
         return 1;
+
 }
 
 /*
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/partitions/sun.c linux-2.5-lbd/fs/partitions/sun.c
--- linux-2.5-import/fs/partitions/sun.c Fri Aug 16 13:26:11 2002
+++ linux-2.5-lbd/fs/partitions/sun.c Thu Aug 15 12:16:16 2002
@@ -63,7 +63,7 @@
         /* All Sun disks have 8 partition entries */
         spc = be16_to_cpu(label->ntrks) * be16_to_cpu(label->nsect);
         for(i=0; i < 8; i++, p++) {
- unsigned long st_sector;
+ sector_t st_sector;
                 int num_sectors;
 
                 st_sector = be32_to_cpu(p->start_cylinder) * spc;
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/qnx4/inode.c linux-2.5-lbd/fs/qnx4/inode.c
--- linux-2.5-import/fs/qnx4/inode.c Fri Aug 16 13:26:11 2002
+++ linux-2.5-lbd/fs/qnx4/inode.c Thu Aug 15 12:16:16 2002
@@ -444,7 +444,7 @@
         return cont_prepare_write(page, from, to, qnx4_get_block,
                                   &qnx4_inode->mmu_private);
 }
-static int qnx4_bmap(struct address_space *mapping, long block)
+static sector_t qnx4_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping,block,qnx4_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/reiserfs/inode.c linux-2.5-lbd/fs/reiserfs/inode.c
--- linux-2.5-import/fs/reiserfs/inode.c Fri Aug 16 13:26:11 2002
+++ linux-2.5-lbd/fs/reiserfs/inode.c Thu Aug 15 12:16:36 2002
@@ -2045,7 +2045,7 @@
 }
 
 
-static int reiserfs_aop_bmap(struct address_space *as, long block) {
+static sector_t reiserfs_aop_bmap(struct address_space *as, sector_t block) {
   return generic_block_bmap(as, block, reiserfs_bmap) ;
 }
 
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/reiserfs/journal.c linux-2.5-lbd/fs/reiserfs/journal.c
--- linux-2.5-import/fs/reiserfs/journal.c Fri Aug 16 13:26:11 2002
+++ linux-2.5-lbd/fs/reiserfs/journal.c Thu Aug 15 12:16:36 2002
@@ -1017,15 +1017,15 @@
     ** is not marked JDirty_wait
     */
     if ((!was_jwait) && !buffer_locked(saved_bh)) {
-printk("journal-813: BAD! buffer %lu %cdirty %cjwait, not in a newer tranasction\n", saved_bh->b_blocknr,
+printk("journal-813: BAD! buffer %llu %cdirty %cjwait, not in a newer tranasction\n", (unsigned long long)saved_bh->b_blocknr,
         was_dirty ? ' ' : '!', was_jwait ? ' ' : '!') ;
     }
     /* kupdate_one_transaction waits on the buffers it is writing, so we
     ** should never see locked buffers here
     */
     if (buffer_locked(saved_bh)) {
- printk("clm-2083: locked buffer %lu in flush_journal_list\n",
- saved_bh->b_blocknr) ;
+ printk("clm-2083: locked buffer %llu in flush_journal_list\n",
+ (unsigned long long)saved_bh->b_blocknr) ;
       wait_on_buffer(saved_bh) ;
       if (!buffer_uptodate(saved_bh)) {
         reiserfs_panic(s, "journal-923: buffer write failed\n") ;
@@ -1038,8 +1038,8 @@
       submit_logged_buffer(saved_bh) ;
       count++ ;
     } else {
- printk("clm-2082: Unable to flush buffer %lu in flush_journal_list\n",
- saved_bh->b_blocknr) ;
+ printk("clm-2082: Unable to flush buffer %llu in flush_journal_list\n",
+ (unsigned long long)saved_bh->b_blocknr) ;
     }
 free_cnode:
     last = cn ;
@@ -2364,7 +2364,7 @@
   ** could get to disk too early. NOT GOOD.
   */
   if (!prepared || buffer_locked(bh)) {
- printk("journal-1777: buffer %lu bad state %cPREPARED %cLOCKED %cDIRTY %cJDIRTY_WAIT\n", bh->b_blocknr, prepared ? ' ' : '!',
+ printk("journal-1777: buffer %llu bad state %cPREPARED %cLOCKED %cDIRTY %cJDIRTY_WAIT\n", (unsigned long long)bh->b_blocknr, prepared ? ' ' : '!',
                             buffer_locked(bh) ? ' ' : '!',
                             buffer_dirty(bh) ? ' ' : '!',
                             buffer_journal_dirty(bh) ? ' ' : '!') ;
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/reiserfs/prints.c linux-2.5-lbd/fs/reiserfs/prints.c
--- linux-2.5-import/fs/reiserfs/prints.c Fri Aug 16 13:26:11 2002
+++ linux-2.5-lbd/fs/reiserfs/prints.c Thu Aug 15 12:16:36 2002
@@ -139,8 +139,8 @@
 
 static void sprintf_buffer_head (char * buf, struct buffer_head * bh)
 {
- sprintf (buf, "dev %s, size %d, blocknr %ld, count %d, state 0x%lx, page %p, (%s, %s, %s)",
- bdevname (bh->b_bdev), bh->b_size, bh->b_blocknr,
+ sprintf (buf, "dev %s, size %d, blocknr %llu, count %d, state 0x%lx, page %p, (%s, %s, %s)",
+ bdevname (bh->b_bdev), bh->b_size, (unsigned long long)bh->b_blocknr,
            atomic_read (&(bh->b_count)),
            bh->b_state, bh->b_page,
            buffer_uptodate (bh) ? "UPTODATE" : "!UPTODATE",
@@ -367,7 +367,7 @@
     if (tb) {
         while (tb->insert_size[h]) {
             bh = PATH_H_PBUFFER (path, h);
- printk ("block %lu (level=%d), position %d\n", bh ? bh->b_blocknr : 0,
+ printk ("block %llu (level=%d), position %d\n", bh ? (unsigned long long)bh->b_blocknr : 0LL,
                     bh ? B_LEVEL (bh) : 0, PATH_H_POSITION (path, h));
             h ++;
         }
@@ -377,8 +377,8 @@
       printk ("Offset Bh (b_blocknr, b_count) Position Nr_item\n");
       while ( offset > ILLEGAL_PATH_ELEMENT_OFFSET ) {
           bh = PATH_OFFSET_PBUFFER (path, offset);
- printk ("%6d %10p (%9lu, %7d) %8d %7d\n", offset,
- bh, bh ? bh->b_blocknr : 0, bh ? atomic_read (&(bh->b_count)) : 0,
+ printk ("%6d %10p (%9llu, %7d) %8d %7d\n", offset,
+ bh, bh ? (unsigned long long)bh->b_blocknr : 0LL, bh ? atomic_read (&(bh->b_count)) : 0,
                   PATH_OFFSET_POSITION (path, offset), bh ? B_NR_ITEMS (bh) : -1);
           
           offset --;
@@ -510,8 +510,8 @@
         return 1;
     }
 
- printk ("%s\'s super block is in block %ld\n", bdevname (bh->b_bdev),
- bh->b_blocknr);
+ printk ("%s\'s super block is in block %llu\n", bdevname (bh->b_bdev),
+ (unsigned long long)bh->b_blocknr);
     printk ("Reiserfs version %s\n", version );
     printk ("Block count %u\n", sb_block_count(rs));
     printk ("Blocksize %d\n", sb_blocksize(rs));
@@ -547,8 +547,8 @@
     if (memcmp(desc->j_magic, JOURNAL_DESC_MAGIC, 8))
         return 1;
 
- printk ("Desc block %lu (j_trans_id %d, j_mount_id %d, j_len %d)",
- bh->b_blocknr, desc->j_trans_id, desc->j_mount_id, desc->j_len);
+ printk ("Desc block %llu (j_trans_id %d, j_mount_id %d, j_len %d)",
+ (unsigned long long)bh->b_blocknr, desc->j_trans_id, desc->j_mount_id, desc->j_len);
 
     return 0;
 }
@@ -573,7 +573,7 @@
         if (print_internal (bh, first, last))
             if (print_super_block (bh))
                 if (print_desc_block (bh))
- printk ("Block %ld contains unformatted data\n", bh->b_blocknr);
+ printk ("Block %llu contains unformatted data\n", (unsigned long long)bh->b_blocknr);
 }
 
 
@@ -608,19 +608,19 @@
             tbFh = 0;
         }
         sprintf (print_tb_buf + strlen (print_tb_buf),
- "* %d * %3ld(%2d) * %3ld(%2d) * %3ld(%2d) * %5ld * %5ld * %5ld * %5ld * %5ld *\n",
+ "* %d * %3lld(%2d) * %3lld(%2d) * %3lld(%2d) * %5lld * %5lld * %5lld * %5lld * %5lld *\n",
                  h,
- (tbSh) ? (tbSh->b_blocknr):(-1),
+ (tbSh) ? (long long)(tbSh->b_blocknr):(-1LL),
                  (tbSh) ? atomic_read (&(tbSh->b_count)) : -1,
- (tb->L[h]) ? (tb->L[h]->b_blocknr):(-1),
+ (tb->L[h]) ? (long long)(tb->L[h]->b_blocknr):(-1LL),
                  (tb->L[h]) ? atomic_read (&(tb->L[h]->b_count)) : -1,
- (tb->R[h]) ? (tb->R[h]->b_blocknr):(-1),
+ (tb->R[h]) ? (long long)(tb->R[h]->b_blocknr):(-1LL),
                  (tb->R[h]) ? atomic_read (&(tb->R[h]->b_count)) : -1,
- (tbFh) ? (tbFh->b_blocknr):(-1),
- (tb->FL[h]) ? (tb->FL[h]->b_blocknr):(-1),
- (tb->FR[h]) ? (tb->FR[h]->b_blocknr):(-1),
- (tb->CFL[h]) ? (tb->CFL[h]->b_blocknr):(-1),
- (tb->CFR[h]) ? (tb->CFR[h]->b_blocknr):(-1));
+ (tbFh) ? (long long)(tbFh->b_blocknr):(-1LL),
+ (tb->FL[h]) ? (long long)(tb->FL[h]->b_blocknr):(-1LL),
+ (tb->FR[h]) ? (long long)(tb->FR[h]->b_blocknr):(-1LL),
+ (tb->CFL[h]) ? (long long)(tb->CFL[h]->b_blocknr):(-1LL),
+ (tb->CFR[h]) ? (long long)(tb->CFR[h]->b_blocknr):(-1LL));
     }
 
     sprintf (print_tb_buf + strlen (print_tb_buf),
@@ -647,7 +647,7 @@
     h = 0;
     for (i = 0; i < sizeof (tb->FEB) / sizeof (tb->FEB[0]); i ++)
         sprintf (print_tb_buf + strlen (print_tb_buf),
- "%p (%lu %d)%s", tb->FEB[i], tb->FEB[i] ? tb->FEB[i]->b_blocknr : 0,
+ "%p (%llu %d)%s", tb->FEB[i], tb->FEB[i] ? (unsigned long long)tb->FEB[i]->b_blocknr : 0ULL,
                  tb->FEB[i] ? atomic_read (&(tb->FEB[i]->b_count)) : 0,
                  (i == sizeof (tb->FEB) / sizeof (tb->FEB[0]) - 1) ? "\n" : ", ");
 
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/reiserfs/super.c linux-2.5-lbd/fs/reiserfs/super.c
--- linux-2.5-import/fs/reiserfs/super.c Fri Aug 16 13:26:11 2002
+++ linux-2.5-lbd/fs/reiserfs/super.c Thu Aug 15 12:16:36 2002
@@ -838,8 +838,8 @@
     rs = (struct reiserfs_super_block *)bh->b_data;
     if (sb_blocksize(rs) != s->s_blocksize) {
         printk ("sh-2011: read_super_block: "
- "can't find a reiserfs filesystem on (dev %s, block %lu, size %lu)\n",
- reiserfs_bdevname (s), bh->b_blocknr, s->s_blocksize);
+ "can't find a reiserfs filesystem on (dev %s, block %Lu, size %lu)\n",
+ reiserfs_bdevname (s), (unsigned long long)bh->b_blocknr, s->s_blocksize);
         brelse (bh);
         return 1;
     }
@@ -902,7 +902,7 @@
     ll_rw_block(READ, 1, &(SB_AP_BITMAP(s)[i])) ;
     wait_on_buffer(SB_AP_BITMAP(s)[i]) ;
     if (!buffer_uptodate(SB_AP_BITMAP(s)[i])) {
- printk("reread_meta_blocks, error reading bitmap block number %d at %ld\n", i, SB_AP_BITMAP(s)[i]->b_blocknr) ;
+ printk("reread_meta_blocks, error reading bitmap block number %d at %lld\n", i, (long long)SB_AP_BITMAP(s)[i]->b_blocknr) ;
       return 1 ;
     }
   }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/sysv/itree.c linux-2.5-lbd/fs/sysv/itree.c
--- linux-2.5-import/fs/sysv/itree.c Fri Aug 16 13:26:12 2002
+++ linux-2.5-lbd/fs/sysv/itree.c Thu Aug 15 12:16:36 2002
@@ -459,7 +459,7 @@
 {
         return block_prepare_write(page,from,to,get_block);
 }
-static int sysv_bmap(struct address_space *mapping, long block)
+static sector_t sysv_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping,block,get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/udf/inode.c linux-2.5-lbd/fs/udf/inode.c
--- linux-2.5-import/fs/udf/inode.c Fri Aug 16 13:26:12 2002
+++ linux-2.5-lbd/fs/udf/inode.c Thu Aug 15 12:16:36 2002
@@ -146,7 +146,7 @@
         return block_prepare_write(page, from, to, udf_get_block);
 }
 
-static int udf_bmap(struct address_space *mapping, long block)
+static sector_t udf_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping,block,udf_get_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/fs/ufs/inode.c linux-2.5-lbd/fs/ufs/inode.c
--- linux-2.5-import/fs/ufs/inode.c Wed Aug 21 11:07:48 2002
+++ linux-2.5-lbd/fs/ufs/inode.c Thu Aug 22 08:47:12 2002
@@ -457,7 +457,7 @@
 {
         return block_prepare_write(page,from,to,ufs_getfrag_block);
 }
-static int ufs_bmap(struct address_space *mapping, long block)
+static sector_t ufs_bmap(struct address_space *mapping, sector_t block)
 {
         return generic_block_bmap(mapping,block,ufs_getfrag_block);
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/include/asm-i386/types.h linux-2.5-lbd/include/asm-i386/types.h
--- linux-2.5-import/include/asm-i386/types.h Fri Aug 16 13:26:23 2002
+++ linux-2.5-lbd/include/asm-i386/types.h Thu Aug 15 12:16:39 2002
@@ -52,6 +52,11 @@
 #endif
 typedef u64 dma64_addr_t;
 
+#ifdef CONFIG_LBD
+typedef u64 sector_t;
+#define HAVE_SECTOR_T
+#endif
+
 #endif /* __KERNEL__ */
 
 #endif
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/include/asm-ppc/types.h linux-2.5-lbd/include/asm-ppc/types.h
--- linux-2.5-import/include/asm-ppc/types.h Fri Aug 16 13:26:38 2002
+++ linux-2.5-lbd/include/asm-ppc/types.h Thu Aug 15 12:16:43 2002
@@ -48,6 +48,11 @@
 typedef u32 dma_addr_t;
 typedef u64 dma64_addr_t;
 
+#ifdef CONFIG_LBD
+typedef u64 sector_t;
+#define HAVE_SECTOR_T
+#endif
+
 #endif /* __KERNEL__ */
 
 /*
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/include/linux/blkdev.h linux-2.5-lbd/include/linux/blkdev.h
--- linux-2.5-import/include/linux/blkdev.h Mon Aug 19 13:07:08 2002
+++ linux-2.5-lbd/include/linux/blkdev.h Thu Aug 22 08:47:12 2002
@@ -37,7 +37,7 @@
         int errors;
         sector_t sector;
         unsigned long nr_sectors;
- unsigned long hard_sector; /* the hard_* are block layer
+ sector_t hard_sector; /* the hard_* are block layer
                                          * internals, no driver should
                                          * touch them
                                          */
@@ -281,10 +281,10 @@
 
 extern struct sec_size * blk_sec[MAX_BLKDEV];
 extern struct blk_dev_struct blk_dev[MAX_BLKDEV];
-extern void grok_partitions(kdev_t dev, long size);
+extern void grok_partitions(kdev_t dev, sector_t size);
 extern int wipe_partitions(kdev_t dev);
-extern void register_disk(struct gendisk *dev, kdev_t first, unsigned minors, struct block_device_operations *ops, long size);
 extern void check_partition(struct gendisk *disk, struct block_device *bdev);
+extern void register_disk(struct gendisk *dev, kdev_t first, unsigned minors, struct block_device_operations *ops, sector_t size);
 extern void generic_make_request(struct bio *bio);
 extern inline request_queue_t *bdev_get_queue(struct block_device *bdev);
 extern void blk_put_request(struct request *);
@@ -344,7 +344,7 @@
 extern void blk_queue_free_tags(request_queue_t *);
 extern void blk_queue_invalidate_tags(request_queue_t *);
 
-extern int * blk_size[MAX_BLKDEV]; /* in units of 1024 bytes */
+extern sector_t *blk_size[MAX_BLKDEV]; /* in units of 1024 bytes */
 
 #define MAX_PHYS_SEGMENTS 128
 #define MAX_HW_SEGMENTS 128
@@ -403,5 +403,21 @@
 {
         page_cache_release(p.v);
 }
+
+#ifdef CONFIG_LBD
+# include <asm/div64.h>
+# define sector_div(a, b) do_div(a, b)
+#else
+# define sector_div(n, b)( \
+{ \
+ int _res; \
+ _res = (n) % (b); \
+ (n) /= (b); \
+ _res; \
+} \
+)
+#endif
+
+
 
 #endif
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/include/linux/fs.h linux-2.5-lbd/include/linux/fs.h
--- linux-2.5-import/include/linux/fs.h Wed Aug 21 11:07:49 2002
+++ linux-2.5-lbd/include/linux/fs.h Thu Aug 22 08:47:12 2002
@@ -304,7 +304,7 @@
         int (*prepare_write)(struct file *, struct page *, unsigned, unsigned);
         int (*commit_write)(struct file *, struct page *, unsigned, unsigned);
         /* Unfortunately this kludge is needed for FIBMAP. Don't use it */
- int (*bmap)(struct address_space *, long);
+ sector_t (*bmap)(struct address_space *, sector_t);
         int (*invalidatepage) (struct page *, unsigned long);
         int (*releasepage) (struct page *, int);
         int (*direct_IO)(int, struct inode *, char *buf,
@@ -355,7 +355,7 @@
         int bd_holders;
         struct block_device * bd_contains;
         unsigned bd_block_size;
- unsigned long bd_offset;
+ sector_t bd_offset;
         unsigned bd_part_count;
         int bd_invalidated;
 };
@@ -1138,7 +1138,7 @@
 extern int filemap_fdatawrite(struct address_space *);
 extern int filemap_fdatawait(struct address_space *);
 extern void sync_supers(void);
-extern int bmap(struct inode *, int);
+extern sector_t bmap(struct inode *, sector_t);
 extern int notify_change(struct dentry *, struct iattr *);
 extern int permission(struct inode *, int);
 extern int vfs_permission(struct inode *, int);
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/include/linux/genhd.h linux-2.5-lbd/include/linux/genhd.h
--- linux-2.5-import/include/linux/genhd.h Fri Aug 16 13:26:57 2002
+++ linux-2.5-lbd/include/linux/genhd.h Thu Aug 15 12:16:47 2002
@@ -59,8 +59,8 @@
 # include <linux/devfs_fs_kernel.h>
 
 struct hd_struct {
- unsigned long start_sect;
- unsigned long nr_sects;
+ sector_t start_sect;
+ sector_t nr_sects;
         devfs_handle_t de; /* primary (master) devfs entry */
         int number; /* stupid old code wastes space */
         struct device hd_driverfs_dev; /* support driverfs hiearchy */
@@ -90,7 +90,7 @@
 extern void add_gendisk(struct gendisk *gp);
 extern void del_gendisk(struct gendisk *gp);
 extern struct gendisk *get_gendisk(kdev_t dev);
-static inline unsigned long get_start_sect(struct block_device *bdev)
+static inline sector_t get_start_sect(struct block_device *bdev)
 {
         return bdev->bd_offset;
 }
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/include/linux/iso_fs.h linux-2.5-lbd/include/linux/iso_fs.h
--- linux-2.5-import/include/linux/iso_fs.h Fri Aug 16 13:26:58 2002
+++ linux-2.5-lbd/include/linux/iso_fs.h Thu Aug 15 12:16:48 2002
@@ -230,7 +230,7 @@
 int get_acorn_filename(struct iso_directory_record *, char *, struct inode *);
 
 extern struct dentry *isofs_lookup(struct inode *, struct dentry *);
-extern struct buffer_head *isofs_bread(struct inode *, unsigned int);
+extern struct buffer_head *isofs_bread(struct inode *, sector_t);
 extern int isofs_get_blocks(struct inode *, sector_t, struct buffer_head **, unsigned long);
 
 extern struct inode_operations isofs_dir_inode_operations;
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/include/linux/loop.h linux-2.5-lbd/include/linux/loop.h
--- linux-2.5-import/include/linux/loop.h Fri Aug 16 13:26:59 2002
+++ linux-2.5-lbd/include/linux/loop.h Thu Aug 15 12:16:48 2002
@@ -33,7 +33,7 @@
         int lo_flags;
         int (*transfer)(struct loop_device *, int cmd,
                                     char *raw_buf, char *loop_buf, int size,
- int real_block);
+ sector_t real_block);
         char lo_name[LO_NAME_SIZE];
         char lo_encrypt_key[LO_KEY_SIZE];
         __u32 lo_init[2];
@@ -121,7 +121,7 @@
 struct loop_func_table {
         int number; /* filter type */
         int (*transfer)(struct loop_device *lo, int cmd, char *raw_buf,
- char *loop_buf, int size, int real_block);
+ char *loop_buf, int size, sector_t real_block);
         int (*init)(struct loop_device *, struct loop_info *);
         /* release is called from loop_unregister_transfer or clr_fd */
         int (*release)(struct loop_device *);
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/include/linux/raid/md.h linux-2.5-lbd/include/linux/raid/md.h
--- linux-2.5-import/include/linux/raid/md.h Fri Aug 16 13:27:06 2002
+++ linux-2.5-lbd/include/linux/raid/md.h Thu Aug 15 12:16:49 2002
@@ -60,7 +60,7 @@
 #define MD_MINOR_VERSION 90
 #define MD_PATCHLEVEL_VERSION 0
 
-extern int md_size[MAX_MD_DEVS];
+extern sector_t md_size[MAX_MD_DEVS];
 extern struct hd_struct md_hd_struct[MAX_MD_DEVS];
 
 extern char * partition_name (kdev_t dev);
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/include/linux/raid/md_k.h linux-2.5-lbd/include/linux/raid/md_k.h
--- linux-2.5-import/include/linux/raid/md_k.h Fri Aug 16 13:27:06 2002
+++ linux-2.5-lbd/include/linux/raid/md_k.h Thu Aug 15 12:16:49 2002
@@ -144,7 +144,7 @@
 {
         struct list_head same_set; /* RAID devices within the same set */
 
- unsigned long size; /* Device size (in blocks) */
+ sector_t size; /* Device size (in blocks) */
         mddev_t *mddev; /* RAID array if running */
         unsigned long last_events; /* IO event timestamp */
 
@@ -152,7 +152,7 @@
 
         struct page *sb_page;
         mdp_super_t *sb;
- unsigned long sb_offset;
+ sector_t sb_offset;
 
         int alias_device; /* device alias to the same disk */
         int faulty; /* if faulty do not issue IO requests */
@@ -348,5 +348,5 @@
         __wait_disk_event(wq, condition); \
 } while (0)
 
-#endif
+#endif
 
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/include/linux/types.h linux-2.5-lbd/include/linux/types.h
--- linux-2.5-import/include/linux/types.h Fri Aug 16 13:27:04 2002
+++ linux-2.5-lbd/include/linux/types.h Thu Aug 15 12:16:49 2002
@@ -117,13 +117,11 @@
 #endif
 
 /*
- * transition to 64-bit sector_t, possibly making it an option...
+ * The type used for indexing onto a disc or disc partition.
+ * If required, asm/types.h can override it and define
+ * HAVE_SECTOR_T
  */
-#undef BLK_64BIT_SECTOR
-
-#ifdef BLK_64BIT_SECTOR
-typedef u64 sector_t;
-#else
+#ifndef HAVE_SECTOR_T
 typedef unsigned long sector_t;
 #endif
 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Aug 23 2002 - 22:00:24 EST