Large Block Device patch part 3 of 9

From: Peter Chubb (peter@chubb.wattle.id.au)
Date: Fri Aug 23 2002 - 00:50:22 EST


This part fixes the partitioning code to use sector_t not long.
I've cc'd it to Al Viro as he's been working in this area.

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
# ChangeSet 1.510 -> 1.511
# drivers/block/blkpg.c 1.39 -> 1.40
# include/linux/genhd.h 1.13 -> 1.14
# include/linux/blkdev.h 1.59 -> 1.60
# include/linux/fs.h 1.156 -> 1.157
# fs/partitions/check.c 1.44 -> 1.45
# fs/partitions/check.h 1.7 -> 1.8
# fs/partitions/acorn.c 1.8 -> 1.9
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/08/23 peterc@numbat.chubb.wattle.id.au 1.511
# Allow partitions to be specified in terms of sector_t not long.
# This allows 32-bit platforms with the right config options
# to address enormous partitions.
# --------------------------------------------
#
diff -Nru a/drivers/block/blkpg.c b/drivers/block/blkpg.c
--- a/drivers/block/blkpg.c Fri Aug 23 14:17:46 2002
+++ b/drivers/block/blkpg.c Fri Aug 23 14:17:46 2002
@@ -68,7 +68,7 @@
 {
         struct gendisk *g;
         long long ppstart, pplength;
- long pstart, plength;
+ sector_t pstart, plength;
         int i;
         kdev_t dev = to_kdev_t(bdev->bd_dev);
         struct hd_struct *part;
@@ -78,8 +78,9 @@
         pplength = (p->length >> 9);
         pstart = ppstart;
         plength = pplength;
- if (pstart != ppstart || plength != pplength
- || pstart < 0 || plength < 0)
+ if (sizeof(pstart) != sizeof(ppstart) &&
+ (pstart != ppstart || plength != pplength
+ || pstart < 0 || plength < 0))
                 return -EINVAL;
 
         /* find the drive major */
diff -Nru a/fs/partitions/acorn.c b/fs/partitions/acorn.c
--- a/fs/partitions/acorn.c Fri Aug 23 14:17:46 2002
+++ b/fs/partitions/acorn.c Fri Aug 23 14:17:46 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 -Nru a/fs/partitions/check.c b/fs/partitions/check.c
--- a/fs/partitions/check.c Fri Aug 23 14:17:46 2002
+++ b/fs/partitions/check.c Fri Aug 23 14:17:46 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 -Nru a/fs/partitions/check.h b/fs/partitions/check.h
--- a/fs/partitions/check.h Fri Aug 23 14:17:46 2002
+++ b/fs/partitions/check.h Fri Aug 23 14:17:46 2002
@@ -11,8 +11,8 @@
 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 +20,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 -Nru a/include/linux/blkdev.h b/include/linux/blkdev.h
--- a/include/linux/blkdev.h Fri Aug 23 14:17:46 2002
+++ b/include/linux/blkdev.h Fri Aug 23 14:17:46 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 *);
diff -Nru a/include/linux/fs.h b/include/linux/fs.h
--- a/include/linux/fs.h Fri Aug 23 14:17:46 2002
+++ b/include/linux/fs.h Fri Aug 23 14:17:46 2002
@@ -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;
 };
diff -Nru a/include/linux/genhd.h b/include/linux/genhd.h
--- a/include/linux/genhd.h Fri Aug 23 14:17:46 2002
+++ b/include/linux/genhd.h Fri Aug 23 14:17:46 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;
 }
-
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:26 EST