• James Smart's avatar
    nvme_fc: fix ctrl create failures racing with workq items · cf25809b
    James Smart authored
    If there are errors during initial controller create, the transport
    will teardown the partially initialized controller struct and free
    the ctlr memory.  Trouble is - most of those errors can occur due
    to asynchronous events happening such io timeouts and subsystem
    connectivity failures. Those failures invoke async workq items to
    reset the controller and attempt reconnect.  Those may be in progress
    as the main thread frees the ctrl memory, resulting in NULL ptr oops.
    
    Prevent this from happening by having the main ctrl failure thread
    changing state to DELETING followed by synchronously cancelling any
    pending queued work item. The change of state will prevent the
    scheduling of resets or reconnect events.
    Signed-off-by: default avatarJames Smart <james.smart@broadcom.com>
    Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    cf25809b
fc.c 89.1 KB