diff options
author | Tejun Heo <tj@kernel.org> | 2011-03-09 13:54:27 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2011-03-09 13:54:27 -0500 |
commit | 1a8a74f03fcde1725ff26520220f3d21dbd8faa1 (patch) | |
tree | 5ac4195f4b34f815261ec243357f81967e4384c0 /drivers/block/amiflop.c | |
parent | 5b03a1b140e13a28ff6be1526892a9dc538ddef6 (diff) |
floppy,{ami|ata}flop: Convert to bdops->check_events()
Convert the floppy drivers from ->media_changed() to ->check_events().
Both floppy and ataflop buffer media changed state bit and clear them
on revalidation and will behave correctly with kernel event polling.
I can't tell how amiflop clears its event and it's possible that it
may generate spurious events when polled.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Diffstat (limited to 'drivers/block/amiflop.c')
-rw-r--r-- | drivers/block/amiflop.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/block/amiflop.c b/drivers/block/amiflop.c index 7888501ad9ee..5e7d3fe2c13b 100644 --- a/drivers/block/amiflop.c +++ b/drivers/block/amiflop.c | |||
@@ -1658,12 +1658,12 @@ static int floppy_release(struct gendisk *disk, fmode_t mode) | |||
1658 | } | 1658 | } |
1659 | 1659 | ||
1660 | /* | 1660 | /* |
1661 | * floppy-change is never called from an interrupt, so we can relax a bit | 1661 | * check_events is never called from an interrupt, so we can relax a bit |
1662 | * here, sleep etc. Note that floppy-on tries to set current_DOR to point | 1662 | * here, sleep etc. Note that floppy-on tries to set current_DOR to point |
1663 | * to the desired drive, but it will probably not survive the sleep if | 1663 | * to the desired drive, but it will probably not survive the sleep if |
1664 | * several floppies are used at the same time: thus the loop. | 1664 | * several floppies are used at the same time: thus the loop. |
1665 | */ | 1665 | */ |
1666 | static int amiga_floppy_change(struct gendisk *disk) | 1666 | static unsigned amiga_check_events(struct gendisk *disk, unsigned int clearing) |
1667 | { | 1667 | { |
1668 | struct amiga_floppy_struct *p = disk->private_data; | 1668 | struct amiga_floppy_struct *p = disk->private_data; |
1669 | int drive = p - unit; | 1669 | int drive = p - unit; |
@@ -1686,7 +1686,7 @@ static int amiga_floppy_change(struct gendisk *disk) | |||
1686 | p->dirty = 0; | 1686 | p->dirty = 0; |
1687 | writepending = 0; /* if this was true before, too bad! */ | 1687 | writepending = 0; /* if this was true before, too bad! */ |
1688 | writefromint = 0; | 1688 | writefromint = 0; |
1689 | return 1; | 1689 | return DISK_EVENT_MEDIA_CHANGE; |
1690 | } | 1690 | } |
1691 | return 0; | 1691 | return 0; |
1692 | } | 1692 | } |
@@ -1697,7 +1697,7 @@ static const struct block_device_operations floppy_fops = { | |||
1697 | .release = floppy_release, | 1697 | .release = floppy_release, |
1698 | .ioctl = fd_ioctl, | 1698 | .ioctl = fd_ioctl, |
1699 | .getgeo = fd_getgeo, | 1699 | .getgeo = fd_getgeo, |
1700 | .media_changed = amiga_floppy_change, | 1700 | .check_events = amiga_check_events, |
1701 | }; | 1701 | }; |
1702 | 1702 | ||
1703 | static int __init fd_probe_drives(void) | 1703 | static int __init fd_probe_drives(void) |
@@ -1736,6 +1736,7 @@ static int __init fd_probe_drives(void) | |||
1736 | disk->major = FLOPPY_MAJOR; | 1736 | disk->major = FLOPPY_MAJOR; |
1737 | disk->first_minor = drive; | 1737 | disk->first_minor = drive; |
1738 | disk->fops = &floppy_fops; | 1738 | disk->fops = &floppy_fops; |
1739 | disk->events = DISK_EVENT_MEDIA_CHANGE; | ||
1739 | sprintf(disk->disk_name, "fd%d", drive); | 1740 | sprintf(disk->disk_name, "fd%d", drive); |
1740 | disk->private_data = &unit[drive]; | 1741 | disk->private_data = &unit[drive]; |
1741 | set_capacity(disk, 880*2); | 1742 | set_capacity(disk, 880*2); |