block: replace @ext_minors with GENHD_FL_EXT_DEVT
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>
This commit is contained in:
parent
540eed5637
commit
689d6fac40
|
@ -1024,18 +1024,9 @@ struct gendisk *alloc_disk(int minors)
|
|||
{
|
||||
return alloc_disk_node(minors, -1);
|
||||
}
|
||||
EXPORT_SYMBOL(alloc_disk);
|
||||
|
||||
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;
|
||||
|
||||
|
@ -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->ext_minors = ext_minors;
|
||||
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;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(alloc_disk);
|
||||
EXPORT_SYMBOL(alloc_disk_node);
|
||||
EXPORT_SYMBOL(alloc_disk_ext);
|
||||
EXPORT_SYMBOL(alloc_disk_ext_node);
|
||||
|
||||
struct kobject *get_disk(struct gendisk *disk)
|
||||
{
|
||||
|
|
|
@ -41,16 +41,12 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/div64.h>
|
||||
|
||||
#define IDE_DISK_PARTS (1 << PARTN_BITS)
|
||||
|
||||
#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
|
||||
|
||||
#define IDE_DISK_EXT_MINORS (IDE_DISK_PARTS - IDE_DISK_MINORS)
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
|
@ -1189,9 +1184,10 @@ static int ide_disk_probe(ide_drive_t *drive)
|
|||
drive->attach = 1;
|
||||
|
||||
g->minors = IDE_DISK_MINORS;
|
||||
g->ext_minors = IDE_DISK_EXT_MINORS;
|
||||
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);
|
||||
|
|
|
@ -86,16 +86,12 @@ MODULE_ALIAS_SCSI_DEVICE(TYPE_DISK);
|
|||
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
|
||||
|
||||
#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 *);
|
||||
|
@ -1811,7 +1807,7 @@ static int sd_probe(struct device *dev)
|
|||
if (!sdkp)
|
||||
goto out;
|
||||
|
||||
gd = alloc_disk_ext(SD_MINORS, SD_EXT_MINORS);
|
||||
gd = alloc_disk(SD_MINORS);
|
||||
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->ext_minors = SD_EXT_MINORS;
|
||||
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;
|
||||
gd->flags = GENHD_FL_DRIVERFS;
|
||||
gd->flags = GENHD_FL_EXT_DEVT | GENHD_FL_DRIVERFS;
|
||||
if (sdp->removable)
|
||||
gd->flags |= GENHD_FL_REMOVABLE;
|
||||
|
||||
|
|
|
@ -5,15 +5,13 @@
|
|||
* 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;
|
||||
} parts[MAX_PART];
|
||||
} parts[DISK_MAX_PARTS];
|
||||
int next;
|
||||
int limit;
|
||||
};
|
||||
|
|
|
@ -58,6 +58,8 @@ enum {
|
|||
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>
|
||||
|
@ -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_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))
|
||||
|
@ -129,15 +132,13 @@ struct disk_part_tbl {
|
|||
};
|
||||
|
||||
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 ext_minors; /* number of extended dynamic minors */
|
||||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
|
@ -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_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,
|
||||
|
|
Loading…
Reference in New Issue