|
@@ -4024,6 +4024,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
|
|
|
|
|
/* Weird ATAPI devices */
|
|
/* Weird ATAPI devices */
|
|
{ "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 },
|
|
{ "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 },
|
|
|
|
+ { "QUANTUM DAT DAT72-000", NULL, ATA_HORKAGE_ATAPI_MOD16_DMA },
|
|
|
|
|
|
/* Devices we expect to fail diagnostics */
|
|
/* Devices we expect to fail diagnostics */
|
|
|
|
|
|
@@ -4444,7 +4445,8 @@ int atapi_check_dma(struct ata_queued_cmd *qc)
|
|
/* Don't allow DMA if it isn't multiple of 16 bytes. Quite a
|
|
/* Don't allow DMA if it isn't multiple of 16 bytes. Quite a
|
|
* few ATAPI devices choke on such DMA requests.
|
|
* few ATAPI devices choke on such DMA requests.
|
|
*/
|
|
*/
|
|
- if (unlikely(qc->nbytes & 15))
|
|
|
|
|
|
+ if (!(qc->dev->horkage & ATA_HORKAGE_ATAPI_MOD16_DMA) &&
|
|
|
|
+ unlikely(qc->nbytes & 15))
|
|
return 1;
|
|
return 1;
|
|
|
|
|
|
if (ap->ops->check_atapi_dma)
|
|
if (ap->ops->check_atapi_dma)
|