On Thu, 2013-07-18 at 23:34 -0700, Nicholas A. Bellinger wrote: > diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c > index 0101af5..191bc15 100644 > --- a/drivers/ata/libata-scsi.c > +++ b/drivers/ata/libata-scsi.c > @@ -1144,7 +1144,11 @@ static int ata_scsi_dev_config(struct scsi_device > *sdev, > "sector_size=%u > PAGE_SIZE, PIO may malfunction\n", > sdev->sector_size); > > - blk_queue_update_dma_alignment(q, sdev->sector_size - 1); > + if (!q->mq_ops) { > + blk_queue_update_dma_alignment(q, sdev->sector_size - 1); > + } else { > + printk("Skipping dma_alignment for libata w/ scsi-mq\n"); > + }
Amazingly enough there is a reason for the dma alignment, and it wasn't just to annoy you, so you can't blindly do this. The email thread is probably lost in the mists of time, but if I remember correctly the problem is that some ahci DMA controllers barf if the sector they're doing DMA on crosses a page boundary. Some are annoying enough to actually cause silent data corruption. You won't find every ahci DMA controller doing this, so the change will work for some, but it will be hard to identify those it won't work for until people start losing data. The correct fix, obviously, is to do the bio copy on the kernel path for unaligned data. It is OK to assume that REQ_TYPE_FS data is correctly aligned (because of the block to page alignment). James -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html