lkml.org 
[lkml]   [2013]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH RESEND 0/1] AHCI: Optimize interrupt processing
    From
    Date
    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




    \
     
     \ /
      Last update: 2013-07-19 18:01    [W:5.496 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site