• James Smart's avatar
    nvme-fc: resolve io failures during connect · 4cff280a
    James Smart authored
    If an io error occurs on an io issued while connecting, recovery
    of the io falls flat as the state checking ends up nooping the error
    handler.
    
    Create an err_work work item that is scheduled upon an io error while
    connecting. The work thread terminates all io on all queues and marks
    the queues as not connected.  The termination of the io will return
    back to the callee, which will then back out of the connection attempt
    and will reschedule, if possible, the connection attempt.
    
    The changes:
    - in case there are several commands hitting the error handler, a
      state flag is kept so that the error work is only scheduled once,
      on the first error. The subsequent errors can be ignored.
    - The calling sequence to stop keep alive and terminate the queues
      and their io is lifted from the reset routine. Made a small
      service routine used by both reset and err_work.
    - During debugging, found that the teardown path can reference
      an uninitialized pointer, resulting in a NULL pointer oops.
      The aen_ops weren't initialized yet. Add validation on their
      initialization before calling the teardown routine.
    Signed-off-by: default avatarJames Smart <jsmart2021@gmail.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    4cff280a
fc.c 91.6 KB