mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	block: remove GENHD_FL_EXT_DEVT
All modern drivers can support extra partitions using the extended dev_t. In fact except for the ioctl method drivers never even see partitions in normal operation. So remove the GENHD_FL_EXT_DEVT and allow extra partitions for all block devices that do support partitions, and require those that do not support partitions to explicit disallow them using GENHD_FL_NO_PART. Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20211122130625.1136848-12-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
		
							parent
							
								
									3b5149ac50
								
							
						
					
					
						commit
						1ebe2e5f9d
					
				
					 27 changed files with 30 additions and 48 deletions
				
			
		| 
						 | 
				
			
			@ -376,7 +376,7 @@ int disk_scan_partitions(struct gendisk *disk, fmode_t mode)
 | 
			
		|||
{
 | 
			
		||||
	struct block_device *bdev;
 | 
			
		||||
 | 
			
		||||
	if (!disk_part_scan_enabled(disk))
 | 
			
		||||
	if (disk->flags & GENHD_FL_NO_PART)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	if (disk->open_partitions)
 | 
			
		||||
		return -EBUSY;
 | 
			
		||||
| 
						 | 
				
			
			@ -438,7 +438,6 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
 | 
			
		|||
			return ret;
 | 
			
		||||
		disk->major = BLOCK_EXT_MAJOR;
 | 
			
		||||
		disk->first_minor = ret;
 | 
			
		||||
		disk->flags |= GENHD_FL_EXT_DEVT;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ret = disk_alloc_events(disk);
 | 
			
		||||
| 
						 | 
				
			
			@ -872,7 +871,8 @@ static ssize_t disk_ext_range_show(struct device *dev,
 | 
			
		|||
{
 | 
			
		||||
	struct gendisk *disk = dev_to_disk(dev);
 | 
			
		||||
 | 
			
		||||
	return sprintf(buf, "%d\n", disk_max_parts(disk));
 | 
			
		||||
	return sprintf(buf, "%d\n",
 | 
			
		||||
		(disk->flags & GENHD_FL_NO_PART) ? 1 : DISK_MAX_PARTS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static ssize_t disk_removable_show(struct device *dev,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -98,13 +98,12 @@ static void bdev_set_nr_sectors(struct block_device *bdev, sector_t sectors)
 | 
			
		|||
static struct parsed_partitions *allocate_partitions(struct gendisk *hd)
 | 
			
		||||
{
 | 
			
		||||
	struct parsed_partitions *state;
 | 
			
		||||
	int nr;
 | 
			
		||||
	int nr = DISK_MAX_PARTS;
 | 
			
		||||
 | 
			
		||||
	state = kzalloc(sizeof(*state), GFP_KERNEL);
 | 
			
		||||
	if (!state)
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	nr = disk_max_parts(hd);
 | 
			
		||||
	state->parts = vzalloc(array_size(nr, sizeof(state->parts[0])));
 | 
			
		||||
	if (!state->parts) {
 | 
			
		||||
		kfree(state);
 | 
			
		||||
| 
						 | 
				
			
			@ -326,7 +325,7 @@ static struct block_device *add_partition(struct gendisk *disk, int partno,
 | 
			
		|||
 | 
			
		||||
	lockdep_assert_held(&disk->open_mutex);
 | 
			
		||||
 | 
			
		||||
	if (partno >= disk_max_parts(disk))
 | 
			
		||||
	if (partno >= DISK_MAX_PARTS)
 | 
			
		||||
		return ERR_PTR(-EINVAL);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
| 
						 | 
				
			
			@ -604,7 +603,7 @@ static int blk_add_partitions(struct gendisk *disk)
 | 
			
		|||
	struct parsed_partitions *state;
 | 
			
		||||
	int ret = -EAGAIN, p;
 | 
			
		||||
 | 
			
		||||
	if (!disk_part_scan_enabled(disk))
 | 
			
		||||
	if (disk->flags & GENHD_FL_NO_PART)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	state = check_partition(disk);
 | 
			
		||||
| 
						 | 
				
			
			@ -687,7 +686,7 @@ int bdev_disk_changed(struct gendisk *disk, bool invalidate)
 | 
			
		|||
	 * userspace for this particular setup.
 | 
			
		||||
	 */
 | 
			
		||||
	if (invalidate) {
 | 
			
		||||
		if (disk_part_scan_enabled(disk) ||
 | 
			
		||||
		if (!(disk->flags & GENHD_FL_NO_PART) ||
 | 
			
		||||
		    !(disk->flags & GENHD_FL_REMOVABLE))
 | 
			
		||||
			set_capacity(disk, 0);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1790,6 +1790,7 @@ static int fd_alloc_disk(int drive, int system)
 | 
			
		|||
	disk->first_minor = drive + system;
 | 
			
		||||
	disk->minors = 1;
 | 
			
		||||
	disk->fops = &floppy_fops;
 | 
			
		||||
	disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	disk->events = DISK_EVENT_MEDIA_CHANGE;
 | 
			
		||||
	if (system)
 | 
			
		||||
		sprintf(disk->disk_name, "fd%d_msdos", drive);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2000,6 +2000,7 @@ static int ataflop_alloc_disk(unsigned int drive, unsigned int type)
 | 
			
		|||
	disk->minors = 1;
 | 
			
		||||
	sprintf(disk->disk_name, "fd%d", drive);
 | 
			
		||||
	disk->fops = &floppy_fops;
 | 
			
		||||
	disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	disk->events = DISK_EVENT_MEDIA_CHANGE;
 | 
			
		||||
	disk->private_data = &unit[drive];
 | 
			
		||||
	set_capacity(disk, MAX_DISK_SIZE * 2);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -405,7 +405,6 @@ static int brd_alloc(int i)
 | 
			
		|||
	disk->minors		= max_part;
 | 
			
		||||
	disk->fops		= &brd_fops;
 | 
			
		||||
	disk->private_data	= brd;
 | 
			
		||||
	disk->flags		= GENHD_FL_EXT_DEVT;
 | 
			
		||||
	strlcpy(disk->disk_name, buf, DISK_NAME_LEN);
 | 
			
		||||
	set_capacity(disk, rd_size * 2);
 | 
			
		||||
	
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2734,6 +2734,7 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig
 | 
			
		|||
	disk->first_minor = minor;
 | 
			
		||||
	disk->minors = 1;
 | 
			
		||||
	disk->fops = &drbd_ops;
 | 
			
		||||
	disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	sprintf(disk->disk_name, "drbd%d", minor);
 | 
			
		||||
	disk->private_data = device;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4503,6 +4503,7 @@ static int floppy_alloc_disk(unsigned int drive, unsigned int type)
 | 
			
		|||
	disk->first_minor = TOMINOR(drive) | (type << 2);
 | 
			
		||||
	disk->minors = 1;
 | 
			
		||||
	disk->fops = &floppy_fops;
 | 
			
		||||
	disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	disk->events = DISK_EVENT_MEDIA_CHANGE;
 | 
			
		||||
	if (type)
 | 
			
		||||
		sprintf(disk->disk_name, "fd%d_type%d", drive, type);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2033,7 +2033,6 @@ static int loop_add(int i)
 | 
			
		|||
	 */
 | 
			
		||||
	if (!part_shift)
 | 
			
		||||
		disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	disk->flags |= GENHD_FL_EXT_DEVT;
 | 
			
		||||
	atomic_set(&lo->lo_refcnt, 0);
 | 
			
		||||
	mutex_init(&lo->lo_mutex);
 | 
			
		||||
	lo->lo_number		= i;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1850,7 +1850,6 @@ static int null_gendisk_register(struct nullb *nullb)
 | 
			
		|||
 | 
			
		||||
	set_capacity(disk, size);
 | 
			
		||||
 | 
			
		||||
	disk->flags |= GENHD_FL_EXT_DEVT;
 | 
			
		||||
	disk->major		= null_major;
 | 
			
		||||
	disk->first_minor	= nullb->index;
 | 
			
		||||
	disk->minors		= 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -928,6 +928,7 @@ static int pcd_init_unit(struct pcd_unit *cd, bool autoprobe, int port,
 | 
			
		|||
	disk->minors = 1;
 | 
			
		||||
	strcpy(disk->disk_name, cd->name);	/* umm... */
 | 
			
		||||
	disk->fops = &pcd_bdops;
 | 
			
		||||
	disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	disk->events = DISK_EVENT_MEDIA_CHANGE;
 | 
			
		||||
	disk->event_flags = DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -942,6 +942,7 @@ static int __init pf_init_unit(struct pf_unit *pf, bool autoprobe, int port,
 | 
			
		|||
	disk->minors = 1;
 | 
			
		||||
	strcpy(disk->disk_name, pf->name);
 | 
			
		||||
	disk->fops = &pf_fops;
 | 
			
		||||
	disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	disk->events = DISK_EVENT_MEDIA_CHANGE;
 | 
			
		||||
	disk->private_data = pf;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2719,7 +2719,7 @@ static int pkt_setup_dev(dev_t dev, dev_t* pkt_dev)
 | 
			
		|||
	disk->first_minor = idx;
 | 
			
		||||
	disk->minors = 1;
 | 
			
		||||
	disk->fops = &pktcdvd_ops;
 | 
			
		||||
	disk->flags = GENHD_FL_REMOVABLE;
 | 
			
		||||
	disk->flags = GENHD_FL_REMOVABLE | GENHD_FL_NO_PART;
 | 
			
		||||
	strcpy(disk->disk_name, pd->name);
 | 
			
		||||
	disk->private_data = pd;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -742,6 +742,7 @@ static int ps3vram_probe(struct ps3_system_bus_device *dev)
 | 
			
		|||
	priv->gendisk = gendisk;
 | 
			
		||||
	gendisk->major = ps3vram_major;
 | 
			
		||||
	gendisk->minors = 1;
 | 
			
		||||
	gendisk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	gendisk->fops = &ps3vram_fops;
 | 
			
		||||
	gendisk->private_data = dev;
 | 
			
		||||
	strlcpy(gendisk->disk_name, DEVICE_NAME, sizeof(gendisk->disk_name));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4924,12 +4924,10 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
 | 
			
		|||
		 rbd_dev->dev_id);
 | 
			
		||||
	disk->major = rbd_dev->major;
 | 
			
		||||
	disk->first_minor = rbd_dev->minor;
 | 
			
		||||
	if (single_major) {
 | 
			
		||||
	if (single_major)
 | 
			
		||||
		disk->minors = (1 << RBD_SINGLE_MAJOR_PART_SHIFT);
 | 
			
		||||
		disk->flags |= GENHD_FL_EXT_DEVT;
 | 
			
		||||
	} else {
 | 
			
		||||
	else
 | 
			
		||||
		disk->minors = RBD_MINORS_PER_MAJOR;
 | 
			
		||||
	}
 | 
			
		||||
	disk->fops = &rbd_bd_ops;
 | 
			
		||||
	disk->private_data = rbd_dev;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -840,6 +840,7 @@ static int swim_floppy_init(struct swim_priv *swd)
 | 
			
		|||
		swd->unit[drive].disk->minors = 1;
 | 
			
		||||
		sprintf(swd->unit[drive].disk->disk_name, "fd%d", drive);
 | 
			
		||||
		swd->unit[drive].disk->fops = &floppy_fops;
 | 
			
		||||
		swd->unit[drive].disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
		swd->unit[drive].disk->events = DISK_EVENT_MEDIA_CHANGE;
 | 
			
		||||
		swd->unit[drive].disk->private_data = &swd->unit[drive];
 | 
			
		||||
		set_capacity(swd->unit[drive].disk, 2880);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1227,7 +1227,7 @@ static int swim3_attach(struct macio_dev *mdev,
 | 
			
		|||
	disk->fops = &floppy_fops;
 | 
			
		||||
	disk->private_data = fs;
 | 
			
		||||
	disk->events = DISK_EVENT_MEDIA_CHANGE;
 | 
			
		||||
	disk->flags |= GENHD_FL_REMOVABLE;
 | 
			
		||||
	disk->flags |= GENHD_FL_REMOVABLE | GENHD_FL_NO_PART;
 | 
			
		||||
	sprintf(disk->disk_name, "fd%d", floppy_count);
 | 
			
		||||
	set_capacity(disk, 2880);
 | 
			
		||||
	rc = add_disk(disk);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -843,7 +843,6 @@ static int virtblk_probe(struct virtio_device *vdev)
 | 
			
		|||
	vblk->disk->minors = 1 << PART_BITS;
 | 
			
		||||
	vblk->disk->private_data = vblk;
 | 
			
		||||
	vblk->disk->fops = &virtblk_fops;
 | 
			
		||||
	vblk->disk->flags |= GENHD_FL_EXT_DEVT;
 | 
			
		||||
	vblk->index = index;
 | 
			
		||||
 | 
			
		||||
	/* configure queue flush support */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -327,6 +327,7 @@ static int z2ram_register_disk(int minor)
 | 
			
		|||
	disk->major = Z2RAM_MAJOR;
 | 
			
		||||
	disk->first_minor = minor;
 | 
			
		||||
	disk->minors = 1;
 | 
			
		||||
	disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	disk->fops = &z2_fops;
 | 
			
		||||
	if (minor)
 | 
			
		||||
		sprintf(disk->disk_name, "z2ram%d", minor);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1947,6 +1947,7 @@ static int zram_add(void)
 | 
			
		|||
	zram->disk->major = zram_major;
 | 
			
		||||
	zram->disk->first_minor = device_id;
 | 
			
		||||
	zram->disk->minors = 1;
 | 
			
		||||
	zram->disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	zram->disk->fops = &zram_devops;
 | 
			
		||||
	zram->disk->private_data = zram;
 | 
			
		||||
	snprintf(zram->disk->disk_name, 16, "zram%d", device_id);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -719,6 +719,7 @@ static void probe_gdrom_setupdisk(void)
 | 
			
		|||
	gd.disk->major = gdrom_major;
 | 
			
		||||
	gd.disk->first_minor = 1;
 | 
			
		||||
	gd.disk->minors = 1;
 | 
			
		||||
	gd.disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	strcpy(gd.disk->disk_name, GDROM_DEV_NAME);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1778,6 +1778,7 @@ static struct mapped_device *alloc_dev(int minor)
 | 
			
		|||
	md->disk->major = _major;
 | 
			
		||||
	md->disk->first_minor = minor;
 | 
			
		||||
	md->disk->minors = 1;
 | 
			
		||||
	md->disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	md->disk->fops = &dm_blk_dops;
 | 
			
		||||
	md->disk->queue = md->queue;
 | 
			
		||||
	md->disk->private_data = md;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5707,11 +5707,6 @@ static int md_alloc(dev_t dev, char *name)
 | 
			
		|||
	mddev->queue = disk->queue;
 | 
			
		||||
	blk_set_stacking_limits(&mddev->queue->limits);
 | 
			
		||||
	blk_queue_write_cache(mddev->queue, true, true);
 | 
			
		||||
	/* Allow extended partitions.  This makes the
 | 
			
		||||
	 * 'mdp' device redundant, but we can't really
 | 
			
		||||
	 * remove it now.
 | 
			
		||||
	 */
 | 
			
		||||
	disk->flags |= GENHD_FL_EXT_DEVT;
 | 
			
		||||
	disk->events |= DISK_EVENT_MEDIA_CHANGE;
 | 
			
		||||
	mddev->gendisk = disk;
 | 
			
		||||
	error = add_disk(disk);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2395,7 +2395,6 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
 | 
			
		|||
	md->disk->private_data = md;
 | 
			
		||||
	md->parent = parent;
 | 
			
		||||
	set_disk_ro(md->disk, md->read_only || default_ro);
 | 
			
		||||
	md->disk->flags = GENHD_FL_EXT_DEVT;
 | 
			
		||||
	if (area_type & (MMC_BLK_DATA_AREA_RPMB | MMC_BLK_DATA_AREA_BOOT))
 | 
			
		||||
		md->disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -430,6 +430,7 @@ int ubiblock_create(struct ubi_volume_info *vi)
 | 
			
		|||
		ret = -ENODEV;
 | 
			
		||||
		goto out_cleanup_disk;
 | 
			
		||||
	}
 | 
			
		||||
	gd->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	gd->private_data = dev;
 | 
			
		||||
	sprintf(gd->disk_name, "ubiblock%d_%d", dev->ubi_num, dev->vol_id);
 | 
			
		||||
	set_capacity(gd, disk_capacity);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3566,7 +3566,6 @@ static int sd_probe(struct device *dev)
 | 
			
		|||
 | 
			
		||||
	sd_revalidate_disk(gd);
 | 
			
		||||
 | 
			
		||||
	gd->flags = GENHD_FL_EXT_DEVT;
 | 
			
		||||
	if (sdp->removable) {
 | 
			
		||||
		gd->flags |= GENHD_FL_REMOVABLE;
 | 
			
		||||
		gd->events |= DISK_EVENT_MEDIA_CHANGE;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -684,6 +684,7 @@ static int sr_probe(struct device *dev)
 | 
			
		|||
	disk->minors = 1;
 | 
			
		||||
	sprintf(disk->disk_name, "sr%d", minor);
 | 
			
		||||
	disk->fops = &sr_bdops;
 | 
			
		||||
	disk->flags |= GENHD_FL_NO_PART;
 | 
			
		||||
	disk->events = DISK_EVENT_MEDIA_CHANGE | DISK_EVENT_EJECT_REQUEST;
 | 
			
		||||
	disk->event_flags = DISK_EVENT_FLAG_POLL | DISK_EVENT_FLAG_UEVENT |
 | 
			
		||||
				DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,11 +46,6 @@ struct partition_meta_info {
 | 
			
		|||
 * Must not be set for devices which are removed entirely when the
 | 
			
		||||
 * media is removed.
 | 
			
		||||
 *
 | 
			
		||||
 * ``GENHD_FL_EXT_DEVT`` (0x0040): the driver supports extended
 | 
			
		||||
 * dynamic ``dev_t``, i.e. it wants extended device numbers
 | 
			
		||||
 * (``BLOCK_EXT_MAJOR``).
 | 
			
		||||
 * This affects the maximum number of partitions.
 | 
			
		||||
 *
 | 
			
		||||
 * ``GENHD_FL_NO_PART`` (0x0200): partition support is disabled.
 | 
			
		||||
 * The kernel will not scan for partitions from add_disk, and users
 | 
			
		||||
 * can't add partitions manually.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +59,6 @@ struct partition_meta_info {
 | 
			
		|||
#define GENHD_FL_REMOVABLE			0x0001
 | 
			
		||||
/* 2 is unused (used to be GENHD_FL_DRIVERFS) */
 | 
			
		||||
/* 4 is unused (used to be GENHD_FL_MEDIA_CHANGE_NOTIFY) */
 | 
			
		||||
#define GENHD_FL_EXT_DEVT			0x0040
 | 
			
		||||
#define GENHD_FL_NO_PART			0x0200
 | 
			
		||||
#define GENHD_FL_HIDDEN				0x0400
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -94,13 +88,13 @@ struct blk_integrity {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
struct gendisk {
 | 
			
		||||
	/* major, first_minor and minors are input parameters only,
 | 
			
		||||
	 * don't use directly.  Use disk_devt() and disk_max_parts().
 | 
			
		||||
	/*
 | 
			
		||||
	 * major/first_minor/minors should not be set by any new driver, the
 | 
			
		||||
	 * block core will take care of allocating them automatically.
 | 
			
		||||
	 */
 | 
			
		||||
	int major;			/* major number of driver */
 | 
			
		||||
	int major;
 | 
			
		||||
	int first_minor;
 | 
			
		||||
	int minors;                     /* maximum number of minors, =1 for
 | 
			
		||||
                                         * disks that can't be partitioned. */
 | 
			
		||||
	int minors;
 | 
			
		||||
 | 
			
		||||
	char disk_name[DISK_NAME_LEN];	/* name of major driver */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -164,18 +158,6 @@ static inline bool disk_live(struct gendisk *disk)
 | 
			
		|||
#define disk_to_cdi(disk)	NULL
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static inline int disk_max_parts(struct gendisk *disk)
 | 
			
		||||
{
 | 
			
		||||
	if (disk->flags & GENHD_FL_EXT_DEVT)
 | 
			
		||||
		return DISK_MAX_PARTS;
 | 
			
		||||
	return disk->minors;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline bool disk_part_scan_enabled(struct gendisk *disk)
 | 
			
		||||
{
 | 
			
		||||
	return disk_max_parts(disk) > 1 && !(disk->flags & GENHD_FL_NO_PART);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline dev_t disk_devt(struct gendisk *disk)
 | 
			
		||||
{
 | 
			
		||||
	return MKDEV(disk->major, disk->first_minor);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue