mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 13:14:07 +08:00
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: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20211122130625.1136848-4-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
1545e0b419
commit
1a827ce1b9
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -198,6 +198,7 @@ struct blkfront_info
|
||||
struct 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",
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user