• S
    ide: correctly prevent IDE timer expiry function to run if request was already handled · 23450319
    Suleiman Souhlal 提交于
    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: NSuleiman Souhlal <suleiman@google.com>
    Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    23450319
ide-io.c 51.1 KB