• Suleiman Souhlal's avatar
    ide: correctly prevent IDE timer expiry function to run if request was already handled · 23450319
    Suleiman Souhlal authored
    It is possible for the timer expiry function to run even though the
    request has already been handled: ide_timer_expiry() only checks that
    the handler is not NULL, but it is possible that we have handled a
    request (thus clearing the handler) and then started a new request
    (thus starting the timer again, and setting a handler). 
    
    A simple way to exhibit this is to set the DMA timeout to 1 jiffy and
    run dd: The kernel will panic after a few minutes because
    ide_timer_expiry() tries to add a timer when it's already active.
    
    To fix this, we simply add a request generation count that gets
    incremented at every interrupt, and check in ide_timer_expiry() that
    we have not already handled a new interrupt before running the expiry
    function.
    Signed-off-by: default avatarSuleiman Souhlal <suleiman@google.com>
    Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    23450319
ide-iops.c 34.1 KB