block: replace @ext_minors with GENHD_FL_EXT_DEVT
authorTejun Heo <tj@kernel.org>
Mon, 25 Aug 2008 10:56:16 +0000 (19:56 +0900)
committerJens Axboe <jens.axboe@oracle.com>
Thu, 9 Oct 2008 06:56:08 +0000 (08:56 +0200)
With previous changes, it's meaningless to limit the number of
partitions.  Replace @ext_minors with GENHD_FL_EXT_DEVT such that
setting the flag allows the disk to have maximum number of allowed
partitions (only limited by the number of entries in parsed_partitions
as determined by MAX_PART constant).

This kills not-too-pretty alloc_disk_ext[_node]() functions and makes
@minors parameter to alloc_disk[_node]() unnecessary.  The parameter
is left alone to avoid disturbing the users.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/genhd.c
drivers/ide/ide-disk.c
drivers/scsi/sd.c
fs/partitions/check.h
include/linux/genhd.h

index c2b14aa..eedab5b 100644 (file)
@@ -1024,18 +1024,9 @@ struct gendisk *alloc_disk(int minors)
 {
        return alloc_disk_node(minors, -1);
 }
 {
        return alloc_disk_node(minors, -1);
 }
+EXPORT_SYMBOL(alloc_disk);
 
 struct gendisk *alloc_disk_node(int minors, int node_id)
 
 struct gendisk *alloc_disk_node(int minors, int node_id)
-{
-       return alloc_disk_ext_node(minors, 0, node_id);
-}
-
-struct gendisk *alloc_disk_ext(int minors, int ext_minors)
-{
-       return alloc_disk_ext_node(minors, ext_minors, -1);
-}
-
-struct gendisk *alloc_disk_ext_node(int minors, int ext_minors, int node_id)
 {
        struct gendisk *disk;
 
 {
        struct gendisk *disk;
 
@@ -1054,7 +1045,6 @@ struct gendisk *alloc_disk_ext_node(int minors, int ext_minors, int node_id)
                disk->part_tbl->part[0] = &disk->part0;
 
                disk->minors = minors;
                disk->part_tbl->part[0] = &disk->part0;
 
                disk->minors = minors;
-               disk->ext_minors = ext_minors;
                rand_initialize_disk(disk);
                disk_to_dev(disk)->class = &block_class;
                disk_to_dev(disk)->type = &disk_type;
                rand_initialize_disk(disk);
                disk_to_dev(disk)->class = &block_class;
                disk_to_dev(disk)->type = &disk_type;
@@ -1065,11 +1055,7 @@ struct gendisk *alloc_disk_ext_node(int minors, int ext_minors, int node_id)
        }
        return disk;
 }
        }
        return disk;
 }
-
-EXPORT_SYMBOL(alloc_disk);
 EXPORT_SYMBOL(alloc_disk_node);
 EXPORT_SYMBOL(alloc_disk_node);
-EXPORT_SYMBOL(alloc_disk_ext);
-EXPORT_SYMBOL(alloc_disk_ext_node);
 
 struct kobject *get_disk(struct gendisk *disk)
 {
 
 struct kobject *get_disk(struct gendisk *disk)
 {
index a072df5..29c8ae7 100644 (file)
 #include <asm/io.h>
 #include <asm/div64.h>
 
 #include <asm/io.h>
 #include <asm/div64.h>
 
-#define IDE_DISK_PARTS         (1 << PARTN_BITS)
-
 #if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT)
 #if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT)
-#define IDE_DISK_MINORS                IDE_DISK_PARTS
+#define IDE_DISK_MINORS                (1 << PARTN_BITS)
 #else
 #define IDE_DISK_MINORS                1
 #endif
 
 #else
 #define IDE_DISK_MINORS                1
 #endif
 
-#define IDE_DISK_EXT_MINORS    (IDE_DISK_PARTS - IDE_DISK_MINORS)
-
 struct ide_disk_obj {
        ide_drive_t     *drive;
        ide_driver_t    *driver;
 struct ide_disk_obj {
        ide_drive_t     *drive;
        ide_driver_t    *driver;
@@ -1161,8 +1157,7 @@ static int ide_disk_probe(ide_drive_t *drive)
        if (!idkp)
                goto failed;
 
        if (!idkp)
                goto failed;
 
-       g = alloc_disk_ext_node(IDE_DISK_MINORS, IDE_DISK_EXT_MINORS,
-                               hwif_to_node(drive->hwif));
+       g = alloc_disk_node(IDE_DISK_MINORS, hwif_to_node(drive->hwif));
        if (!g)
                goto out_free_idkp;
 
        if (!g)
                goto out_free_idkp;
 
@@ -1189,9 +1184,10 @@ static int ide_disk_probe(ide_drive_t *drive)
                drive->attach = 1;
 
        g->minors = IDE_DISK_MINORS;
                drive->attach = 1;
 
        g->minors = IDE_DISK_MINORS;
-       g->ext_minors = IDE_DISK_EXT_MINORS;
        g->driverfs_dev = &drive->gendev;
        g->driverfs_dev = &drive->gendev;
-       g->flags = drive->removable ? GENHD_FL_REMOVABLE : 0;
+       g->flags |= GENHD_FL_EXT_DEVT;
+       if (drive->removable)
+               g->flags |= GENHD_FL_REMOVABLE;
        set_capacity(g, idedisk_capacity(drive));
        g->fops = &idedisk_ops;
        add_disk(g);
        set_capacity(g, idedisk_capacity(drive));
        g->fops = &idedisk_ops;
        add_disk(g);
index 280d231..6598024 100644 (file)
@@ -86,16 +86,12 @@ MODULE_ALIAS_SCSI_DEVICE(TYPE_DISK);
 MODULE_ALIAS_SCSI_DEVICE(TYPE_MOD);
 MODULE_ALIAS_SCSI_DEVICE(TYPE_RBC);
 
 MODULE_ALIAS_SCSI_DEVICE(TYPE_MOD);
 MODULE_ALIAS_SCSI_DEVICE(TYPE_RBC);
 
-#define SD_PARTS       64
-
 #if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT)
 #define SD_MINORS      16
 #else
 #define SD_MINORS      1
 #endif
 
 #if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT)
 #define SD_MINORS      16
 #else
 #define SD_MINORS      1
 #endif
 
-#define SD_EXT_MINORS  (SD_PARTS - SD_MINORS)
-
 static int  sd_revalidate_disk(struct gendisk *);
 static int  sd_probe(struct device *);
 static int  sd_remove(struct device *);
 static int  sd_revalidate_disk(struct gendisk *);
 static int  sd_probe(struct device *);
 static int  sd_remove(struct device *);
@@ -1811,7 +1807,7 @@ static int sd_probe(struct device *dev)
        if (!sdkp)
                goto out;
 
        if (!sdkp)
                goto out;
 
-       gd = alloc_disk_ext(SD_MINORS, SD_EXT_MINORS);
+       gd = alloc_disk(SD_MINORS);
        if (!gd)
                goto out_free;
 
        if (!gd)
                goto out_free;
 
@@ -1856,7 +1852,6 @@ static int sd_probe(struct device *dev)
        gd->major = sd_major((index & 0xf0) >> 4);
        gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00);
        gd->minors = SD_MINORS;
        gd->major = sd_major((index & 0xf0) >> 4);
        gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00);
        gd->minors = SD_MINORS;
-       gd->ext_minors = SD_EXT_MINORS;
        gd->fops = &sd_fops;
 
        if (index < 26) {
        gd->fops = &sd_fops;
 
        if (index < 26) {
@@ -1880,7 +1875,7 @@ static int sd_probe(struct device *dev)
        blk_queue_prep_rq(sdp->request_queue, sd_prep_fn);
 
        gd->driverfs_dev = &sdp->sdev_gendev;
        blk_queue_prep_rq(sdp->request_queue, sd_prep_fn);
 
        gd->driverfs_dev = &sdp->sdev_gendev;
-       gd->flags = GENHD_FL_DRIVERFS;
+       gd->flags = GENHD_FL_EXT_DEVT | GENHD_FL_DRIVERFS;
        if (sdp->removable)
                gd->flags |= GENHD_FL_REMOVABLE;
 
        if (sdp->removable)
                gd->flags |= GENHD_FL_REMOVABLE;
 
index 17ae8ec..98dbe1a 100644 (file)
@@ -5,15 +5,13 @@
  * add_gd_partition adds a partitions details to the devices partition
  * description.
  */
  * add_gd_partition adds a partitions details to the devices partition
  * description.
  */
-enum { MAX_PART = 256 };
-
 struct parsed_partitions {
        char name[BDEVNAME_SIZE];
        struct {
                sector_t from;
                sector_t size;
                int flags;
 struct parsed_partitions {
        char name[BDEVNAME_SIZE];
        struct {
                sector_t from;
                sector_t size;
                int flags;
-       } parts[MAX_PART];
+       } parts[DISK_MAX_PARTS];
        int next;
        int limit;
 };
        int next;
        int limit;
 };
index ecf649c..04524c2 100644 (file)
@@ -58,6 +58,8 @@ enum {
        UNIXWARE_PARTITION = 0x63,      /* Same as GNU_HURD and SCO Unix */
 };
 
        UNIXWARE_PARTITION = 0x63,      /* Same as GNU_HURD and SCO Unix */
 };
 
+#define DISK_MAX_PARTS                 256
+
 #include <linux/major.h>
 #include <linux/device.h>
 #include <linux/smp.h>
 #include <linux/major.h>
 #include <linux/device.h>
 #include <linux/smp.h>
@@ -112,6 +114,7 @@ struct hd_struct {
 #define GENHD_FL_CD                            8
 #define GENHD_FL_UP                            16
 #define GENHD_FL_SUPPRESS_PARTITION_INFO       32
 #define GENHD_FL_CD                            8
 #define GENHD_FL_UP                            16
 #define GENHD_FL_SUPPRESS_PARTITION_INFO       32
+#define GENHD_FL_EXT_DEVT                      64 /* allow extended devt */
 
 #define BLK_SCSI_MAX_CMDS      (256)
 #define BLK_SCSI_CMD_PER_LONG  (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8))
 
 #define BLK_SCSI_MAX_CMDS      (256)
 #define BLK_SCSI_CMD_PER_LONG  (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8))
@@ -129,15 +132,13 @@ struct disk_part_tbl {
 };
 
 struct gendisk {
 };
 
 struct gendisk {
-       /* major, first_minor, minors and ext_minors are input
-        * parameters only, don't use directly.  Use disk_devt() and
-        * disk_max_parts().
+       /* major, first_minor and minors are input parameters only,
+        * don't use directly.  Use disk_devt() and disk_max_parts().
         */
        int major;                      /* major number of driver */
        int first_minor;
        int minors;                     /* maximum number of minors, =1 for
                                          * disks that can't be partitioned. */
         */
        int major;                      /* major number of driver */
        int first_minor;
        int minors;                     /* maximum number of minors, =1 for
                                          * disks that can't be partitioned. */
-       int ext_minors;                 /* number of extended dynamic minors */
 
        char disk_name[32];             /* name of major driver */
 
 
        char disk_name[32];             /* name of major driver */
 
@@ -180,7 +181,9 @@ static inline struct gendisk *part_to_disk(struct hd_struct *part)
 
 static inline int disk_max_parts(struct gendisk *disk)
 {
 
 static inline int disk_max_parts(struct gendisk *disk)
 {
-       return disk->minors + disk->ext_minors;
+       if (disk->flags & GENHD_FL_EXT_DEVT)
+               return DISK_MAX_PARTS;
+       return disk->minors;
 }
 
 static inline bool disk_partitionable(struct gendisk *disk)
 }
 
 static inline bool disk_partitionable(struct gendisk *disk)
@@ -527,9 +530,6 @@ extern void printk_all_partitions(void);
 
 extern struct gendisk *alloc_disk_node(int minors, int node_id);
 extern struct gendisk *alloc_disk(int minors);
 
 extern struct gendisk *alloc_disk_node(int minors, int node_id);
 extern struct gendisk *alloc_disk(int minors);
-extern struct gendisk *alloc_disk_ext_node(int minors, int ext_minrs,
-                                          int node_id);
-extern struct gendisk *alloc_disk_ext(int minors, int ext_minors);
 extern struct kobject *get_disk(struct gendisk *disk);
 extern void put_disk(struct gendisk *disk);
 extern void blk_register_region(dev_t devt, unsigned long range,
 extern struct kobject *get_disk(struct gendisk *disk);
 extern void put_disk(struct gendisk *disk);
 extern void blk_register_region(dev_t devt, unsigned long range,