--- /opt/kernel/linux-2.4.0-test12-pre7/drivers/cdrom/cdrom.c Thu Dec 7 19:37:48 2000 +++ linux/drivers/cdrom/cdrom.c Thu Dec 7 19:33:33 2000 @@ -1985,7 +1985,7 @@ } case CDROMREADAUDIO: { struct cdrom_read_audio ra; - int lba, frames; + int lba; IOCTL_IN(arg, struct cdrom_read_audio, ra); @@ -2002,11 +2002,7 @@ if (lba < 0 || ra.nframes <= 0) return -EINVAL; - /* do max 8 frames at the time */ - frames = ra.nframes > 8 ? 8 : ra.nframes; - - if ((cgc.buffer = (char *) kmalloc(CD_FRAMESIZE_RAW * frames, - GFP_KERNEL)) == NULL) + if ((cgc.buffer = (char *) kmalloc(CD_FRAMESIZE_RAW, GFP_KERNEL)) == NULL) return -ENOMEM; if (!access_ok(VERIFY_WRITE, ra.buf, ra.nframes*CD_FRAMESIZE_RAW)) { @@ -2015,13 +2011,12 @@ } cgc.data_direction = CGC_DATA_READ; while (ra.nframes > 0) { - ret = cdrom_read_block(cdi, &cgc, lba, frames, 1, CD_FRAMESIZE_RAW); + ret = cdrom_read_block(cdi, &cgc, lba, 1, 1, CD_FRAMESIZE_RAW); if (ret) break; - __copy_to_user(ra.buf, cgc.buffer, - CD_FRAMESIZE_RAW * frames); - ra.buf += (CD_FRAMESIZE_RAW * frames); - ra.nframes -= frames; - lba += frames; + __copy_to_user(ra.buf, cgc.buffer, CD_FRAMESIZE_RAW); + ra.buf += CD_FRAMESIZE_RAW; + ra.nframes--; + lba++; } kfree(cgc.buffer); return ret;