cleanup and simplify the gendisk flags
Subsystems (19)
Ho Jens,
the gendisk flags have been a complete mess for a while. This series tries to untangle them as much as easily possible.
Diffstat:
block/bdev.c | 5 -- block/blk.h | 1 block/genhd.c | 41 +++++++---------- block/ioctl.c | 31 ++----------- block/partitions/core.c | 24 ++++------ drivers/block/amiflop.c | 1 drivers/block/ataflop.c | 1 drivers/block/brd.c | 1 drivers/block/drbd/drbd_main.c | 1 drivers/block/floppy.c | 1 drivers/block/loop.c | 9 +-- drivers/block/n64cart.c | 2 drivers/block/null_blk/main.c | 1 drivers/block/paride/pcd.c | 3 - drivers/block/paride/pf.c | 1 drivers/block/pktcdvd.c | 2 drivers/block/ps3vram.c | 1 drivers/block/rbd.c | 6 -- drivers/block/sunvdc.c | 17 +++---- drivers/block/swim.c | 1 drivers/block/swim3.c | 2 drivers/block/virtio_blk.c | 1 drivers/block/xen-blkback/xenbus.c | 2 drivers/block/xen-blkfront.c | 26 ++++------- drivers/block/z2ram.c | 1 drivers/block/zram/zram_drv.c | 1 drivers/cdrom/gdrom.c | 1 drivers/md/dm.c | 1 drivers/md/md.c | 5 -- drivers/mmc/core/block.c | 4 - drivers/mtd/ubi/block.c | 1 drivers/scsi/sd.c | 1 drivers/scsi/sr.c | 6 +- include/linux/genhd.h | 85 +++++++++---------------------------- 34 files changed, 104 insertions(+), 183 deletions(-)
PATCH 1/14 block: move GENHD_FL_NATIVE_CAPACITY to disk->state
The flag to indicate an unlocked native capacity is dynamic state, not a driver capability flag, so move it to disk->state.
--- block/partitions/core.c | 15 ++++++--------- include/linux/genhd.h | 8 +------- 2 files changed, 7 insertions(+), 16 deletions(-)
block/partitions/core.c +6 -9
@@ -527,18 +527,15 @@ int bdev_resize_partition(struct gendisk *disk, int partno, sector_t start,static bool disk_unlock_native_capacity (struct gendisk *disk) { -const struct block_device_operations *bdops = disk->fops; - -if (bdops->unlock_native_capacity && - !(disk->flags &GENHD_FL_NATIVE_CAPACITY )) { -printk (KERN_CONT "enabling native capacity\n" ); - bdops->unlock_native_capacity (disk); - disk->flags |=GENHD_FL_NATIVE_CAPACITY ; -return true; - }else { +if (!disk->fops->unlock_native_capacity || +test_and_set_bit (GD_NATIVE_CAPACITY , &disk->state)) {printk (KERN_CONT "truncated\n" );return false; } + +printk (KERN_CONT "enabling native capacity\n" ); + disk->fops->unlock_native_capacity (disk); +return true; }void blk_drop_partitions (struct gendisk *disk)
include/linux/genhd.h +1 -7
@@ -60,12 +60,6 @@ struct partition_meta_info {* (``BLOCK_EXT_MAJOR``). * This affects the maximum number of partitions. * -* ``GENHD_FL_NATIVE_CAPACITY`` (0x0080): based on information in the -* partition table, the device's capacity has been extended to its -* native capacity; i.e. the device has hidden capacity used by one -* of the partitions (this is a flag used so that native capacity is -* only ever unlocked once). -* * ``GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE`` (0x0100): event polling is * blocked whenever a writer holds an exclusive lock. *
@@ -86,7 +80,6 @@ struct partition_meta_info {#define GENHD_FL_CD 0x0008#define GENHD_FL_SUPPRESS_PARTITION_INFO 0x0020#define GENHD_FL_EXT_DEVT 0x0040 -#define GENHD_FL_NATIVE_CAPACITY 0x0080#define GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE 0x0100#define GENHD_FL_NO_PART_SCAN 0x0200#define GENHD_FL_HIDDEN 0x0400
@@ -140,6 +133,7 @@ struct gendisk {#define GD_NEED_PART_SCAN 0#define GD_READ_ONLY 1#define GD_DEAD 2 +#define GD_NATIVE_CAPACITY 3struct mutex open_mutex;/* open/close mutex */ unsigned open_partitions;/* number of open partitions */
Signature · 1 line
2.30.2
PATCH 2/14 block: move GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE to disk->event_flags
In reply to Christoph HellwigGENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE is all about the event reporting mechanism, so move it to the event_flags field.
--- block/bdev.c | 2 +- drivers/block/paride/pcd.c | 2 +- drivers/scsi/sr.c | 5 +++-- include/linux/genhd.h | 6 ++---- 4 files changed, 7 insertions(+), 8 deletions(-)
block/bdev.c +1 -1
@@ -837,7 +837,7 @@ struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode, void *holder)* used in blkdev_get/put(). */ if ((mode &FMODE_WRITE ) && !bdev->bd_write_holder && - (disk->flags &GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE )) { + (disk->event_flags &DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE )) { bdev->bd_write_holder = true; unblock_events = false; }
drivers/block/paride/pcd.c +1 -1
@@ -928,8 +928,8 @@ 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_BLOCK_EVENTS_ON_EXCL_WRITE ; disk->events =DISK_EVENT_MEDIA_CHANGE ; + disk->event_flags =DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE ;if (!pi_init (cd->pi, autoprobe, port, mode, unit, protocol, delay, pcd_buffer,PI_PCD , verbose, cd->name)) {
drivers/scsi/sr.c +3 -2
@@ -684,9 +684,10 @@ 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_CD |GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE ; + disk->flags =GENHD_FL_CD ; disk->events =DISK_EVENT_MEDIA_CHANGE |DISK_EVENT_EJECT_REQUEST ; - disk->event_flags =DISK_EVENT_FLAG_POLL |DISK_EVENT_FLAG_UEVENT ; + disk->event_flags =DISK_EVENT_FLAG_POLL |DISK_EVENT_FLAG_UEVENT | +DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE ;blk_queue_rq_timeout (sdev->request_queue,SR_TIMEOUT );
include/linux/genhd.h +2 -4
@@ -60,9 +60,6 @@ struct partition_meta_info {* (``BLOCK_EXT_MAJOR``). * This affects the maximum number of partitions. * -* ``GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE`` (0x0100): event polling is -* blocked whenever a writer holds an exclusive lock. -* * ``GENHD_FL_NO_PART_SCAN`` (0x0200): partition scanning is disabled. * Used for loop devices in their default settings and some MMC * devices.
@@ -80,7 +77,6 @@ struct partition_meta_info {#define GENHD_FL_CD 0x0008#define GENHD_FL_SUPPRESS_PARTITION_INFO 0x0020#define GENHD_FL_EXT_DEVT 0x0040 -#define GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE 0x0100#define GENHD_FL_NO_PART_SCAN 0x0200#define GENHD_FL_HIDDEN 0x0400
@@ -94,6 +90,8 @@ enum {DISK_EVENT_FLAG_POLL =1 <<0 ,/* Forward events to udev */ DISK_EVENT_FLAG_UEVENT =1 <<1 , +/* Block event polling when open for exclusive write */ + DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE = 1 << 2, };struct disk_events ;
Signature · 1 line
2.30.2
PATCH 3/14 block: remove GENHD_FL_CD
In reply to Christoph HellwigGENHD_FL_CD marks a gendisk as a vaguely CD-ROM like device. Besides being used internally inside of sunvdc.c an xen-blkfront it is used by xen-blkback as a hint to claim a device exported to a guest is a CD-ROM like device. Just check for disk->cdi instead which is the right indicator for "real" CD-ROM or DVD drivers. This will miss the paravirtualized guest drivers, but those make little sense to report anyway.
--- drivers/block/sunvdc.c | 17 +++++++++-------- drivers/block/xen-blkback/xenbus.c | 2 +- drivers/block/xen-blkfront.c | 26 +++++++++++--------------- drivers/scsi/sr.c | 1 - include/linux/genhd.h | 5 ----- 5 files changed, 21 insertions(+), 30 deletions(-)
drivers/block/sunvdc.c +9 -8
@@ -143,8 +143,8 @@ static int vdc_getgeo(struct block_device *bdev, struct hd_geometry *geo)static int vdc_ioctl (struct block_device *bdev,fmode_t mode,unsigned command,unsigned long argument) { +struct vdc_port *port = bdev->bd_disk->private_data;int i; -struct gendisk *disk;switch (command) {case CDROMMULTISESSION :
@@ -155,12 +155,15 @@ static int vdc_ioctl(struct block_device *bdev, fmode_t mode,return 0 ;case CDROM_GET_CAPABILITY : - disk = bdev->bd_disk; - -if (bdev->bd_disk && (disk->flags &GENHD_FL_CD )) +if (!vdc_version_supported (port,1 ,1 )) +return -EINVAL ; +switch (port->vdisk_mtype) { +case VD_MEDIA_TYPE_CD : +case VD_MEDIA_TYPE_DVD :return 0 ; -return -EINVAL ; - +default : +return -EINVAL ; + }default :pr_debug (PFX "ioctl %08x not supported\n" , command);return -EINVAL ;
@@ -854,14 +857,12 @@ static int probe_disk(struct vdc_port *port)switch (port->vdisk_mtype) {case VD_MEDIA_TYPE_CD :pr_info (PFX "Virtual CDROM %s\n" , port->disk_name); - g->flags |=GENHD_FL_CD ; g->flags |=GENHD_FL_REMOVABLE ;set_disk_ro (g,1 );break ;case VD_MEDIA_TYPE_DVD :pr_info (PFX "Virtual DVD %s\n" , port->disk_name); - g->flags |=GENHD_FL_CD ; g->flags |=GENHD_FL_REMOVABLE ;set_disk_ro (g,1 );break ;
drivers/block/xen-blkback/xenbus.c +1 -1
@@ -510,7 +510,7 @@ static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle, } vbd->size =vbd_sz (vbd); -if (vbd->bdev->bd_disk->flags &GENHD_FL_CD || cdrom) +if (cdrom ||disk_to_cdi (vbd->bdev->bd_disk)) vbd->type |=VDISK_CDROM ;if (vbd->bdev->bd_disk->flags &GENHD_FL_REMOVABLE ) vbd->type |=VDISK_REMOVABLE ;
drivers/block/xen-blkfront.c +11 -15
@@ -198,6 +198,7 @@ struct blkfront_infostruct gendisk *gd;u16 sector_size;unsigned int physical_sector_size; +unsigned long vdisk_info;int vdevice;blkif_vdev_t handle;enum blkif_state connected;
@@ -505,6 +506,7 @@ static int blkif_getgeo(struct block_device *bd, struct hd_geometry *hg)static int blkif_ioctl (struct block_device *bdev,fmode_t mode,unsigned command,unsigned long argument) { +struct blkfront_info *info = bdev->bd_disk->private_data;int i;switch (command) {
@@ -514,9 +516,9 @@ static int blkif_ioctl(struct block_device *bdev, fmode_t mode,return -EFAULT ;return 0 ;case CDROM_GET_CAPABILITY : -if (bdev->bd_disk->flags &GENHD_FL_CD ) -return 0 ; -return -EINVAL ; +if (!(info->vdisk_info &VDISK_CDROM )) +return -EINVAL ; +return 0 ;default :return -EINVAL ; }
@@ -1057,9 +1059,8 @@ static char *encode_disk_name(char *ptr, unsigned int n) }static int xlvbd_alloc_gendisk (blkif_sector_t capacity, -struct blkfront_info *info, -u16 vdisk_info,u16 sector_size, -unsigned int physical_sector_size) +struct blkfront_info *info,u16 sector_size, +unsigned int physical_sector_size) {struct gendisk *gd;int nr_minors =1 ;
@@ -1157,15 +1158,11 @@ static int xlvbd_alloc_gendisk(blkif_sector_t capacity,xlvbd_flush (info); -if (vdisk_info &VDISK_READONLY ) +if (info->vdisk_info &VDISK_READONLY )set_disk_ro (gd,1 ); - -if (vdisk_info &VDISK_REMOVABLE ) +if (info->vdisk_info &VDISK_REMOVABLE ) gd->flags |=GENHD_FL_REMOVABLE ; -if (vdisk_info &VDISK_CDROM ) - gd->flags |=GENHD_FL_CD ; -return 0 ; out_free_tag_set:
@@ -2304,7 +2301,6 @@ static void blkfront_connect(struct blkfront_info *info)unsigned long long sectors;unsigned long sector_size;unsigned int physical_sector_size; -unsigned int binfo;int err, i;struct blkfront_ring_info *rinfo;
@@ -2342,7 +2338,7 @@ static void blkfront_connect(struct blkfront_info *info) err =xenbus_gather (XBT_NIL , info->xbdev->otherend,"sectors" ,"%llu" , §ors, -"info" ,"%u" , &binfo, +"info" ,"%u" , &info->vdisk_info,"sector-size" ,"%lu" , §or_size,NULL );if (err) {
@@ -2371,7 +2367,7 @@ static void blkfront_connect(struct blkfront_info *info) } } - err =xlvbd_alloc_gendisk (sectors, info, binfo, sector_size, + err =xlvbd_alloc_gendisk (sectors, info, sector_size, physical_sector_size);if (err) { xenbus_dev_fatal(info->xbdev, err, "xlvbd_add at %s",
drivers/scsi/sr.c +0 -1
@@ -684,7 +684,6 @@ 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_CD ; 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 ;
include/linux/genhd.h +0 -5
@@ -46,10 +46,6 @@ struct partition_meta_info {* Must not be set for devices which are removed entirely when the * media is removed. * -* ``GENHD_FL_CD`` (0x0008): the block device is a CD-ROM-style -* device. -* Affects responses to the ``CDROM_GET_CAPABILITY`` ioctl. -* * ``GENHD_FL_SUPPRESS_PARTITION_INFO`` (0x0020): don't include * partition information in ``/proc/partitions`` or in the output of * printk_all_partitions().
@@ -74,7 +70,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_CD 0x0008#define GENHD_FL_SUPPRESS_PARTITION_INFO 0x0020#define GENHD_FL_EXT_DEVT 0x0040#define GENHD_FL_NO_PART_SCAN 0x0200
Signature · 1 line
2.30.2
PATCH 4/14 block: remove a dead check in show_partition
In reply to Christoph Hellwigdisk_max_parts never returns 0 given that ->minors for devices not using the extended dev_t must be non-zero, and disk_max_parts always returns DISK_MAX_PARTS for the latter.
--- block/genhd.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
block/genhd.c +1 -3
@@ -814,9 +814,7 @@ static int show_partition(struct seq_file *seqf, void *v)struct block_device *part;unsigned long idx; -/* Don't show non-partitionable removeable devices or empty devices */ -if (!get_capacity (sgp) || (!disk_max_parts (sgp) && - (sgp->flags &GENHD_FL_REMOVABLE ))) +if (!get_capacity (sgp))return 0 ;if (sgp->flags &GENHD_FL_SUPPRESS_PARTITION_INFO )return 0 ;
Signature · 1 line
2.30.2
PATCH 5/14 block: merge disk_scan_partitions and blkdev_reread_part
In reply to Christoph HellwigUnify the functionality that implements a partition rescan for a gendisk.
--- block/blk.h | 1 + block/genhd.c | 19 ++++++++++++------- block/ioctl.c | 31 +++++-------------------------- 3 files changed, 18 insertions(+), 33 deletions(-)
block/blk.h +1 -0
@@ -449,6 +449,7 @@ int bio_add_hw_page(struct request_queue *q, struct bio *bio, unsigned int max_sectors, bool *same_page);struct request_queue *blk_alloc_queue (int node_id); +int disk_scan_partitions (struct gendisk *disk,fmode_t mode);int disk_alloc_events (struct gendisk *disk);void disk_add_events (struct gendisk *disk);
block/genhd.c +12 -7
@@ -372,17 +372,21 @@ void disk_uevent(struct gendisk *disk, enum kobject_action action) }EXPORT_SYMBOL_GPL (disk_uevent); -static void disk_scan_partitions (struct gendisk *disk) +int disk_scan_partitions (struct gendisk *disk,fmode_t mode) {struct block_device *bdev; -if (!get_capacity (disk) || !disk_part_scan_enabled (disk)) -return ; +if (!disk_part_scan_enabled (disk)) +return -EINVAL ; +if (disk->open_partitions) +return -EBUSY ;set_bit (GD_NEED_PART_SCAN , &disk->state); - bdev =blkdev_get_by_dev (disk_devt (disk),FMODE_READ ,NULL ); -if (!IS_ERR (bdev)) -blkdev_put (bdev,FMODE_READ ); + bdev =blkdev_get_by_dev (disk_devt (disk), mode,NULL ); +if (IS_ERR (bdev)) +return PTR_ERR (bdev); +blkdev_put (bdev, mode); +return 0 ; }/**
@@ -509,7 +513,8 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk, goto out_unregister_bdi;bdev_add (disk->part0, ddev->devt); -disk_scan_partitions (disk); +if (get_capacity (disk)) +disk_scan_partitions (disk,FMODE_READ );/* * Announce the disk and partitions after all partitions are
block/ioctl.c +5 -26
@@ -82,31 +82,6 @@ static int compat_blkpg_ioctl(struct block_device *bdev, }#endif -static int blkdev_reread_part (struct block_device *bdev,fmode_t mode) -{ -struct block_device *tmp; - -if (!disk_part_scan_enabled (bdev->bd_disk) ||bdev_is_partition (bdev)) -return -EINVAL ; -if (!capable (CAP_SYS_ADMIN )) -return -EACCES ; -if (bdev->bd_disk->open_partitions) -return -EBUSY ; - -/* -* Reopen the device to revalidate the driver state and force a -* partition rescan. -*/ - mode &= ~FMODE_EXCL ; -set_bit (GD_NEED_PART_SCAN , &bdev->bd_disk->state); - - tmp =blkdev_get_by_dev (bdev->bd_dev, mode,NULL ); -if (IS_ERR (tmp)) -return PTR_ERR (tmp); -blkdev_put (tmp, mode); -return 0 ; -} -static int blk_ioctl_discard (struct block_device *bdev,fmode_t mode,unsigned long arg,unsigned long flags) {
@@ -522,7 +497,11 @@ static int blkdev_common_ioctl(struct block_device *bdev, fmode_t mode, bdev->bd_disk->bdi->ra_pages = (arg *512 ) /PAGE_SIZE ;return 0 ;case BLKRRPART : -return blkdev_reread_part (bdev, mode); +if (!capable (CAP_SYS_ADMIN )) +return -EACCES ; +if (bdev_is_partition (bdev)) +return -EINVAL ; +return disk_scan_partitions (bdev->bd_disk, mode & ~FMODE_EXCL );case BLKTRACESTART :case BLKTRACESTOP :case BLKTRACETEARDOWN :
Signature · 1 line
2.30.2
PATCH 6/14 block: rename GENHD_FL_NO_PART_SCAN to GENHD_FL_NO_PART
In reply to Christoph HellwigThe GENHD_FL_NO_PART_SCAN controls more than just partitions canning, so rename it to GENHD_FL_NO_PART.
--- block/genhd.c | 2 +- drivers/block/loop.c | 8 ++++---- drivers/block/n64cart.c | 2 +- drivers/mmc/core/block.c | 4 ++-- include/linux/genhd.h | 13 ++++++------- 5 files changed, 14 insertions(+), 15 deletions(-)
block/genhd.c +1 -1
@@ -500,7 +500,7 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk,* and don't bother scanning for partitions either. */ disk->flags |=GENHD_FL_SUPPRESS_PARTITION_INFO ; - disk->flags |=GENHD_FL_NO_PART_SCAN ; + disk->flags |=GENHD_FL_NO_PART ; }else { ret =bdi_register (disk->bdi,"%u:%u" , disk->major, disk->first_minor);
drivers/block/loop.c +4 -4
@@ -1061,7 +1061,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode, lo->lo_flags |=LO_FLAGS_PARTSCAN ; partscan = lo->lo_flags &LO_FLAGS_PARTSCAN ;if (partscan) - lo->lo_disk->flags &= ~GENHD_FL_NO_PART_SCAN ; + lo->lo_disk->flags &= ~GENHD_FL_NO_PART ;loop_global_unlock (lo, is_loop);if (partscan)
@@ -1191,7 +1191,7 @@ static int __loop_clr_fd(struct loop_device *lo, bool release)mutex_lock (&lo->lo_mutex); lo->lo_flags =0 ;if (!part_shift) - lo->lo_disk->flags |=GENHD_FL_NO_PART_SCAN ; + lo->lo_disk->flags |=GENHD_FL_NO_PART ; lo->lo_state = Lo_unbound;mutex_unlock (&lo->lo_mutex);
@@ -1301,7 +1301,7 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)if (!err && (lo->lo_flags &LO_FLAGS_PARTSCAN ) && !(prev_lo_flags &LO_FLAGS_PARTSCAN )) { - lo->lo_disk->flags &= ~GENHD_FL_NO_PART_SCAN ; + lo->lo_disk->flags &= ~GENHD_FL_NO_PART ; partscan = true; } out_unlock:
@@ -2032,7 +2032,7 @@ static int loop_add(int i)* userspace tools. Parameters like this in general should be avoided. */ if (!part_shift) - disk->flags |=GENHD_FL_NO_PART_SCAN ; + disk->flags |=GENHD_FL_NO_PART ; disk->flags |=GENHD_FL_EXT_DEVT ;atomic_set (&lo->lo_refcnt,0 );mutex_init (&lo->lo_mutex);
drivers/block/n64cart.c +1 -1
@@ -136,7 +136,7 @@ static int __init n64cart_probe(struct platform_device *pdev) goto out; disk->first_minor =0 ; - disk->flags =GENHD_FL_NO_PART_SCAN ; + disk->flags =GENHD_FL_NO_PART ; disk->fops = &n64cart_fops; disk->private_data = &pdev->dev;strcpy (disk->disk_name,"n64cart" );
drivers/mmc/core/block.c +2 -2
@@ -2397,8 +2397,8 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,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_SCAN - |GENHD_FL_SUPPRESS_PARTITION_INFO ; + md->disk->flags |=GENHD_FL_NO_PART | +GENHD_FL_SUPPRESS_PARTITION_INFO ;/* * As discussed on lkml, GENHD_FL_REMOVABLE should:
include/linux/genhd.h +6 -7
@@ -56,15 +56,15 @@ struct partition_meta_info {* (``BLOCK_EXT_MAJOR``). * This affects the maximum number of partitions. * -* ``GENHD_FL_NO_PART_SCAN`` (0x0200): partition scanning is disabled. -* Used for loop devices in their default settings and some MMC -* devices. +* ``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. * * ``GENHD_FL_HIDDEN`` (0x0400): the block device is hidden; it * doesn't produce events, doesn't appear in sysfs, and doesn't have * an associated ``bdev``. * Implies ``GENHD_FL_SUPPRESS_PARTITION_INFO`` and -* ``GENHD_FL_NO_PART_SCAN``. +* ``GENHD_FL_NO_PART``. * Used for multipath devices. */ #define GENHD_FL_REMOVABLE 0x0001
@@ -72,7 +72,7 @@ struct partition_meta_info {/* 4 is unused (used to be GENHD_FL_MEDIA_CHANGE_NOTIFY) */ #define GENHD_FL_SUPPRESS_PARTITION_INFO 0x0020#define GENHD_FL_EXT_DEVT 0x0040 -#define GENHD_FL_NO_PART_SCAN 0x0200 +#define GENHD_FL_NO_PART 0x0200#define GENHD_FL_HIDDEN 0x0400enum {
@@ -180,8 +180,7 @@ static inline int disk_max_parts(struct gendisk *disk)static inline bool disk_part_scan_enabled (struct gendisk *disk) { -return disk_max_parts (disk) >1 && - !(disk->flags &GENHD_FL_NO_PART_SCAN ); +return disk_max_parts (disk) >1 && !(disk->flags &GENHD_FL_NO_PART ); }static inline dev_t disk_devt (struct gendisk *disk)
Signature · 1 line
2.30.2
Re: [PATCH 06/14] block: rename GENHD_FL_NO_PART_SCAN to GENHD_FL_NO_PART
Quoted 5 lines · Christoph Hellwig
The
GENHD_FL_NO_PART_SCANcontrols more than just partitions canning, so rename it toGENHD_FL_NO_PART.Signed-off-by Christoph Hellwig <[email protected]>
Kind regards
Uffe
Quoted 135 lines
--- block/genhd.c | 2 +- drivers/block/loop.c | 8 ++++---- drivers/block/n64cart.c | 2 +- drivers/mmc/core/block.c | 4 ++-- include/linux/genhd.h | 13 ++++++------- 5 files changed, 14 insertions(+), 15 deletions(-)block/genhd.c +1
-1@@ -500,7 +500,7 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk,* and don't bother scanning for partitions either. */ disk->flags |=GENHD_FL_SUPPRESS_PARTITION_INFO ; - disk->flags |=GENHD_FL_NO_PART_SCAN ; + disk->flags |=GENHD_FL_NO_PART ; }else { ret =bdi_register (disk->bdi,"%u:%u" , disk->major, disk->first_minor);drivers/block/loop.c +4
-4@@ -1061,7 +1061,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode, lo->lo_flags |=LO_FLAGS_PARTSCAN ; partscan = lo->lo_flags &LO_FLAGS_PARTSCAN ;if (partscan) - lo->lo_disk->flags &= ~GENHD_FL_NO_PART_SCAN ; + lo->lo_disk->flags &= ~GENHD_FL_NO_PART ;loop_global_unlock (lo, is_loop);if (partscan)@@ -1191,7 +1191,7 @@ static int __loop_clr_fd(struct loop_device *lo, bool release)mutex_lock (&lo->lo_mutex); lo->lo_flags =0 ;if (!part_shift) - lo->lo_disk->flags |=GENHD_FL_NO_PART_SCAN ; + lo->lo_disk->flags |=GENHD_FL_NO_PART ; lo->lo_state = Lo_unbound;mutex_unlock (&lo->lo_mutex);@@ -1301,7 +1301,7 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)if (!err && (lo->lo_flags &LO_FLAGS_PARTSCAN ) && !(prev_lo_flags &LO_FLAGS_PARTSCAN )) { - lo->lo_disk->flags &= ~GENHD_FL_NO_PART_SCAN ; + lo->lo_disk->flags &= ~GENHD_FL_NO_PART ; partscan = true; } out_unlock:@@ -2032,7 +2032,7 @@ static int loop_add(int i)* userspace tools. Parameters like this in general should be avoided. */ if (!part_shift) - disk->flags |=GENHD_FL_NO_PART_SCAN ; + disk->flags |=GENHD_FL_NO_PART ; disk->flags |=GENHD_FL_EXT_DEVT ;atomic_set (&lo->lo_refcnt,0 );mutex_init (&lo->lo_mutex);drivers/block/n64cart.c +1
-1@@ -136,7 +136,7 @@ static int __init n64cart_probe(struct platform_device *pdev) goto out; disk->first_minor =0 ; - disk->flags =GENHD_FL_NO_PART_SCAN ; + disk->flags =GENHD_FL_NO_PART ; disk->fops = &n64cart_fops; disk->private_data = &pdev->dev;strcpy (disk->disk_name,"n64cart" );drivers/mmc/core/block.c +2
-2@@ -2397,8 +2397,8 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,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_SCAN - |GENHD_FL_SUPPRESS_PARTITION_INFO ; + md->disk->flags |=GENHD_FL_NO_PART | +GENHD_FL_SUPPRESS_PARTITION_INFO ;/* * As discussed on lkml, GENHD_FL_REMOVABLE should: include/linux/genhd.h +6
-8@@ -56,15 +56,15 @@ struct partition_meta_info {* (``BLOCK_EXT_MAJOR``). * This affects the maximum number of partitions. * -* ``GENHD_FL_NO_PART_SCAN`` (0x0200): partition scanning is disabled. -* Used for loop devices in their default settings and some MMC -* devices. +* ``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. * * ``GENHD_FL_HIDDEN`` (0x0400): the block device is hidden; it * doesn't produce events, doesn't appear in sysfs, and doesn't have * an associated ``bdev``. * Implies ``GENHD_FL_SUPPRESS_PARTITION_INFO`` and -* ``GENHD_FL_NO_PART_SCAN``. +* ``GENHD_FL_NO_PART``. * Used for multipath devices. */ #define GENHD_FL_REMOVABLE 0x0001@@ -72,7 +72,7 @@ struct partition_meta_info {/* 4 is unused (used to be GENHD_FL_MEDIA_CHANGE_NOTIFY) */ #define GENHD_FL_SUPPRESS_PARTITION_INFO 0x0020#define GENHD_FL_EXT_DEVT 0x0040 -#define GENHD_FL_NO_PART_SCAN 0x0200 +#define GENHD_FL_NO_PART 0x0200#define GENHD_FL_HIDDEN 0x0400enum {@@ -180,8 +180,7 @@ static inline int disk_max_parts(struct gendisk *disk)static inline bool disk_part_scan_enabled (struct gendisk *disk) { -return disk_max_parts (disk) >1 && - !(disk->flags &GENHD_FL_NO_PART_SCAN ); +return disk_max_parts (disk) >1 && !(disk->flags &GENHD_FL_NO_PART ); }static inline dev_t disk_devt (struct gendisk *disk) --2.30.2
PATCH 7/14 block: remove the GENHD_FL_HIDDEN check in blkdev_get_no_open
In reply to Christoph HellwigHidden gendisks never hash the block device inode, so this can't happen.
--- block/bdev.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
block/bdev.c +1 -2
@@ -753,8 +753,7 @@ struct block_device *blkdev_get_no_open(dev_t dev)if (!bdev)return NULL ; -if ((bdev->bd_disk->flags &GENHD_FL_HIDDEN ) || - !try_module_get (bdev->bd_disk->fops->owner)) { +if (!try_module_get (bdev->bd_disk->fops->owner)) {put_device (&bdev->bd_device);return NULL ; }
Signature · 1 line
2.30.2
PATCH 8/14 null_blk: don't suppress partitioning information
In reply to Christoph HellwigThis manually reverts commit 27290b469051 ("null_blk: suppress invalid partition info"). The message in that commit log can't appearch as the flag is never checked during probing, and there is no good reason to treat null_blk special in /proc/partitions.
--- drivers/block/null_blk/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/block/null_blk/main.c +1 -1
@@ -1850,7 +1850,7 @@ static int null_gendisk_register(struct nullb *nullb)set_capacity (disk, size); - disk->flags |=GENHD_FL_EXT_DEVT |GENHD_FL_SUPPRESS_PARTITION_INFO ; + disk->flags |=GENHD_FL_EXT_DEVT ; disk->major = null_major; disk->first_minor = nullb->index; disk->minors =1 ;
Signature · 1 line
2.30.2
PATCH 9/14 mmc: don't set GENHD_FL_SUPPRESS_PARTITION_INFO
In reply to Christoph HellwigThis manually reverts 07b652cdbec3 ("mmc: card: Don't show eMMC RPMB and BOOT areas in /proc/partitions"). Based on the commit description that change was purely cosmetic. mmc is the last driver that sets this flag and thus prevents it from being removed.
--- drivers/mmc/core/block.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/mmc/core/block.c +1 -2
@@ -2397,8 +2397,7 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,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 | -GENHD_FL_SUPPRESS_PARTITION_INFO ; + md->disk->flags |=GENHD_FL_NO_PART ;/* * As discussed on lkml, GENHD_FL_REMOVABLE should:
Signature · 1 line
2.30.2
Re: [PATCH 09/14] mmc: don't set GENHD_FL_SUPPRESS_PARTITION_INFO
Quoted 7 lines · Christoph Hellwig
This manually reverts
07b652cdbec3("mmc: card: Don't show eMMC RPMB and BOOT areas in/proc/partitions"). Based on the commit description that change was purely cosmetic. mmc is the last driver that sets this flag and thus prevents it from being removed.Signed-off-by Christoph Hellwig <[email protected]>
Kind regards
Uffe
Quoted 21 lines
--- drivers/mmc/core/block.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)drivers/mmc/core/block.c +1
-3@@ -2397,8 +2397,7 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,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 | -GENHD_FL_SUPPRESS_PARTITION_INFO ; + md->disk->flags |=GENHD_FL_NO_PART ;/* * As discussed on lkml, GENHD_FL_REMOVABLE should: -- 2.30.2
PATCH 10/14 block: remove GENHD_FL_SUPPRESS_PARTITION_INFO
In reply to Christoph HellwigThis flag is not set directly anywhere and only inherited from GENHD_FL_HIDDEN. Just check for GENHD_FL_HIDDEN instead.
--- block/genhd.c | 11 +++-------- include/linux/genhd.h | 9 +-------- 2 files changed, 4 insertions(+), 16 deletions(-)
block/genhd.c +3 -8
@@ -496,10 +496,8 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk,if (disk->flags &GENHD_FL_HIDDEN ) {/* -* Don't let hidden disks show up in /proc/partitions, -* and don't bother scanning for partitions either. +* Don't bother scanning for partitions. */ - disk->flags |=GENHD_FL_SUPPRESS_PARTITION_INFO ; disk->flags |=GENHD_FL_NO_PART ; }else { ret = bdi_register(disk->bdi, "%u:%u",
@@ -725,8 +723,7 @@ void __init printk_all_partitions(void)* Don't show empty devices or things that have been * suppressed */ -if (get_capacity (disk) ==0 || - (disk->flags &GENHD_FL_SUPPRESS_PARTITION_INFO )) +if (get_capacity (disk) ==0 || (disk->flags &GENHD_FL_HIDDEN ))continue ;/*
@@ -819,9 +816,7 @@ static int show_partition(struct seq_file *seqf, void *v)struct block_device *part;unsigned long idx; -if (!get_capacity (sgp)) -return 0 ; -if (sgp->flags &GENHD_FL_SUPPRESS_PARTITION_INFO ) +if (!get_capacity (sgp) || (sgp->flags &GENHD_FL_HIDDEN ))return 0 ;rcu_read_lock ();
include/linux/genhd.h +1 -8
@@ -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_SUPPRESS_PARTITION_INFO`` (0x0020): don't include -* partition information in ``/proc/partitions`` or in the output of -* printk_all_partitions(). -* Used for the null block device and some MMC devices. -* * ``GENHD_FL_EXT_DEVT`` (0x0040): the driver supports extended * dynamic ``dev_t``, i.e. it wants extended device numbers * (``BLOCK_EXT_MAJOR``).
@@ -63,14 +58,12 @@ struct partition_meta_info {* ``GENHD_FL_HIDDEN`` (0x0400): the block device is hidden; it * doesn't produce events, doesn't appear in sysfs, and doesn't have * an associated ``bdev``. -* Implies ``GENHD_FL_SUPPRESS_PARTITION_INFO`` and -* ``GENHD_FL_NO_PART``. +* Implies ``GENHD_FL_NO_PART``. * Used for multipath devices. */ #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_SUPPRESS_PARTITION_INFO 0x0020#define GENHD_FL_EXT_DEVT 0x0040#define GENHD_FL_NO_PART 0x0200#define GENHD_FL_HIDDEN 0x0400
Signature · 1 line
2.30.2
PATCH 11/14 block: remove GENHD_FL_EXT_DEVT
In reply to Christoph HellwigAll 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.
--- block/genhd.c | 6 +++--- block/partitions/core.c | 9 ++++----- drivers/block/amiflop.c | 1 + drivers/block/ataflop.c | 1 + drivers/block/brd.c | 1 - drivers/block/drbd/drbd_main.c | 1 + drivers/block/floppy.c | 1 + drivers/block/loop.c | 1 - drivers/block/null_blk/main.c | 1 - drivers/block/paride/pcd.c | 1 + drivers/block/paride/pf.c | 1 + drivers/block/pktcdvd.c | 2 +- drivers/block/ps3vram.c | 1 + drivers/block/rbd.c | 6 ++---- drivers/block/swim.c | 1 + drivers/block/swim3.c | 2 +- drivers/block/virtio_blk.c | 1 - drivers/block/z2ram.c | 1 + drivers/block/zram/zram_drv.c | 1 + drivers/cdrom/gdrom.c | 1 + drivers/md/dm.c | 1 + drivers/md/md.c | 5 ----- drivers/mmc/core/block.c | 1 - drivers/mtd/ubi/block.c | 1 + drivers/scsi/sd.c | 1 - drivers/scsi/sr.c | 1 + include/linux/genhd.h | 28 +++++----------------------- 27 files changed, 30 insertions(+), 48 deletions(-)
block/genhd.c +3 -3
@@ -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,
block/partitions/core.c +4 -5
@@ -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 ); }
drivers/block/amiflop.c +1 -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);
drivers/block/ataflop.c +1 -0
@@ -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 );
drivers/block/brd.c +0 -1
@@ -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 );
drivers/block/drbd/drbd_main.c +1 -0
@@ -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;
drivers/block/floppy.c +1 -0
@@ -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);
drivers/block/loop.c +0 -1
@@ -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;
drivers/block/null_blk/main.c +0 -1
@@ -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 ;
drivers/block/paride/pcd.c +1 -0
@@ -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 ;
drivers/block/paride/pf.c +1 -0
@@ -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;
drivers/block/pktcdvd.c +1 -1
@@ -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;
drivers/block/ps3vram.c +1 -0
@@ -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));
drivers/block/rbd.c +2 -4
@@ -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;
drivers/block/swim.c +1 -0
@@ -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 );
drivers/block/swim3.c +1 -1
@@ -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);
drivers/block/virtio_blk.c +0 -1
@@ -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 */
drivers/block/z2ram.c +1 -0
@@ -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);
drivers/block/zram/zram_drv.c +1 -0
@@ -1945,6 +1945,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);
drivers/cdrom/gdrom.c +1 -0
@@ -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 ); }
drivers/md/dm.c +1 -0
@@ -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;
drivers/md/md.c +0 -5
@@ -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);
drivers/mmc/core/block.c +0 -1
@@ -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 ;
drivers/mtd/ubi/block.c +1 -0
@@ -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);
drivers/scsi/sd.c +0 -1
@@ -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 ;
drivers/scsi/sr.c +1 -0
@@ -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 ;
include/linux/genhd.h +5 -23
@@ -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);
Signature · 1 line
2.30.2
Re: [PATCH 11/14] block: remove GENHD_FL_EXT_DEVT
Hi Christoph,
Quoted 62 lines · Christoph Hellwig
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_DEVTand allow extra partitions for all block devices that do support partitions, and require those that do not support partitions to explicit disallow them usingGENHD_FL_NO_PART.Signed-off-by Christoph Hellwig <[email protected]>--- block/genhd.c | 6 +++--- block/partitions/core.c | 9 ++++----- drivers/block/amiflop.c | 1 + drivers/block/ataflop.c | 1 + drivers/block/brd.c | 1 - drivers/block/drbd/drbd_main.c | 1 + drivers/block/floppy.c | 1 + drivers/block/loop.c | 1 - drivers/block/null_blk/main.c | 1 - drivers/block/paride/pcd.c | 1 + drivers/block/paride/pf.c | 1 + drivers/block/pktcdvd.c | 2 +- drivers/block/ps3vram.c | 1 + drivers/block/rbd.c | 6 ++---- drivers/block/swim.c | 1 + drivers/block/swim3.c | 2 +- drivers/block/virtio_blk.c | 1 - drivers/block/z2ram.c | 1 + drivers/block/zram/zram_drv.c | 1 + drivers/cdrom/gdrom.c | 1 + drivers/md/dm.c | 1 + drivers/md/md.c | 5 ----- drivers/mmc/core/block.c | 1 - drivers/mtd/ubi/block.c | 1 + drivers/scsi/sd.c | 1 - drivers/scsi/sr.c | 1 + include/linux/genhd.h | 28 +++++----------------------- 27 files changed, 30 insertions(+), 48 deletions(-)block/genhd.c +1
-2@@ -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);
block/genhd.c static ssize_t disk_ext_range_show(struct device *dev, · line 875
Quoted 6 lines
block/genhd.c +2
-1@@ -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 );
The above change breaks parted on loop, which reads 'ext_range' to add partitions.
Follows the test case:
fallocate -l 4096M loop0.img
losetup /dev/loop0 loop0.img
parted -s /dev/loop0 mklabel MSDOS
parted -s /dev/loop0 mkpart pri 1 1248
Since this patch is merged, /dev/loop0p1 can't be created any more by above script.
Thanks,
Ming
Re: [PATCH 11/14] block: remove GENHD_FL_EXT_DEVT
Quoted 10 lines · Ming Lei
Review static ssize_t disk_ext_range_show(struct device *dev, · line 874
Quoted 6 lines
(quoted diff) +1
-1@@ -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",The above change breaks parted on loop, which reads '
ext_range' to add partitions.
That change alone is not the one breaking it alone, as even if the file reported something else you still could not create new partitions.
Something like the test below should fix it, but I'll need some more time to actually test it:
block/genhd.c +2 -0
@@ -385,6 +385,8 @@ int disk_scan_partitions(struct gendisk *disk, fmode_t mode)if (disk->flags & (GENHD_FL_NO_PART |GENHD_FL_HIDDEN ))return -EINVAL ; +if (test_bit (GD_SUPPRESS_PART_SCAN , &disk->state)) +return -EINVAL ;if (disk->open_partitions)return -EBUSY ;
drivers/block/loop.c +4 -4
@@ -1102,7 +1102,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode, lo->lo_flags |=LO_FLAGS_PARTSCAN ; partscan = lo->lo_flags &LO_FLAGS_PARTSCAN ;if (partscan) - lo->lo_disk->flags &= ~GENHD_FL_NO_PART ; +clear_bit (GD_SUPPRESS_PART_SCAN , &lo->lo_disk->state);loop_global_unlock (lo, is_loop);if (partscan)
@@ -1198,7 +1198,7 @@ static void __loop_clr_fd(struct loop_device *lo, bool release)*/ lo->lo_flags =0 ;if (!part_shift) - lo->lo_disk->flags |=GENHD_FL_NO_PART ; +set_bit (GD_SUPPRESS_PART_SCAN , &lo->lo_disk->state);mutex_lock (&lo->lo_mutex); lo->lo_state = Lo_unbound;mutex_unlock (&lo->lo_mutex);
@@ -1308,7 +1308,7 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)if (!err && (lo->lo_flags &LO_FLAGS_PARTSCAN ) && !(prev_lo_flags &LO_FLAGS_PARTSCAN )) { - lo->lo_disk->flags &= ~GENHD_FL_NO_PART ; +clear_bit (GD_SUPPRESS_PART_SCAN , &lo->lo_disk->state); partscan = true; } out_unlock:
@@ -2011,7 +2011,7 @@ static int loop_add(int i)* userspace tools. Parameters like this in general should be avoided. */ if (!part_shift) - disk->flags |=GENHD_FL_NO_PART ; +set_bit (GD_SUPPRESS_PART_SCAN , &disk->state);mutex_init (&lo->lo_mutex); lo->lo_number = i;spin_lock_init (&lo->lo_lock);
include/linux/blkdev.h +1 -0
@@ -147,6 +147,7 @@ struct gendisk {#define GD_DEAD 2#define GD_NATIVE_CAPACITY 3#define GD_ADDED 4 +#define GD_SUPPRESS_PART_SCAN 4struct mutex open_mutex;/* open/close mutex */ unsigned open_partitions;/* number of open partitions */
Re: [PATCH 11/14] block: remove GENHD_FL_EXT_DEVT
Quoted 2 lines · Christoph Hellwig
#define
GD_ADDED4
+#defineGD_SUPPRESS_PART_SCAN4
.. and this should be 5 obviously.
Re: [PATCH 11/14] block: remove GENHD_FL_EXT_DEVT
In reply to Christoph HellwigQuoted 76 lines · Christoph Hellwig
Quoted 10 lines · Ming Lei
Review static ssize_t disk_ext_range_show(struct device *dev, · line 874
Quoted 6 lines
(quoted diff) +1
-1@@ -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",The above change breaks parted on loop, which reads '
ext_range' to add partitions.That change alone is not the one breaking it alone, as even if the file reported something else you still could not create new partitions.
Something like the test below should fix it, but I'll need some more time to actually test it:
block/genhd.c +2
-0@@ -385,6 +385,8 @@ int disk_scan_partitions(struct gendisk *disk, fmode_t mode)if (disk->flags & (GENHD_FL_NO_PART |GENHD_FL_HIDDEN ))return -EINVAL ; +if (test_bit (GD_SUPPRESS_PART_SCAN , &disk->state)) +return -EINVAL ;if (disk->open_partitions)return -EBUSY ;drivers/block/loop.c +4
-4@@ -1102,7 +1102,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode, lo->lo_flags |=LO_FLAGS_PARTSCAN ; partscan = lo->lo_flags &LO_FLAGS_PARTSCAN ;if (partscan) - lo->lo_disk->flags &= ~GENHD_FL_NO_PART ; +clear_bit (GD_SUPPRESS_PART_SCAN , &lo->lo_disk->state);loop_global_unlock (lo, is_loop);if (partscan)@@ -1198,7 +1198,7 @@ static void __loop_clr_fd(struct loop_device *lo, bool release)*/ lo->lo_flags =0 ;if (!part_shift) - lo->lo_disk->flags |=GENHD_FL_NO_PART ; +set_bit (GD_SUPPRESS_PART_SCAN , &lo->lo_disk->state);mutex_lock (&lo->lo_mutex); lo->lo_state = Lo_unbound;mutex_unlock (&lo->lo_mutex);@@ -1308,7 +1308,7 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)if (!err && (lo->lo_flags &LO_FLAGS_PARTSCAN ) && !(prev_lo_flags &LO_FLAGS_PARTSCAN )) { - lo->lo_disk->flags &= ~GENHD_FL_NO_PART ; +clear_bit (GD_SUPPRESS_PART_SCAN , &lo->lo_disk->state); partscan = true; } out_unlock:@@ -2011,7 +2011,7 @@ static int loop_add(int i)* userspace tools. Parameters like this in general should be avoided. */ if (!part_shift) - disk->flags |=GENHD_FL_NO_PART ; +set_bit (GD_SUPPRESS_PART_SCAN , &disk->state);mutex_init (&lo->lo_mutex); lo->lo_number = i;spin_lock_init (&lo->lo_lock);include/linux/blkdev.h +0
-0
include/linux/blkdev.h struct gendisk { · line 153
Quoted 7 lines
include/linux/blkdev.h +1
-0@@ -147,6 +147,7 @@ struct gendisk {#define GD_DEAD 2#define GD_NATIVE_CAPACITY 3#define GD_ADDED 4 +#define GD_SUPPRESS_PART_SCAN 4struct mutex open_mutex;/* open/close mutex */ unsigned open_partitions;/* number of open partitions */
The patch itself can fix the issue in this test case, since ext_range recovers to 256.
BTW, SUPPRESS_PART_SCAN looks more like one flag, instead of 'state'.
Thanks,
Ming
Re: [PATCH 11/14] block: remove GENHD_FL_EXT_DEVT
Quoted 1 line · Ming Lei
BTW,
SUPPRESS_PART_SCANlooks more like one flag, instead of 'state'.
It is kinda inbetween, but I favour the state. ->flags is suppoed to be set statically at initialization time, and the GENHD_FL_NO_PART usage by loop is the only thing that violates it. And once a device declares support for partitions supresing the scans is basically a policy and thus a state anyway.
PATCH 12/14 block: don't set GENHD_FL_NO_PART for hidden gendisks
In reply to Christoph HellwigHidden gendisks can't be opened using blkdev_get_*, so we can't really reach any of the partition scanning paths or partitioning ioctls except for the initial partition scan from add_disk.
--- block/genhd.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-)
block/genhd.c +2 -7
@@ -376,7 +376,7 @@ int disk_scan_partitions(struct gendisk *disk, fmode_t mode) {struct block_device *bdev; -if (disk->flags &GENHD_FL_NO_PART ) +if (disk->flags & (GENHD_FL_NO_PART |GENHD_FL_HIDDEN ))return -EINVAL ;if (disk->open_partitions)return -EBUSY ;
@@ -493,12 +493,7 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk,if (ret) goto out_put_slave_dir; -if (disk->flags &GENHD_FL_HIDDEN ) { -/* -* Don't bother scanning for partitions. -*/ - disk->flags |=GENHD_FL_NO_PART ; - }else { +if (!(disk->flags &GENHD_FL_HIDDEN )) { ret =bdi_register (disk->bdi,"%u:%u" , disk->major, disk->first_minor);if (ret)
Signature · 1 line
2.30.2
PATCH 13/14 block: cleanup the GENHD_FL_* definitions
In reply to Christoph HellwigSwitch to an enum and tidy up the documentation.
--- include/linux/genhd.h | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-)
include/linux/genhd.h +14 -18
@@ -39,28 +39,24 @@ struct partition_meta_info {/** * DOC: genhd capability flags * -* ``GENHD_FL_REMOVABLE`` (0x0001): indicates that the block device -* gives access to removable media. -* When set, the device remains present even when media is not -* inserted. -* Must not be set for devices which are removed entirely when the +* ``GENHD_FL_REMOVABLE``: indicates that the block device gives access to +* removable media. When set, the device remains present even when media is not +* inserted. Shall not be set for devices which are removed entirely when the * media is removed. * -* ``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. +* ``GENHD_FL_HIDDEN``: the block device is hidden; it doesn't produce events, +* doesn't appear in sysfs, and can't be opened from userspace or using +* blkdev_get*. Used for the underlying components of multipath devices. +* +* ``GENHD_FL_NO_PART``: partition support is disabled. The kernel will not +* scan for partitions from add_disk, and users can't add partitions manually. * -* ``GENHD_FL_HIDDEN`` (0x0400): the block device is hidden; it -* doesn't produce events, doesn't appear in sysfs, and doesn't have -* an associated ``bdev``. -* Implies ``GENHD_FL_NO_PART``. -* Used for multipath devices. */ -#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_NO_PART 0x0200 -#define GENHD_FL_HIDDEN 0x0400 +enum { +GENHD_FL_REMOVABLE =1 <<0 , +GENHD_FL_HIDDEN =1 <<1 , +GENHD_FL_NO_PART =1 <<2 , +};enum {DISK_EVENT_MEDIA_CHANGE =1 <<0 ,/* media changed */
Signature · 1 line
2.30.2
PATCH 14/14 sr: set GENHD_FL_REMOVABLE earlier
In reply to Christoph HellwigSet up GENHD_FL_REMOVABLE together with the rest of the gendisk fields.
--- drivers/scsi/sr.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/scsi/sr.c +1 -2
@@ -684,7 +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->flags |=GENHD_FL_REMOVABLE |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 ;
@@ -726,7 +726,6 @@ static int sr_probe(struct device *dev)blk_pm_runtime_init (sdev->request_queue, dev);dev_set_drvdata (dev, cd); - disk->flags |=GENHD_FL_REMOVABLE ;sr_revalidate_disk (cd); error =device_add_disk (&sdev->sdev_gendev, disk,NULL );
Signature · 1 line
2.30.2
Quoted 42 lines · Christoph Hellwig
Ho Jens,
the gendisk flags have been a complete mess for a while. This series tries to untangle them as much as easily possible.
Diffstat:
block/bdev.c | 5 -- block/blk.h | 1 block/genhd.c | 41 +++++++---------- block/ioctl.c | 31 ++----------- block/partitions/core.c | 24 ++++------ drivers/block/amiflop.c | 1 drivers/block/ataflop.c | 1 drivers/block/brd.c | 1 drivers/block/drbd/drbd_main.c | 1 drivers/block/floppy.c | 1 drivers/block/loop.c | 9 +-- drivers/block/n64cart.c | 2 drivers/block/null_blk/main.c | 1 drivers/block/paride/pcd.c | 3 - drivers/block/paride/pf.c | 1 drivers/block/pktcdvd.c | 2 drivers/block/ps3vram.c | 1 drivers/block/rbd.c | 6 -- drivers/block/sunvdc.c | 17 +++---- drivers/block/swim.c | 1 drivers/block/swim3.c | 2 drivers/block/virtio_blk.c | 1 drivers/block/xen-blkback/xenbus.c | 2 drivers/block/xen-blkfront.c | 26 ++++------- drivers/block/z2ram.c | 1 drivers/block/zram/zram_drv.c | 1 drivers/cdrom/gdrom.c | 1 drivers/md/dm.c | 1 drivers/md/md.c | 5 -- drivers/mmc/core/block.c | 4 - drivers/mtd/ubi/block.c | 1 drivers/scsi/sd.c | 1 drivers/scsi/sr.c | 6 +- include/linux/genhd.h | 85 +++++++++---------------------------- 34 files changed, 104 insertions(+), 183 deletions(-)
Quoted 1 line
[...]
Applied, thanks!
[01/14] block: move GENHD_FL_NATIVE_CAPACITY to disk->state
(no commit info)
[02/14] block: move GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE to disk->event_flags
(no commit info)
[03/14] block: remove GENHD_FL_CD
(no commit info)
[04/14] block: remove a dead check in show_partition
(no commit info)
[05/14] block: merge disk_scan_partitions and blkdev_reread_part
(no commit info)
[06/14] block: rename GENHD_FL_NO_PART_SCAN to GENHD_FL_NO_PART
(no commit info)
[07/14] block: remove the GENHD_FL_HIDDEN check in blkdev_get_no_open
(no commit info)
[08/14] null_blk: don't suppress partitioning information
(no commit info)
[09/14] mmc: don't set GENHD_FL_SUPPRESS_PARTITION_INFO
(no commit info)
[10/14] block: remove GENHD_FL_SUPPRESS_PARTITION_INFO
(no commit info)
[11/14] block: remove GENHD_FL_EXT_DEVT
(no commit info)
[12/14] block: don't set GENHD_FL_NO_PART for hidden gendisks
(no commit info)
[13/14] block: cleanup the GENHD_FL_* definitions
(no commit info)
[14/14] sr: set GENHD_FL_REMOVABLE earlier
(no commit info)
Best regards,
Signature · 1 line
Jens Axboe