• Chaitanya Kulkarni's avatar
    nvme-loop: set ctrl state connecting after init · 64d452b3
    Chaitanya Kulkarni authored
    When creating a loop controller (ctrl) in nvme_loop_create_ctrl() ->
    nvme_init_ctrl() we set the ctrl state to NVME_CTRL_NEW.
    
    Prior to [1] NVME_CTRL_NEW state was allowed in nvmf_check_ready() for
    fabrics command type connect. Now, this fails in the following code path
    for fabrics connect command when creating admin queue :-
    
    nvme_loop_create_ctrl()
     nvme_loo_configure_admin_queue()
      nvmf_connect_admin_queue()
       __nvme_submit_sync_cmd()
        blk_execute_rq()
          nvme_loop_queue_rq()
    	nvmf_check_ready()
    
    # echo  "transport=loop,nqn=fs" > /dev/nvme-fabrics
    [ 6047.741327] nvmet: adding nsid 1 to subsystem fs
    [ 6048.756430] nvme nvme1: Connect command failed, error wo/DNR bit: 880
    
    We need to set the ctrl state to NVME_CTRL_CONNECTING after :-
    nvme_loop_create_ctrl()
     nvme_init_ctrl()
    so that the above mentioned check for nvmf_check_ready() will return
    true.
    
    This patch sets the ctrl state to connecting after we init the ctrl in
    nvme_loop_create_ctrl()
     nvme_init_ctrl() .
    
    [1] commit aa63fa6776a7 ("nvme-fabrics: allow to queue requests for live queues")
    
    Fixes: aa63fa6776a7 ("nvme-fabrics: allow to queue requests for live queues")
    Signed-off-by: default avatarChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
    Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
    Tested-by: default avatarSagi Grimberg <sagi@grimberg.me>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    64d452b3
loop.c 18.3 KB