Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 689d6fac authored by Tejun Heo's avatar Tejun Heo Committed by Jens Axboe
Browse files

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: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 540eed56
Loading
Loading
Loading
Loading
+1 −15
Original line number Diff line number Diff line
@@ -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)
{
+5 −9
Original line number Diff line number Diff line
@@ -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);
+2 −7
Original line number Diff line number Diff line
@@ -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;

+1 −3
Original line number Diff line number Diff line
@@ -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;
};
+8 −8
Original line number Diff line number Diff line
@@ -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,