• Michael Holzheu's avatar
    [S390] tape: Fix race condition in tape block device driver · f71ad62a
    Michael Holzheu authored
    Due to incorrect function call sequence it can happen that a tape block
    request is finished before the request is taken from the block request queue.
    
    The following sequence leads to that condition:
     * tapeblock_start_request() -> start CCW program
     * Request finishes -> IO interrupt
     * tapeblock_end_request()
     * end_that_request_last()
    
    If blkdev_dequeue_request() has not been called before end_that_request_last(),
    a kernel bug is triggered in end_that_request_last() because the request is
    still queued. To solve that problem blkdev_dequeue_request() has to be called
    before starting the CCW program.
    Signed-off-by: default avatarMichael Holzheu <holzheu@de.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    f71ad62a
tape_block.c 11.6 KB