diff options
Diffstat (limited to 'drivers/ide/ide-cd.c')
-rw-r--r-- | drivers/ide/ide-cd.c | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index 0c73fe39a236..fd1e11799137 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c | |||
@@ -258,17 +258,10 @@ static int ide_cd_breathe(ide_drive_t *drive, struct request *rq) | |||
258 | if (time_after(jiffies, info->write_timeout)) | 258 | if (time_after(jiffies, info->write_timeout)) |
259 | return 0; | 259 | return 0; |
260 | else { | 260 | else { |
261 | struct request_queue *q = drive->queue; | ||
262 | unsigned long flags; | ||
263 | |||
264 | /* | 261 | /* |
265 | * take a breather relying on the unplug timer to kick us again | 262 | * take a breather |
266 | */ | 263 | */ |
267 | 264 | blk_delay_queue(drive->queue, 1); | |
268 | spin_lock_irqsave(q->queue_lock, flags); | ||
269 | blk_plug_device(q); | ||
270 | spin_unlock_irqrestore(q->queue_lock, flags); | ||
271 | |||
272 | return 1; | 265 | return 1; |
273 | } | 266 | } |
274 | } | 267 | } |
@@ -1177,7 +1170,7 @@ static struct cdrom_device_ops ide_cdrom_dops = { | |||
1177 | .open = ide_cdrom_open_real, | 1170 | .open = ide_cdrom_open_real, |
1178 | .release = ide_cdrom_release_real, | 1171 | .release = ide_cdrom_release_real, |
1179 | .drive_status = ide_cdrom_drive_status, | 1172 | .drive_status = ide_cdrom_drive_status, |
1180 | .media_changed = ide_cdrom_check_media_change_real, | 1173 | .check_events = ide_cdrom_check_events_real, |
1181 | .tray_move = ide_cdrom_tray_move, | 1174 | .tray_move = ide_cdrom_tray_move, |
1182 | .lock_door = ide_cdrom_lock_door, | 1175 | .lock_door = ide_cdrom_lock_door, |
1183 | .select_speed = ide_cdrom_select_speed, | 1176 | .select_speed = ide_cdrom_select_speed, |
@@ -1514,8 +1507,6 @@ static int ide_cdrom_setup(ide_drive_t *drive) | |||
1514 | blk_queue_dma_alignment(q, 31); | 1507 | blk_queue_dma_alignment(q, 31); |
1515 | blk_queue_update_dma_pad(q, 15); | 1508 | blk_queue_update_dma_pad(q, 15); |
1516 | 1509 | ||
1517 | q->unplug_delay = max((1 * HZ) / 1000, 1); | ||
1518 | |||
1519 | drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED; | 1510 | drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED; |
1520 | drive->atapi_flags = IDE_AFLAG_NO_EJECT | ide_cd_flags(id); | 1511 | drive->atapi_flags = IDE_AFLAG_NO_EJECT | ide_cd_flags(id); |
1521 | 1512 | ||
@@ -1702,10 +1693,11 @@ static int idecd_ioctl(struct block_device *bdev, fmode_t mode, | |||
1702 | } | 1693 | } |
1703 | 1694 | ||
1704 | 1695 | ||
1705 | static int idecd_media_changed(struct gendisk *disk) | 1696 | static unsigned int idecd_check_events(struct gendisk *disk, |
1697 | unsigned int clearing) | ||
1706 | { | 1698 | { |
1707 | struct cdrom_info *info = ide_drv_g(disk, cdrom_info); | 1699 | struct cdrom_info *info = ide_drv_g(disk, cdrom_info); |
1708 | return cdrom_media_changed(&info->devinfo); | 1700 | return cdrom_check_events(&info->devinfo, clearing); |
1709 | } | 1701 | } |
1710 | 1702 | ||
1711 | static int idecd_revalidate_disk(struct gendisk *disk) | 1703 | static int idecd_revalidate_disk(struct gendisk *disk) |
@@ -1723,7 +1715,7 @@ static const struct block_device_operations idecd_ops = { | |||
1723 | .open = idecd_open, | 1715 | .open = idecd_open, |
1724 | .release = idecd_release, | 1716 | .release = idecd_release, |
1725 | .ioctl = idecd_ioctl, | 1717 | .ioctl = idecd_ioctl, |
1726 | .media_changed = idecd_media_changed, | 1718 | .check_events = idecd_check_events, |
1727 | .revalidate_disk = idecd_revalidate_disk | 1719 | .revalidate_disk = idecd_revalidate_disk |
1728 | }; | 1720 | }; |
1729 | 1721 | ||
@@ -1790,6 +1782,7 @@ static int ide_cd_probe(ide_drive_t *drive) | |||
1790 | ide_cd_read_toc(drive, &sense); | 1782 | ide_cd_read_toc(drive, &sense); |
1791 | g->fops = &idecd_ops; | 1783 | g->fops = &idecd_ops; |
1792 | g->flags |= GENHD_FL_REMOVABLE; | 1784 | g->flags |= GENHD_FL_REMOVABLE; |
1785 | g->events = DISK_EVENT_MEDIA_CHANGE; | ||
1793 | add_disk(g); | 1786 | add_disk(g); |
1794 | return 0; | 1787 | return 0; |
1795 | 1788 | ||