diff options
| author | Alexander Inyukhin <shurick@sectorb.msk.ru> | 2008-08-18 15:40:04 -0400 |
|---|---|---|
| committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-08-18 15:40:04 -0400 |
| commit | bce31b674846584f0a80c95b6c09f07c32b9b041 (patch) | |
| tree | 71267e419702863709e7c2ca4b81ecf2570b31aa | |
| parent | d15cad5df1dac17ae33152646f599f0bdc6be48e (diff) | |
cdrom: handle TOC
This patch should fix TOC handling for cdroms that can not play audio. It
extends commit af744e3294d09d706c4eae26cffaaa68a8d40337 ("cdrom: don't
check CDC_PLAY_AUDIO in cdrom_count_tracks()") with a safety check and
non-audio ioctls support.
Since CDC_PLAY_AUDIO flag was used not only to check ability to play audio
but also to ensure that audio_ioctl was not NULL, all TOC-related
operations had to use it.
As far as I understand, now audio_ioctl is never NULL, so a sanity check
during device registration should be sufficient.
It was tested on Optiarc AD7203A device, that has no ability to play
audio.
Cc: Tejun Heo <tj@kernel.org>
Cc: Jens Axboe <jens.axboe@oracle.com>
Cc: Borislav Petkov <petkovbb@googlemail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
[bart: remove now unneeded ->audio_ioctl check (noticed by Borislav)]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
| -rw-r--r-- | drivers/cdrom/cdrom.c | 7 |
1 files changed, 0 insertions, 7 deletions
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index d9d1b65d206c..74031de517e6 100644 --- a/drivers/cdrom/cdrom.c +++ b/drivers/cdrom/cdrom.c | |||
| @@ -408,7 +408,6 @@ int register_cdrom(struct cdrom_device_info *cdi) | |||
| 408 | ENSURE(get_last_session, CDC_MULTI_SESSION); | 408 | ENSURE(get_last_session, CDC_MULTI_SESSION); |
| 409 | ENSURE(get_mcn, CDC_MCN); | 409 | ENSURE(get_mcn, CDC_MCN); |
| 410 | ENSURE(reset, CDC_RESET); | 410 | ENSURE(reset, CDC_RESET); |
| 411 | ENSURE(audio_ioctl, CDC_PLAY_AUDIO); | ||
| 412 | ENSURE(generic_packet, CDC_GENERIC_PACKET); | 411 | ENSURE(generic_packet, CDC_GENERIC_PACKET); |
| 413 | cdi->mc_flags = 0; | 412 | cdi->mc_flags = 0; |
| 414 | cdo->n_minors = 0; | 413 | cdo->n_minors = 0; |
| @@ -2506,8 +2505,6 @@ static int cdrom_ioctl_get_subchnl(struct cdrom_device_info *cdi, | |||
| 2506 | 2505 | ||
| 2507 | /* cdinfo(CD_DO_IOCTL,"entering CDROMSUBCHNL\n");*/ | 2506 | /* cdinfo(CD_DO_IOCTL,"entering CDROMSUBCHNL\n");*/ |
| 2508 | 2507 | ||
| 2509 | if (!CDROM_CAN(CDC_PLAY_AUDIO)) | ||
| 2510 | return -ENOSYS; | ||
| 2511 | if (copy_from_user(&q, argp, sizeof(q))) | 2508 | if (copy_from_user(&q, argp, sizeof(q))) |
| 2512 | return -EFAULT; | 2509 | return -EFAULT; |
| 2513 | 2510 | ||
| @@ -2538,8 +2535,6 @@ static int cdrom_ioctl_read_tochdr(struct cdrom_device_info *cdi, | |||
| 2538 | 2535 | ||
| 2539 | /* cdinfo(CD_DO_IOCTL, "entering CDROMREADTOCHDR\n"); */ | 2536 | /* cdinfo(CD_DO_IOCTL, "entering CDROMREADTOCHDR\n"); */ |
| 2540 | 2537 | ||
| 2541 | if (!CDROM_CAN(CDC_PLAY_AUDIO)) | ||
| 2542 | return -ENOSYS; | ||
| 2543 | if (copy_from_user(&header, argp, sizeof(header))) | 2538 | if (copy_from_user(&header, argp, sizeof(header))) |
| 2544 | return -EFAULT; | 2539 | return -EFAULT; |
| 2545 | 2540 | ||
| @@ -2562,8 +2557,6 @@ static int cdrom_ioctl_read_tocentry(struct cdrom_device_info *cdi, | |||
| 2562 | 2557 | ||
| 2563 | /* cdinfo(CD_DO_IOCTL, "entering CDROMREADTOCENTRY\n"); */ | 2558 | /* cdinfo(CD_DO_IOCTL, "entering CDROMREADTOCENTRY\n"); */ |
| 2564 | 2559 | ||
| 2565 | if (!CDROM_CAN(CDC_PLAY_AUDIO)) | ||
| 2566 | return -ENOSYS; | ||
| 2567 | if (copy_from_user(&entry, argp, sizeof(entry))) | 2560 | if (copy_from_user(&entry, argp, sizeof(entry))) |
| 2568 | return -EFAULT; | 2561 | return -EFAULT; |
| 2569 | 2562 | ||
