lkml.org 
[lkml]   [2009]   [Jun]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] ide-cd: handle fragmented packet commands gracefully
    Date
    There are some devices in the wild that clear the DRQ bit during the
    last word of a packet command and therefore could use a "second chance"
    for that last word of data to be xferred instead of simply failing the
    request. Do that by attempting to suck in those last bytes in PIO mode.

    In addition, the ATA_ERR bit has to be cleared for we cannot be sure the
    data is valid otherwise.

    See http://bugzilla.kernel.org/show_bug.cgi?id=13399 for details.

    Signed-off-by: Borislav Petkov <petkovbb@gmail.com>
    ---
    drivers/ide/ide-cd.c | 14 ++++++++++++--
    1 files changed, 12 insertions(+), 2 deletions(-)

    diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
    index 4a19686..8d3f7d0 100644
    --- a/drivers/ide/ide-cd.c
    +++ b/drivers/ide/ide-cd.c
    @@ -592,9 +592,19 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
    }
    } else if (!blk_pc_request(rq)) {
    ide_cd_request_sense_fixup(drive, cmd);
    - /* complain if we still have data left to transfer */
    +
    uptodate = cmd->nleft ? 0 : 1;
    - if (uptodate == 0)
    +
    + /*
    + * suck out the remaining bytes from the drive in an
    + * attempt to complete the data xfer. (see BZ#13399)
    + */
    + if (!(stat & ATA_ERR) && !uptodate && thislen) {
    + ide_pio_bytes(drive, cmd, write, thislen);
    + uptodate = cmd->nleft ? 0 : 1;
    + }
    +
    + if (!uptodate)
    rq->cmd_flags |= REQ_FAILED;
    }
    goto out_end;
    --
    1.6.3.1


    \
     
     \ /
      Last update: 2009-06-21 10:59    [W:0.025 / U:0.120 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site