Blob Blame History Raw
From 9ec1f4444e4f969bd5729ac031a3e5735d6664df Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Thu, 17 Jan 2019 23:05:00 +0100
Subject: [PATCH v2 3/4] Revert "block: unexport DISK_EVENT_MEDIA_CHANGE for
 legacy/fringe drivers"
Patch-mainline: v5.2-rc1
Git-commit: 773008f6fe0544aa28140ced0504cefba17381aa
References: bsc#1110946, bsc#1119843

This reverts commit 9fd097b14918875bd6f125ed699d7bbbba5893ee.

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: Jiri Kosina <jikos@kernel.org>
Cc: Tim Waugh <tim@cyberelk.net>
Cc: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
---
 drivers/block/DAC960.c     |    1 +
 drivers/block/amiflop.c    |    1 +
 drivers/block/ataflop.c    |    1 +
 drivers/block/floppy.c     |    1 +
 drivers/block/paride/pcd.c |    1 +
 drivers/block/paride/pd.c  |    1 +
 drivers/block/paride/pf.c  |    1 +
 drivers/block/swim.c       |    1 +
 drivers/block/swim3.c      |    1 +
 drivers/block/xsysace.c    |    1 +
 drivers/cdrom/gdrom.c      |    1 +
 11 files changed, 11 insertions(+)

--- a/drivers/block/DAC960.c
+++ b/drivers/block/DAC960.c
@@ -2548,6 +2548,7 @@ static bool DAC960_RegisterBlockDevice(D
 	disk->major = MajorNumber;
 	disk->first_minor = n << DAC960_MaxPartitionsBits;
 	disk->fops = &DAC960_BlockDeviceOperations;
+	disk->events = DISK_EVENT_MEDIA_CHANGE;
    }
   /*
     Indicate the Block Device Registration completed successfully,
--- a/drivers/block/amiflop.c
+++ b/drivers/block/amiflop.c
@@ -1735,6 +1735,7 @@ static int __init fd_probe_drives(void)
 		disk->major = FLOPPY_MAJOR;
 		disk->first_minor = drive;
 		disk->fops = &floppy_fops;
+		disk->events = DISK_EVENT_MEDIA_CHANGE;
 		sprintf(disk->disk_name, "fd%d", drive);
 		disk->private_data = &unit[drive];
 		set_capacity(disk, 880*2);
--- a/drivers/block/ataflop.c
+++ b/drivers/block/ataflop.c
@@ -1970,6 +1970,7 @@ static int __init atari_floppy_init (voi
 		unit[i].disk->first_minor = i;
 		sprintf(unit[i].disk->disk_name, "fd%d", i);
 		unit[i].disk->fops = &floppy_fops;
+		unit[i].disk->events = DISK_EVENT_MEDIA_CHANGE;
 		unit[i].disk->private_data = &unit[i];
 		set_capacity(unit[i].disk, MAX_DISK_SIZE * 2);
 		add_disk(unit[i].disk);
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -4212,6 +4212,7 @@ static int __init do_floppy_init(void)
 		disks[drive]->major = FLOPPY_MAJOR;
 		disks[drive]->first_minor = TOMINOR(drive);
 		disks[drive]->fops = &floppy_fops;
+		disks[drive]->events = DISK_EVENT_MEDIA_CHANGE;
 		sprintf(disks[drive]->disk_name, "fd%d", drive);
 
 		setup_timer(&motor_off_timer[drive], motor_off_callback, drive);
--- a/drivers/block/paride/pcd.c
+++ b/drivers/block/paride/pcd.c
@@ -329,6 +329,7 @@ static void pcd_init_units(void)
 		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;
 	}
 }
 
--- a/drivers/block/paride/pd.c
+++ b/drivers/block/paride/pd.c
@@ -854,6 +854,7 @@ static void pd_probe_drive(struct pd_uni
 	p->fops = &pd_fops;
 	p->major = major;
 	p->first_minor = (disk - pd) << PD_BITS;
+	p->events = DISK_EVENT_MEDIA_CHANGE;
 	disk->gd = p;
 	p->private_data = disk;
 	p->queue = blk_init_queue(do_pd_request, &pd_lock);
--- a/drivers/block/paride/pf.c
+++ b/drivers/block/paride/pf.c
@@ -304,6 +304,7 @@ static void __init pf_init_units(void)
 		disk->first_minor = unit;
 		strcpy(disk->disk_name, pf->name);
 		disk->fops = &pf_fops;
+		disk->events = DISK_EVENT_MEDIA_CHANGE;
 		if (!(*drives[unit])[D_PRT])
 			pf_drive_count++;
 	}
--- a/drivers/block/swim.c
+++ b/drivers/block/swim.c
@@ -875,6 +875,7 @@ static int swim_floppy_init(struct swim_
 		swd->unit[drive].disk->first_minor = drive;
 		sprintf(swd->unit[drive].disk->disk_name, "fd%d", drive);
 		swd->unit[drive].disk->fops = &floppy_fops;
+		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);
 		add_disk(swd->unit[drive].disk);
--- a/drivers/block/swim3.c
+++ b/drivers/block/swim3.c
@@ -1242,6 +1242,7 @@ static int swim3_attach(struct macio_dev
 	disk->first_minor = index;
 	disk->fops = &floppy_fops;
 	disk->private_data = &floppy_states[index];
+	disk->events = DISK_EVENT_MEDIA_CHANGE;
 	disk->flags |= GENHD_FL_REMOVABLE;
 	sprintf(disk->disk_name, "fd%d", index);
 	set_capacity(disk, 2880);
--- a/drivers/block/xsysace.c
+++ b/drivers/block/xsysace.c
@@ -1005,6 +1005,7 @@ static int ace_setup(struct ace_device *
 	ace->gd->major = ace_major;
 	ace->gd->first_minor = ace->id * ACE_NUM_MINORS;
 	ace->gd->fops = &ace_fops;
+	ace->gd->events = DISK_EVENT_MEDIA_CHANGE;
 	ace->gd->queue = ace->queue;
 	ace->gd->private_data = ace;
 	snprintf(ace->gd->disk_name, 32, "xs%c", ace->id + 'a');
--- a/drivers/cdrom/gdrom.c
+++ b/drivers/cdrom/gdrom.c
@@ -807,6 +807,7 @@ static int probe_gdrom(struct platform_d
 		goto probe_fail_cdrom_register;
 	}
 	gd.disk->fops = &gdrom_bdops;
+	gd.disk->events = DISK_EVENT_MEDIA_CHANGE;
 	/* latch on to the interrupt */
 	err = gdrom_set_interrupt_handlers();
 	if (err)