Revert "ide: unexport DISK_EVENT_MEDIA_CHANGE for ide-gd and ide-cd"
authorMartin Wilck <mwilck@suse.com>
Wed, 27 Mar 2019 13:51:03 +0000 (14:51 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 12 Apr 2019 19:35:25 +0000 (13:35 -0600)
This reverts commit 7eec77a1816a7042591a6cbdb4820e9e7ebffe0e.

Instead of leaving disk->events completely empty, we now export the
supported events again, and tell the block layer not to forward events
to user space by not setting DISK_EVENT_FLAG_UEVENT. This allows the
block layer to distinguish between devices that for which events should
be handled in kernel only, and devices which don't support any meda
change events at all.

Cc: Borislav Petkov <bp@alien8.de>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin Wilck <mwilck@suse.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/ide/ide-cd.c
drivers/ide/ide-cd_ioctl.c
drivers/ide/ide-gd.c

index 1f03884a6808f1878ffb990351dfb89d2ab68037..3b15adc6ce98ee7fa73e3ea26d20563ca9d0902e 100644 (file)
@@ -1797,6 +1797,7 @@ static int ide_cd_probe(ide_drive_t *drive)
        ide_cd_read_toc(drive);
        g->fops = &idecd_ops;
        g->flags |= GENHD_FL_REMOVABLE | GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE;
+       g->events = DISK_EVENT_MEDIA_CHANGE;
        device_add_disk(&drive->gendev, g, NULL);
        return 0;
 
index 4a6e1a413eadb483604e9bb4931301746a9e9c8b..46f2df288c6a1c63df711c4aa666528c5313f9d3 100644 (file)
@@ -82,8 +82,9 @@ int ide_cdrom_drive_status(struct cdrom_device_info *cdi, int slot_nr)
 
 /*
  * ide-cd always generates media changed event if media is missing, which
- * makes it impossible to use for proper event reporting, so disk->events
- * is cleared to 0 and the following function is used only to trigger
+ * makes it impossible to use for proper event reporting, so
+ * DISK_EVENT_FLAG_UEVENT is cleared in disk->event_flags
+ * and the following function is used only to trigger
  * revalidation and never propagated to userland.
  */
 unsigned int ide_cdrom_check_events_real(struct cdrom_device_info *cdi,
index 04e008e8f6f9db63776160fc2dbd928d6af33fed..f233b34ea0c0bd2b732b0b5df25d65bf8e3d9214 100644 (file)
@@ -299,8 +299,9 @@ static unsigned int ide_gd_check_events(struct gendisk *disk,
        /*
         * The following is used to force revalidation on the first open on
         * removeable devices, and never gets reported to userland as
-        * genhd->events is 0.  This is intended as removeable ide disk
-        * can't really detect MEDIA_CHANGE events.
+        * DISK_EVENT_FLAG_UEVENT isn't set in genhd->event_flags.
+        * This is intended as removable ide disk can't really detect
+        * MEDIA_CHANGE events.
         */
        ret = drive->dev_flags & IDE_DFLAG_MEDIA_CHANGED;
        drive->dev_flags &= ~IDE_DFLAG_MEDIA_CHANGED;
@@ -416,6 +417,7 @@ static int ide_gd_probe(ide_drive_t *drive)
        if (drive->dev_flags & IDE_DFLAG_REMOVABLE)
                g->flags = GENHD_FL_REMOVABLE;
        g->fops = &ide_gd_ops;
+       g->events = DISK_EVENT_MEDIA_CHANGE;
        device_add_disk(&drive->gendev, g, NULL);
        return 0;