Commit 1a827ce1 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

block: remove GENHD_FL_CD

GENHD_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.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20211122130625.1136848-4-hch@lst.deSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 1545e0b4
...@@ -143,8 +143,8 @@ static int vdc_getgeo(struct block_device *bdev, struct hd_geometry *geo) ...@@ -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, static int vdc_ioctl(struct block_device *bdev, fmode_t mode,
unsigned command, unsigned long argument) unsigned command, unsigned long argument)
{ {
struct vdc_port *port = bdev->bd_disk->private_data;
int i; int i;
struct gendisk *disk;
switch (command) { switch (command) {
case CDROMMULTISESSION: case CDROMMULTISESSION:
...@@ -155,12 +155,15 @@ static int vdc_ioctl(struct block_device *bdev, fmode_t mode, ...@@ -155,12 +155,15 @@ static int vdc_ioctl(struct block_device *bdev, fmode_t mode,
return 0; return 0;
case CDROM_GET_CAPABILITY: case CDROM_GET_CAPABILITY:
disk = bdev->bd_disk; if (!vdc_version_supported(port, 1, 1))
return -EINVAL;
if (bdev->bd_disk && (disk->flags & GENHD_FL_CD)) switch (port->vdisk_mtype) {
case VD_MEDIA_TYPE_CD:
case VD_MEDIA_TYPE_DVD:
return 0; return 0;
return -EINVAL; default:
return -EINVAL;
}
default: default:
pr_debug(PFX "ioctl %08x not supported\n", command); pr_debug(PFX "ioctl %08x not supported\n", command);
return -EINVAL; return -EINVAL;
...@@ -854,14 +857,12 @@ static int probe_disk(struct vdc_port *port) ...@@ -854,14 +857,12 @@ static int probe_disk(struct vdc_port *port)
switch (port->vdisk_mtype) { switch (port->vdisk_mtype) {
case VD_MEDIA_TYPE_CD: case VD_MEDIA_TYPE_CD:
pr_info(PFX "Virtual CDROM %s\n", port->disk_name); pr_info(PFX "Virtual CDROM %s\n", port->disk_name);
g->flags |= GENHD_FL_CD;
g->flags |= GENHD_FL_REMOVABLE; g->flags |= GENHD_FL_REMOVABLE;
set_disk_ro(g, 1); set_disk_ro(g, 1);
break; break;
case VD_MEDIA_TYPE_DVD: case VD_MEDIA_TYPE_DVD:
pr_info(PFX "Virtual DVD %s\n", port->disk_name); pr_info(PFX "Virtual DVD %s\n", port->disk_name);
g->flags |= GENHD_FL_CD;
g->flags |= GENHD_FL_REMOVABLE; g->flags |= GENHD_FL_REMOVABLE;
set_disk_ro(g, 1); set_disk_ro(g, 1);
break; break;
......
...@@ -510,7 +510,7 @@ static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle, ...@@ -510,7 +510,7 @@ static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle,
} }
vbd->size = vbd_sz(vbd); 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; vbd->type |= VDISK_CDROM;
if (vbd->bdev->bd_disk->flags & GENHD_FL_REMOVABLE) if (vbd->bdev->bd_disk->flags & GENHD_FL_REMOVABLE)
vbd->type |= VDISK_REMOVABLE; vbd->type |= VDISK_REMOVABLE;
......
...@@ -198,6 +198,7 @@ struct blkfront_info ...@@ -198,6 +198,7 @@ struct blkfront_info
struct gendisk *gd; struct gendisk *gd;
u16 sector_size; u16 sector_size;
unsigned int physical_sector_size; unsigned int physical_sector_size;
unsigned long vdisk_info;
int vdevice; int vdevice;
blkif_vdev_t handle; blkif_vdev_t handle;
enum blkif_state connected; enum blkif_state connected;
...@@ -505,6 +506,7 @@ static int blkif_getgeo(struct block_device *bd, struct hd_geometry *hg) ...@@ -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, static int blkif_ioctl(struct block_device *bdev, fmode_t mode,
unsigned command, unsigned long argument) unsigned command, unsigned long argument)
{ {
struct blkfront_info *info = bdev->bd_disk->private_data;
int i; int i;
switch (command) { switch (command) {
...@@ -514,9 +516,9 @@ static int blkif_ioctl(struct block_device *bdev, fmode_t mode, ...@@ -514,9 +516,9 @@ static int blkif_ioctl(struct block_device *bdev, fmode_t mode,
return -EFAULT; return -EFAULT;
return 0; return 0;
case CDROM_GET_CAPABILITY: case CDROM_GET_CAPABILITY:
if (bdev->bd_disk->flags & GENHD_FL_CD) if (!(info->vdisk_info & VDISK_CDROM))
return 0; return -EINVAL;
return -EINVAL; return 0;
default: default:
return -EINVAL; return -EINVAL;
} }
...@@ -1057,9 +1059,8 @@ static char *encode_disk_name(char *ptr, unsigned int n) ...@@ -1057,9 +1059,8 @@ static char *encode_disk_name(char *ptr, unsigned int n)
} }
static int xlvbd_alloc_gendisk(blkif_sector_t capacity, static int xlvbd_alloc_gendisk(blkif_sector_t capacity,
struct blkfront_info *info, struct blkfront_info *info, u16 sector_size,
u16 vdisk_info, u16 sector_size, unsigned int physical_sector_size)
unsigned int physical_sector_size)
{ {
struct gendisk *gd; struct gendisk *gd;
int nr_minors = 1; int nr_minors = 1;
...@@ -1157,15 +1158,11 @@ static int xlvbd_alloc_gendisk(blkif_sector_t capacity, ...@@ -1157,15 +1158,11 @@ static int xlvbd_alloc_gendisk(blkif_sector_t capacity,
xlvbd_flush(info); xlvbd_flush(info);
if (vdisk_info & VDISK_READONLY) if (info->vdisk_info & VDISK_READONLY)
set_disk_ro(gd, 1); set_disk_ro(gd, 1);
if (info->vdisk_info & VDISK_REMOVABLE)
if (vdisk_info & VDISK_REMOVABLE)
gd->flags |= GENHD_FL_REMOVABLE; gd->flags |= GENHD_FL_REMOVABLE;
if (vdisk_info & VDISK_CDROM)
gd->flags |= GENHD_FL_CD;
return 0; return 0;
out_free_tag_set: out_free_tag_set:
...@@ -2304,7 +2301,6 @@ static void blkfront_connect(struct blkfront_info *info) ...@@ -2304,7 +2301,6 @@ static void blkfront_connect(struct blkfront_info *info)
unsigned long long sectors; unsigned long long sectors;
unsigned long sector_size; unsigned long sector_size;
unsigned int physical_sector_size; unsigned int physical_sector_size;
unsigned int binfo;
int err, i; int err, i;
struct blkfront_ring_info *rinfo; struct blkfront_ring_info *rinfo;
...@@ -2342,7 +2338,7 @@ static void blkfront_connect(struct blkfront_info *info) ...@@ -2342,7 +2338,7 @@ static void blkfront_connect(struct blkfront_info *info)
err = xenbus_gather(XBT_NIL, info->xbdev->otherend, err = xenbus_gather(XBT_NIL, info->xbdev->otherend,
"sectors", "%llu", &sectors, "sectors", "%llu", &sectors,
"info", "%u", &binfo, "info", "%u", &info->vdisk_info,
"sector-size", "%lu", &sector_size, "sector-size", "%lu", &sector_size,
NULL); NULL);
if (err) { if (err) {
...@@ -2371,7 +2367,7 @@ static void blkfront_connect(struct blkfront_info *info) ...@@ -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); physical_sector_size);
if (err) { if (err) {
xenbus_dev_fatal(info->xbdev, err, "xlvbd_add at %s", xenbus_dev_fatal(info->xbdev, err, "xlvbd_add at %s",
......
...@@ -684,7 +684,6 @@ static int sr_probe(struct device *dev) ...@@ -684,7 +684,6 @@ static int sr_probe(struct device *dev)
disk->minors = 1; disk->minors = 1;
sprintf(disk->disk_name, "sr%d", minor); sprintf(disk->disk_name, "sr%d", minor);
disk->fops = &sr_bdops; disk->fops = &sr_bdops;
disk->flags = GENHD_FL_CD;
disk->events = DISK_EVENT_MEDIA_CHANGE | DISK_EVENT_EJECT_REQUEST; 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; DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE;
......
...@@ -46,10 +46,6 @@ struct partition_meta_info { ...@@ -46,10 +46,6 @@ struct partition_meta_info {
* Must not be set for devices which are removed entirely when the * Must not be set for devices which are removed entirely when the
* media is removed. * 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 * ``GENHD_FL_SUPPRESS_PARTITION_INFO`` (0x0020): don't include
* partition information in ``/proc/partitions`` or in the output of * partition information in ``/proc/partitions`` or in the output of
* printk_all_partitions(). * printk_all_partitions().
...@@ -74,7 +70,6 @@ struct partition_meta_info { ...@@ -74,7 +70,6 @@ struct partition_meta_info {
#define GENHD_FL_REMOVABLE 0x0001 #define GENHD_FL_REMOVABLE 0x0001
/* 2 is unused (used to be GENHD_FL_DRIVERFS) */ /* 2 is unused (used to be GENHD_FL_DRIVERFS) */
/* 4 is unused (used to be GENHD_FL_MEDIA_CHANGE_NOTIFY) */ /* 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_SUPPRESS_PARTITION_INFO 0x0020
#define GENHD_FL_EXT_DEVT 0x0040 #define GENHD_FL_EXT_DEVT 0x0040
#define GENHD_FL_NO_PART_SCAN 0x0200 #define GENHD_FL_NO_PART_SCAN 0x0200
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment