• James Smart's avatar
    nvme-fc: correct io timeout behavior · 134aedc9
    James Smart authored
    The transport io timeout behavior wasn't quite correct. It ignored
    that the io error handler is supposed to be synchronous so it possibly
    allowed the blk request to be restarted while the io associated was
    still aborting. Timeouts on reserved commands, those used for
    association create, were never timing out thus they hung out forever.
    
    To correct:
    If an io is times out while a remoteport is not connected, just
    restart the io timer. The lack of connectivity will simultaneously
    be resetting the controller, so the reset path will abort and terminate
    the io.
    
    If an io is times out while it was marked for transport abort, just
    reset the io timer. The abort process is underway and will complete
    the io.
    
    Otherwise, if an io times out, abort the io. If the abort was
    unsuccessful (unlikely) give up and return not handled.
    
    If the abort was successful, as the abort process is underway it will
    terminate the io, so rather than synchronously waiting, just restart
    the io timer.
    Signed-off-by: default avatarJames Smart <james.smart@broadcom.com>
    Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    134aedc9
fc.c 82.8 KB