lkml.org 
[lkml]   [2008]   [Feb]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: IDE cdrom problem with PLEXTOR DVDR PX-608AL
    Date
    On Monday 25 February 2008, Brad Rosser wrote:

    [...]

    > Bart wrote:
    >
    > > Does the following patch help?
    > >
    > > [ It makes ireason handling for REQ_TYPE_ATA_PC requests be the same as
    > > for other request types so "ireason == 1" quirk is used if needed. ]
    >
    > I tried to apply the patch but failed; I probably did something wrong.
    > I deleted everything in your message above 'Index: b/drivers/ide/ide-cd.c'
    > and ran 'patch --dry-run -b -p1 < ../bart_patch'. This is part of my script
    > log:
    >
    > root:/usr/src/linux-2.6.25-rc2# pwd
    > /usr/src/linux-2.6.25-rc2
    > root:/usr/src/linux-2.6.25-rc2# cat ../bart_patch
    > Index: b/drivers/ide/ide-cd.c
    > ===================================================================
    > --- a/drivers/ide/ide-cd.c
    > +++ b/drivers/ide/ide-cd.c
    > @@ -670,8 +670,8 @@ static void cdrom_buffer_sectors (ide_dr
    > * and attempt to recover if there are problems. Returns 0 if everything's
    > ...
    > ...
    > root:/usr/src/linux-2.6.25-rc2# patch --dry-run -b -p1 < ../bart_patch
    > patching file drivers/ide/ide-cd.c
    > Hunk #1 FAILED at 670.
    > Hunk #2 FAILED at 701.
    > Hunk #3 FAILED at 1074.
    > Hunk #4 FAILED at 1104.
    > 4 out of 4 hunks FAILED -- saving rejects to file drivers/ide/ide-cd.c.rej

    Same command works just fine for me with 2.6.25-rc2/3.

    It could be that the patch got damaged somewhere on the way
    (to eleminate this possibility I'm attaching it to this mail).

    Thanks,
    Bart
    ---
    drivers/ide/ide-cd.c | 24 ++++++++++--------------
    1 file changed, 10 insertions(+), 14 deletions(-)

    Index: b/drivers/ide/ide-cd.c
    ===================================================================
    --- a/drivers/ide/ide-cd.c
    +++ b/drivers/ide/ide-cd.c
    @@ -670,8 +670,8 @@ static void cdrom_buffer_sectors (ide_dr
    * and attempt to recover if there are problems. Returns 0 if everything's
    * ok; nonzero if the request has been terminated.
    */
    -static
    -int ide_cd_check_ireason(ide_drive_t *drive, int len, int ireason, int rw)
    +static int ide_cd_check_ireason(ide_drive_t *drive, struct request *rq,
    + int len, int ireason, int rw)
    {
    /*
    * ireason == 0: the drive wants to receive data from us
    @@ -701,6 +701,9 @@ int ide_cd_check_ireason(ide_drive_t *dr
    drive->name, __FUNCTION__, ireason);
    }

    + if (rq->cmd_type == REQ_TYPE_ATA_PC)
    + rq->cmd_flags |= REQ_FAILED;
    +
    cdrom_end_request(drive, 0);
    return -1;
    }
    @@ -1071,11 +1074,11 @@ static ide_startstop_t cdrom_newpc_intr(
    /*
    * check which way to transfer data
    */
    - if (blk_fs_request(rq) || blk_pc_request(rq)) {
    - if (ide_cd_check_ireason(drive, len, ireason, write))
    - return ide_stopped;
    + if (ide_cd_check_ireason(drive, rq, len, ireason, write))
    + return ide_stopped;

    - if (blk_fs_request(rq) && write == 0) {
    + if (blk_fs_request(rq)) {
    + if (write == 0) {
    int nskip;

    if (ide_cd_check_transfer_size(drive, len)) {
    @@ -1101,16 +1104,9 @@ static ide_startstop_t cdrom_newpc_intr(
    if (ireason == 0) {
    write = 1;
    xferfunc = HWIF(drive)->atapi_output_bytes;
    - } else if (ireason == 2 || (ireason == 1 &&
    - (blk_fs_request(rq) || blk_pc_request(rq)))) {
    + } else {
    write = 0;
    xferfunc = HWIF(drive)->atapi_input_bytes;
    - } else {
    - printk(KERN_ERR "%s: %s: The drive "
    - "appears confused (ireason = 0x%02x). "
    - "Trying to recover by ending request.\n",
    - drive->name, __FUNCTION__, ireason);
    - goto end_request;
    }

    /*
    \
     
     \ /
      Last update: 2008-02-25 14:45    [W:0.025 / U:107.624 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site