lkml.org 
[lkml]   [2009]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 44/87] ide: fix OOPS during ide-cd error recovery
    2.6.29-stable review patch.  If anyone has any objections, please let us know.

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

    From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>

    commit e3b29f05124b07303088795396ff858811d2acb8 upstream.

    On Tuesday 19 May 2009 20:29:28 Martin Lottermoser wrote:

    > hdc: cdrom_decode_status: error=0x40 <3>{ LastFailedSense=0x04 }
    > ide: failed opcode was: unknown
    > hdc: DMA disabled
    > ------------[ cut here ]------------
    > kernel BUG at drivers/ide/ide-io.c:872!

    It is possible for ide-cd to ignore ide_error()'s return value under
    some circumstances. Workaround it in ide_intr() and ide_timer_expiry()
    by checking if there is a device/port reset pending currently.

    Fixes bug #13345:

    http://bugzilla.kernel.org/show_bug.cgi?id=13345

    Reported-by: Martin Lottermoser <Martin.Lottermoser@t-online.de>
    Reported-and-tested-by: Modestas Vainius <modestas@vainius.eu>
    Cc: Borislav Petkov <petkovbb@gmail.com>
    Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

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

    --- a/drivers/ide/ide-io.c
    +++ b/drivers/ide/ide-io.c
    @@ -967,7 +967,7 @@ void ide_timer_expiry (unsigned long dat
    }
    spin_lock_irq(&hwif->lock);
    enable_irq(hwif->irq);
    - if (startstop == ide_stopped) {
    + if (startstop == ide_stopped && hwif->polling == 0) {
    ide_unlock_port(hwif);
    plug_device = 1;
    }
    @@ -1145,7 +1145,7 @@ irqreturn_t ide_intr (int irq, void *dev
    * same irq as is currently being serviced here, and Linux
    * won't allow another of the same (on any CPU) until we return.
    */
    - if (startstop == ide_stopped) {
    + if (startstop == ide_stopped && hwif->polling == 0) {
    BUG_ON(hwif->handler);
    ide_unlock_port(hwif);
    plug_device = 1;



    \
     
     \ /
      Last update: 2009-06-09 13:03    [W:0.024 / U:30.192 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site