• Tejun Heo's avatar
    blk-mq: make blk_abort_request() trigger timeout path · 358f70da
    Tejun Heo authored
    With issue/complete and timeout paths now using the generation number
    and state based synchronization, blk_abort_request() is the only one
    which depends on REQ_ATOM_COMPLETE for arbitrating completion.
    
    There's no reason for blk_abort_request() to be a completely separate
    path.  This patch makes blk_abort_request() piggyback on the timeout
    path instead of trying to terminate the request directly.
    
    This removes the last dependency on REQ_ATOM_COMPLETE in blk-mq.
    
    Note that this makes blk_abort_request() asynchronous - it initiates
    abortion but the actual termination will happen after a short while,
    even when the caller owns the request.  AFAICS, SCSI and ATA should be
    fine with that and I think mtip32xx and dasd should be safe but not
    completely sure.  It'd be great if people who know the drivers take a
    look.
    
    v2: - Add comment explaining the lack of synchronization around
          ->deadline update as requested by Bart.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Asai Thambi SP <asamymuthupa@micron.com>
    Cc: Stefan Haberland <sth@linux.vnet.ibm.com>
    Cc: Jan Hoeppner <hoeppner@linux.vnet.ibm.com>
    Cc: Bart Van Assche <Bart.VanAssche@wdc.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    358f70da
blk-mq.c 75.9 KB