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/ataflop.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/ataflop.c')
-rw-r--r-- | drivers/block/ataflop.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/block/ataflop.c b/drivers/block/ataflop.c index 605a67e40bbf..c871eae14120 100644 --- a/drivers/block/ataflop.c +++ b/drivers/block/ataflop.c | |||
@@ -1324,23 +1324,24 @@ static void finish_fdc_done( int dummy ) | |||
1324 | * due to unrecognised disk changes. | 1324 | * due to unrecognised disk changes. |
1325 | */ | 1325 | */ |
1326 | 1326 | ||
1327 | static int check_floppy_change(struct gendisk *disk) | 1327 | static unsigned int floppy_check_events(struct gendisk *disk, |
1328 | unsigned int clearing) | ||
1328 | { | 1329 | { |
1329 | struct atari_floppy_struct *p = disk->private_data; | 1330 | struct atari_floppy_struct *p = disk->private_data; |
1330 | unsigned int drive = p - unit; | 1331 | unsigned int drive = p - unit; |
1331 | if (test_bit (drive, &fake_change)) { | 1332 | if (test_bit (drive, &fake_change)) { |
1332 | /* simulated change (e.g. after formatting) */ | 1333 | /* simulated change (e.g. after formatting) */ |
1333 | return 1; | 1334 | return DISK_EVENT_MEDIA_CHANGE; |
1334 | } | 1335 | } |
1335 | if (test_bit (drive, &changed_floppies)) { | 1336 | if (test_bit (drive, &changed_floppies)) { |
1336 | /* surely changed (the WP signal changed at least once) */ | 1337 | /* surely changed (the WP signal changed at least once) */ |
1337 | return 1; | 1338 | return DISK_EVENT_MEDIA_CHANGE; |
1338 | } | 1339 | } |
1339 | if (UD.wpstat) { | 1340 | if (UD.wpstat) { |
1340 | /* WP is on -> could be changed: to be sure, buffers should be | 1341 | /* WP is on -> could be changed: to be sure, buffers should be |
1341 | * invalidated... | 1342 | * invalidated... |
1342 | */ | 1343 | */ |
1343 | return 1; | 1344 | return DISK_EVENT_MEDIA_CHANGE; |
1344 | } | 1345 | } |
1345 | 1346 | ||
1346 | return 0; | 1347 | return 0; |
@@ -1570,7 +1571,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, | |||
1570 | * or the next access will revalidate - and clear UDT :-( | 1571 | * or the next access will revalidate - and clear UDT :-( |
1571 | */ | 1572 | */ |
1572 | 1573 | ||
1573 | if (check_floppy_change(disk)) | 1574 | if (floppy_check_events(disk, 0)) |
1574 | floppy_revalidate(disk); | 1575 | floppy_revalidate(disk); |
1575 | 1576 | ||
1576 | if (UD.flags & FTD_MSG) | 1577 | if (UD.flags & FTD_MSG) |
@@ -1904,7 +1905,7 @@ static const struct block_device_operations floppy_fops = { | |||
1904 | .open = floppy_unlocked_open, | 1905 | .open = floppy_unlocked_open, |
1905 | .release = floppy_release, | 1906 | .release = floppy_release, |
1906 | .ioctl = fd_ioctl, | 1907 | .ioctl = fd_ioctl, |
1907 | .media_changed = check_floppy_change, | 1908 | .check_events = floppy_check_events, |
1908 | .revalidate_disk= floppy_revalidate, | 1909 | .revalidate_disk= floppy_revalidate, |
1909 | }; | 1910 | }; |
1910 | 1911 | ||
@@ -1963,6 +1964,7 @@ static int __init atari_floppy_init (void) | |||
1963 | unit[i].disk->first_minor = i; | 1964 | unit[i].disk->first_minor = i; |
1964 | sprintf(unit[i].disk->disk_name, "fd%d", i); | 1965 | sprintf(unit[i].disk->disk_name, "fd%d", i); |
1965 | unit[i].disk->fops = &floppy_fops; | 1966 | unit[i].disk->fops = &floppy_fops; |
1967 | unit[i].disk->events = DISK_EVENT_MEDIA_CHANGE; | ||
1966 | unit[i].disk->private_data = &unit[i]; | 1968 | unit[i].disk->private_data = &unit[i]; |
1967 | unit[i].disk->queue = blk_init_queue(do_fd_request, | 1969 | unit[i].disk->queue = blk_init_queue(do_fd_request, |
1968 | &ataflop_lock); | 1970 | &ataflop_lock); |