lkml.org 
[lkml]   [2009]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 13/94] SCSI: eata: fix the data buffer accessors conversion regression
    2.6.28-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>

    commit 20c09df7eb9c92a40e0ecf654b6e8f14c8583b9e upstream.

    This fixes the regression introduced by the commit
    58e2a02eb18393e76a469580fedf7caec190eb5e (eata: convert to use the
    data buffer accessors), reported:

    http://marc.info/?t=122987621300006&r=1&w=2

    - fix DMA_NONE handling in map_dma()

    - this driver can't use scsi_dma_map since host->shost_gendev.parent
    is not set properly (it uses scsi_register).

    Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
    Reported-by: Arthur Marsh <arthur.marsh@internode.on.net>
    Tested-by: Arthur Marsh <arthur.marsh@internode.on.net>
    Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/scsi/eata.c | 15 ++++++++++++---
    1 file changed, 12 insertions(+), 3 deletions(-)

    --- a/drivers/scsi/eata.c
    +++ b/drivers/scsi/eata.c
    @@ -1626,8 +1626,15 @@ static void map_dma(unsigned int i, stru

    cpp->sense_len = SCSI_SENSE_BUFFERSIZE;

    - count = scsi_dma_map(SCpnt);
    - BUG_ON(count < 0);
    + if (!scsi_sg_count(SCpnt)) {
    + cpp->data_len = 0;
    + return;
    + }
    +
    + count = pci_map_sg(ha->pdev, scsi_sglist(SCpnt), scsi_sg_count(SCpnt),
    + pci_dir);
    + BUG_ON(!count);
    +
    scsi_for_each_sg(SCpnt, sg, count, k) {
    cpp->sglist[k].address = H2DEV(sg_dma_address(sg));
    cpp->sglist[k].num_bytes = H2DEV(sg_dma_len(sg));
    @@ -1655,7 +1662,9 @@ static void unmap_dma(unsigned int i, st
    pci_unmap_single(ha->pdev, DEV2H(cpp->sense_addr),
    DEV2H(cpp->sense_len), PCI_DMA_FROMDEVICE);

    - scsi_dma_unmap(SCpnt);
    + if (scsi_sg_count(SCpnt))
    + pci_unmap_sg(ha->pdev, scsi_sglist(SCpnt), scsi_sg_count(SCpnt),
    + pci_dir);

    if (!DEV2H(cpp->data_len))
    pci_dir = PCI_DMA_BIDIRECTIONAL;


    \
     
     \ /
      Last update: 2009-01-15 21:11    [W:4.133 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site