提交 773008f6 编写于 作者: M Martin Wilck 提交者: Jens Axboe

Revert "block: unexport DISK_EVENT_MEDIA_CHANGE for legacy/fringe drivers"

This reverts commit 9fd097b1.

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>
Reviewed-by: NHannes Reinecke <hare@suse.com>
Reviewed-by: NChristoph Hellwig <hch@lst.de>
Signed-off-by: NMartin Wilck <mwilck@suse.com>
Signed-off-by: NJens Axboe <axboe@kernel.dk>
上级 3c12c8e9
...@@ -1829,6 +1829,7 @@ static int __init fd_probe_drives(void) ...@@ -1829,6 +1829,7 @@ static int __init fd_probe_drives(void)
disk->major = FLOPPY_MAJOR; disk->major = FLOPPY_MAJOR;
disk->first_minor = drive; disk->first_minor = drive;
disk->fops = &floppy_fops; disk->fops = &floppy_fops;
disk->events = DISK_EVENT_MEDIA_CHANGE;
sprintf(disk->disk_name, "fd%d", drive); sprintf(disk->disk_name, "fd%d", drive);
disk->private_data = &unit[drive]; disk->private_data = &unit[drive];
set_capacity(disk, 880*2); set_capacity(disk, 880*2);
......
...@@ -2028,6 +2028,7 @@ static int __init atari_floppy_init (void) ...@@ -2028,6 +2028,7 @@ static int __init atari_floppy_init (void)
unit[i].disk->first_minor = i; unit[i].disk->first_minor = i;
sprintf(unit[i].disk->disk_name, "fd%d", i); sprintf(unit[i].disk->disk_name, "fd%d", i);
unit[i].disk->fops = &floppy_fops; unit[i].disk->fops = &floppy_fops;
unit[i].disk->events = DISK_EVENT_MEDIA_CHANGE;
unit[i].disk->private_data = &unit[i]; unit[i].disk->private_data = &unit[i];
set_capacity(unit[i].disk, MAX_DISK_SIZE * 2); set_capacity(unit[i].disk, MAX_DISK_SIZE * 2);
add_disk(unit[i].disk); add_disk(unit[i].disk);
......
...@@ -4540,6 +4540,7 @@ static int __init do_floppy_init(void) ...@@ -4540,6 +4540,7 @@ static int __init do_floppy_init(void)
disks[drive]->major = FLOPPY_MAJOR; disks[drive]->major = FLOPPY_MAJOR;
disks[drive]->first_minor = TOMINOR(drive); disks[drive]->first_minor = TOMINOR(drive);
disks[drive]->fops = &floppy_fops; disks[drive]->fops = &floppy_fops;
disks[drive]->events = DISK_EVENT_MEDIA_CHANGE;
sprintf(disks[drive]->disk_name, "fd%d", drive); sprintf(disks[drive]->disk_name, "fd%d", drive);
timer_setup(&motor_off_timer[drive], motor_off_callback, 0); timer_setup(&motor_off_timer[drive], motor_off_callback, 0);
......
...@@ -342,6 +342,7 @@ static void pcd_init_units(void) ...@@ -342,6 +342,7 @@ static void pcd_init_units(void)
strcpy(disk->disk_name, cd->name); /* umm... */ strcpy(disk->disk_name, cd->name); /* umm... */
disk->fops = &pcd_bdops; disk->fops = &pcd_bdops;
disk->flags = GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE; disk->flags = GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE;
disk->events = DISK_EVENT_MEDIA_CHANGE;
} }
} }
......
...@@ -897,6 +897,7 @@ static void pd_probe_drive(struct pd_unit *disk) ...@@ -897,6 +897,7 @@ static void pd_probe_drive(struct pd_unit *disk)
p->fops = &pd_fops; p->fops = &pd_fops;
p->major = major; p->major = major;
p->first_minor = (disk - pd) << PD_BITS; p->first_minor = (disk - pd) << PD_BITS;
p->events = DISK_EVENT_MEDIA_CHANGE;
disk->gd = p; disk->gd = p;
p->private_data = disk; p->private_data = disk;
......
...@@ -319,6 +319,7 @@ static void __init pf_init_units(void) ...@@ -319,6 +319,7 @@ static void __init pf_init_units(void)
disk->first_minor = unit; disk->first_minor = unit;
strcpy(disk->disk_name, pf->name); strcpy(disk->disk_name, pf->name);
disk->fops = &pf_fops; disk->fops = &pf_fops;
disk->events = DISK_EVENT_MEDIA_CHANGE;
if (!(*drives[unit])[D_PRT]) if (!(*drives[unit])[D_PRT])
pf_drive_count++; pf_drive_count++;
} }
......
...@@ -862,6 +862,7 @@ static int swim_floppy_init(struct swim_priv *swd) ...@@ -862,6 +862,7 @@ static int swim_floppy_init(struct swim_priv *swd)
swd->unit[drive].disk->first_minor = drive; swd->unit[drive].disk->first_minor = drive;
sprintf(swd->unit[drive].disk->disk_name, "fd%d", drive); sprintf(swd->unit[drive].disk->disk_name, "fd%d", drive);
swd->unit[drive].disk->fops = &floppy_fops; 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]; swd->unit[drive].disk->private_data = &swd->unit[drive];
set_capacity(swd->unit[drive].disk, 2880); set_capacity(swd->unit[drive].disk, 2880);
add_disk(swd->unit[drive].disk); add_disk(swd->unit[drive].disk);
......
...@@ -1216,6 +1216,7 @@ static int swim3_attach(struct macio_dev *mdev, ...@@ -1216,6 +1216,7 @@ static int swim3_attach(struct macio_dev *mdev,
disk->first_minor = floppy_count; disk->first_minor = floppy_count;
disk->fops = &floppy_fops; disk->fops = &floppy_fops;
disk->private_data = fs; disk->private_data = fs;
disk->events = DISK_EVENT_MEDIA_CHANGE;
disk->flags |= GENHD_FL_REMOVABLE; disk->flags |= GENHD_FL_REMOVABLE;
sprintf(disk->disk_name, "fd%d", floppy_count); sprintf(disk->disk_name, "fd%d", floppy_count);
set_capacity(disk, 2880); set_capacity(disk, 2880);
......
...@@ -1032,6 +1032,7 @@ static int ace_setup(struct ace_device *ace) ...@@ -1032,6 +1032,7 @@ static int ace_setup(struct ace_device *ace)
ace->gd->major = ace_major; ace->gd->major = ace_major;
ace->gd->first_minor = ace->id * ACE_NUM_MINORS; ace->gd->first_minor = ace->id * ACE_NUM_MINORS;
ace->gd->fops = &ace_fops; ace->gd->fops = &ace_fops;
ace->gd->events = DISK_EVENT_MEDIA_CHANGE;
ace->gd->queue = ace->queue; ace->gd->queue = ace->queue;
ace->gd->private_data = ace; ace->gd->private_data = ace;
snprintf(ace->gd->disk_name, 32, "xs%c", ace->id + 'a'); snprintf(ace->gd->disk_name, 32, "xs%c", ace->id + 'a');
......
...@@ -786,6 +786,7 @@ static int probe_gdrom(struct platform_device *devptr) ...@@ -786,6 +786,7 @@ static int probe_gdrom(struct platform_device *devptr)
goto probe_fail_cdrom_register; goto probe_fail_cdrom_register;
} }
gd.disk->fops = &gdrom_bdops; gd.disk->fops = &gdrom_bdops;
gd.disk->events = DISK_EVENT_MEDIA_CHANGE;
/* latch on to the interrupt */ /* latch on to the interrupt */
err = gdrom_set_interrupt_handlers(); err = gdrom_set_interrupt_handlers();
if (err) if (err)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册