• Sagi Grimberg's avatar
    nvme-fabrics: allow to queue requests for live queues · 73a53799
    Sagi Grimberg authored
    Right now we are failing requests based on the controller state (which
    is checked inline in nvmf_check_ready) however we should definitely
    accept requests if the queue is live.
    
    When entering controller reset, we transition the controller into
    NVME_CTRL_RESETTING, and then return BLK_STS_RESOURCE for non-mpath
    requests (have blk_noretry_request set).
    
    This is also the case for NVME_REQ_USER for the wrong reason. There
    shouldn't be any reason for us to reject this I/O in a controller reset.
    We do want to prevent passthru commands on the admin queue because we
    need the controller to fully initialize first before we let user passthru
    admin commands to be issued.
    
    In a non-mpath setup, this means that the requests will simply be
    requeued over and over forever not allowing the q_usage_counter to drop
    its final reference, causing controller reset to hang if running
    concurrently with heavy I/O.
    
    Fixes: 35897b92 ("nvme-fabrics: fix and refine state checks in __nvmf_check_ready")
    Reviewed-by: default avatarJames Smart <james.smart@broadcom.com>
    Signed-off-by: default avatarSagi Grimberg <sagi@grimberg.me>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    73a53799
fabrics.c 30.5 KB