diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-02-01 17:09:17 -0500 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-02-01 17:09:17 -0500 |
commit | eba15fba1f046d25c663d294fc919ab59cec3e9c (patch) | |
tree | 0bc50694b75ef0997df07930ff0b297b5687e30d /drivers/ide/ide-cd.c | |
parent | f1071e628bc769174c3e2df7827a2a8ad05aea67 (diff) |
ide-cd: fix DMA error handling in cdrom_newpc_intr()
Make cdrom_newpc_intr() match cdrom_{read,write}_intr() w.r.t.
handling DMA errors:
* disable DMA before cdrom_decode_status() call
* log the device name and the type of the request (read/write)
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/ide-cd.c')
-rw-r--r-- | drivers/ide/ide-cd.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index cbe4f1a04c14..c638d057f910 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c | |||
@@ -1674,6 +1674,11 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive) | |||
1674 | if (dma) { | 1674 | if (dma) { |
1675 | info->dma = 0; | 1675 | info->dma = 0; |
1676 | dma_error = HWIF(drive)->ide_dma_end(drive); | 1676 | dma_error = HWIF(drive)->ide_dma_end(drive); |
1677 | if (dma_error) { | ||
1678 | printk(KERN_ERR "%s: DMA %s error\n", drive->name, | ||
1679 | rq_data_dir(rq) ? "write" : "read"); | ||
1680 | ide_dma_off(drive); | ||
1681 | } | ||
1677 | } | 1682 | } |
1678 | 1683 | ||
1679 | if (cdrom_decode_status(drive, 0, &stat)) | 1684 | if (cdrom_decode_status(drive, 0, &stat)) |
@@ -1683,11 +1688,8 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive) | |||
1683 | * using dma, transfer is complete now | 1688 | * using dma, transfer is complete now |
1684 | */ | 1689 | */ |
1685 | if (dma) { | 1690 | if (dma) { |
1686 | if (dma_error) { | 1691 | if (dma_error) |
1687 | printk(KERN_ERR "ide-cd: dma error\n"); | ||
1688 | ide_dma_off(drive); | ||
1689 | return ide_error(drive, "dma error", stat); | 1692 | return ide_error(drive, "dma error", stat); |
1690 | } | ||
1691 | 1693 | ||
1692 | spin_lock_irqsave(&ide_lock, flags); | 1694 | spin_lock_irqsave(&ide_lock, flags); |
1693 | if (__blk_end_request(rq, 0, rq->data_len)) | 1695 | if (__blk_end_request(rq, 0, rq->data_len)) |