lkml.org 
[lkml]   [2008]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 32/46] SCSI: dpt_i2o: fix transferred data length for scsi_set_resid()
    2.6.27-stable review patch.  If anyone has any objections, please let us know.

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

    From: Miquel van Smoorenburg <mikevs@xs4all.net>

    commit df81d2371aeca0f7474f197a3090830899016e39 upstream.

    dpt_i2o.c::adpt_i2o_to_scsi() reads the value at (reply+5) which
    should contain the length in bytes of the transferred data. This
    would be correct if reply was a u32 *. However it is a void * here,
    so we need to read the value at (reply+20) instead.

    The value at (reply+5) is usually 0xff0000, which is apparently
    'large enough' and didn't cause any trouble until 2.6.27 where

    commit 427e59f09fdba387547106de7bab980b7fff77be
    Author: James Bottomley <James.Bottomley@HansenPartnership.com>
    Date: Sat Mar 8 18:24:17 2008 -0600

    [SCSI] make use of the residue value

    caused this to become visible through e.g. iostat -x .

    Signed-off-by: Miquel van Smoorenburg <mikevs@xs4all.net>
    Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/scsi/dpt_i2o.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/drivers/scsi/dpt_i2o.c
    +++ b/drivers/scsi/dpt_i2o.c
    @@ -2445,7 +2445,7 @@ static s32 adpt_i2o_to_scsi(void __iomem
    hba_status = detailed_status >> 8;

    // calculate resid for sg
    - scsi_set_resid(cmd, scsi_bufflen(cmd) - readl(reply+5));
    + scsi_set_resid(cmd, scsi_bufflen(cmd) - readl(reply+20));

    pHba = (adpt_hba*) cmd->device->host->hostdata[0];

    @@ -2456,7 +2456,7 @@ static s32 adpt_i2o_to_scsi(void __iomem
    case I2O_SCSI_DSC_SUCCESS:
    cmd->result = (DID_OK << 16);
    // handle underflow
    - if(readl(reply+5) < cmd->underflow ) {
    + if (readl(reply+20) < cmd->underflow) {
    cmd->result = (DID_ERROR <<16);
    printk(KERN_WARNING"%s: SCSI CMD underflow\n",pHba->name);
    }
    --


    \
     
     \ /
      Last update: 2008-11-17 08:35    [W:0.027 / U:1.044 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site