• James Smart's avatar
    nvme-fc: correct io termination handling · 0a02e39f
    James Smart authored
    The io completion handling for i/o's that are failing due to
    to a transport error or association termination had issues, causing
    io failures (DNR set so retries didn't kick in) or long stalls.
    
    Change the io completion handler for the following items:
    
    When an io has been completed due to a transport abort (based on an
    exchange error) or when marked as aborted as part of an association
    termination (FCOP_FLAGS_TERMIO), set the NVME completion status to
    NVME_SC_ABORTED. By default, do not set DNR on the status so that a
    retry can be attempted after association recreate.
    
    In cases where an io is failed (non-successful nvme status including
    aborted), if the controller is being deleted (blk_queue_dying) or
    the io was part of the ios used for association creation (ctrl state
    is NEW or RECONNECTING), then additionally set the DNR bit so the io
    will not be retried. If the failed io was part of association creation,
    the failure will tear down the partially completioned association and
    typically restart a new reconnect attempt (another create association
    later).
    
    Rearranged code flow to remove a largely unneeded local variable.
    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>
    0a02e39f
fc.c 82.5 KB