• Chaitanya Kulkarni's avatar
    nvme: set non-mdts limits in nvme_scan_work · 78288665
    Chaitanya Kulkarni authored
    In current implementation we set the non-mdts limits by calling
    nvme_init_non_mdts_limits() from nvme_init_ctrl_finish().
    This also tries to set the limits for the discovery controller which
    has no I/O queues resulting in the warning message reported by the
    nvme_log_error() when running blktest nvme/002: -
    
    [ 2005.155946] run blktests nvme/002 at 2022-04-09 16:57:47
    [ 2005.192223] loop: module loaded
    [ 2005.196429] nvmet: adding nsid 1 to subsystem blktests-subsystem-0
    [ 2005.200334] nvmet: adding nsid 1 to subsystem blktests-subsystem-1
    
    <------------------------------SNIP---------------------------------->
    
    [ 2008.958108] nvmet: adding nsid 1 to subsystem blktests-subsystem-997
    [ 2008.962082] nvmet: adding nsid 1 to subsystem blktests-subsystem-998
    [ 2008.966102] nvmet: adding nsid 1 to subsystem blktests-subsystem-999
    [ 2008.973132] nvmet: creating discovery controller 1 for subsystem nqn.2014-08.org.nvmexpress.discovery for NQN testhostnqn.
    *[ 2008.973196] nvme1: Identify(0x6), Invalid Field in Command (sct 0x0 / sc 0x2) MORE DNR*
    [ 2008.974595] nvme nvme1: new ctrl: "nqn.2014-08.org.nvmexpress.discovery"
    [ 2009.103248] nvme nvme1: Removing ctrl: NQN "nqn.2014-08.org.nvmexpress.discovery"
    
    Move the call of nvme_init_non_mdts_limits() to nvme_scan_work() after
    we verify that I/O queues are created since that is a converging point
    for each transport where these limits are actually used.
    
    1. FC :
    nvme_fc_create_association()
     ...
     nvme_fc_create_io_queues(ctrl);
     ...
     nvme_start_ctrl()
      nvme_scan_queue()
       nvme_scan_work()
    
    2. PCIe:-
    nvme_reset_work()
     ...
     nvme_setup_io_queues()
      nvme_create_io_queues()
       nvme_alloc_queue()
     ...
     nvme_start_ctrl()
      nvme_scan_queue()
       nvme_scan_work()
    
    3. RDMA :-
    nvme_rdma_setup_ctrl
     ...
      nvme_rdma_configure_io_queues
      ...
      nvme_start_ctrl()
       nvme_scan_queue()
        nvme_scan_work()
    
    4. TCP :-
    nvme_tcp_setup_ctrl
     ...
      nvme_tcp_configure_io_queues
      ...
      nvme_start_ctrl()
       nvme_scan_queue()
        nvme_scan_work()
    
    * nvme_scan_work()
    ...
    nvme_validate_or_alloc_ns()
      nvme_alloc_ns()
       nvme_update_ns_info()
        nvme_update_disk_info()
         nvme_config_discard() <---
         blk_queue_max_write_zeroes_sectors() <---
    Signed-off-by: default avatarChaitanya Kulkarni <kch@nvidia.com>
    Reviewed-by: default avatarKeith Busch <kbusch@kernel.org>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    78288665
core.c 130 KB