Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 82115
b: refs/heads/master
c: 64814f2
h: refs/heads/master
i:
  82113: e94c9b6
  82111: b374946
v: v3
  • Loading branch information
Bartlomiej Zolnierkiewicz committed Feb 1, 2008
1 parent 34cb33b commit 3a9ef59
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b4ab726c92f8a2c1635958212e8933309de0a37a
refs/heads/master: 64814f2399e7dd1e6e53dd7d08a4ad54d02665d3
38 changes: 26 additions & 12 deletions trunk/drivers/ide/ide-cd.c
Original file line number Diff line number Diff line change
Expand Up @@ -713,6 +713,31 @@ int cdrom_read_check_ireason (ide_drive_t *drive, int len, int ireason)
return -1;
}

/*
* Assume that the drive will always provide data in multiples of at least
* SECTOR_SIZE, as it gets hairy to keep track of the transfers otherwise.
*/
static int ide_cd_check_transfer_size(ide_drive_t *drive, int len)
{
struct cdrom_info *cd = drive->driver_data;

if ((len % SECTOR_SIZE) == 0)
return 0;

printk(KERN_ERR "%s: %s: Bad transfer size %d\n",
drive->name, __FUNCTION__, len);

if (cd->cd_flags & IDE_CD_FLAG_LIMIT_NFRAMES)
printk(KERN_ERR " This drive is not supported by "
"this version of the driver\n");
else {
printk(KERN_ERR " Trying to limit transfer sizes\n");
cd->cd_flags |= IDE_CD_FLAG_LIMIT_NFRAMES;
}

return 1;
}

/*
* Interrupt routine. Called when a read request has completed.
*/
Expand Down Expand Up @@ -774,18 +799,7 @@ static ide_startstop_t cdrom_read_intr (ide_drive_t *drive)
if (cdrom_read_check_ireason (drive, len, ireason))
return ide_stopped;

/* Assume that the drive will always provide data in multiples
of at least SECTOR_SIZE, as it gets hairy to keep track
of the transfers otherwise. */
if ((len % SECTOR_SIZE) != 0) {
printk (KERN_ERR "%s: cdrom_read_intr: Bad transfer size %d\n",
drive->name, len);
if (info->cd_flags & IDE_CD_FLAG_LIMIT_NFRAMES)
printk (KERN_ERR " This drive is not supported by this version of the driver\n");
else {
printk (KERN_ERR " Trying to limit transfer sizes\n");
info->cd_flags |= IDE_CD_FLAG_LIMIT_NFRAMES;
}
if (ide_cd_check_transfer_size(drive, len)) {
cdrom_end_request(drive, 0);
return ide_stopped;
}
Expand Down

0 comments on commit 3a9ef59

Please sign in to comment.