• Chaitanya Kulkarni's avatar
    nvme: split nvme_alloc_request() · 39dfe844
    Chaitanya Kulkarni authored
    Right now nvme_alloc_request() allocates a request from block layer
    based on the value of the qid. When qid set to NVME_QID_ANY it used
    blk_mq_alloc_request() else blk_mq_alloc_request_hctx().
    
    The function nvme_alloc_request() is called from different context, The
    only place where it uses non NVME_QID_ANY value is for fabrics connect
    commands :-
    
    nvme_submit_sync_cmd()		NVME_QID_ANY
    nvme_features()			NVME_QID_ANY
    nvme_sec_submit()		NVME_QID_ANY
    nvmf_reg_read32()		NVME_QID_ANY
    nvmf_reg_read64()		NVME_QID_ANY
    nvmf_reg_write32()		NVME_QID_ANY
    nvmf_connect_admin_queue()	NVME_QID_ANY
    nvme_submit_user_cmd()		NVME_QID_ANY
    	nvme_alloc_request()
    nvme_keep_alive()		NVME_QID_ANY
    	nvme_alloc_request()
    nvme_timeout()			NVME_QID_ANY
    	nvme_alloc_request()
    nvme_delete_queue()		NVME_QID_ANY
    	nvme_alloc_request()
    nvmet_passthru_execute_cmd()	NVME_QID_ANY
    	nvme_alloc_request()
    nvmf_connect_io_queue() 	QID
    	__nvme_submit_sync_cmd()
    		nvme_alloc_request()
    
    With passthru nvme_alloc_request() now falls into the I/O fast path such
    that blk_mq_alloc_request_hctx() is never gets called and that adds
    additional branch check in fast path.
    
    Split the nvme_alloc_request() into nvme_alloc_request() and
    nvme_alloc_request_qid().
    
    Replace each call of the nvme_alloc_request() with NVME_QID_ANY param
    with a call to newly added nvme_alloc_request() without NVME_QID_ANY.
    
    Replace a call to nvme_alloc_request() with QID param with a call to
    newly added nvme_alloc_request() and nvme_alloc_request_qid()
    based on the qid value set in the __nvme_submit_sync_cmd().
    Signed-off-by: default avatarChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
    Reviewed-by: default avatarLogan Gunthorpe <logang@deltatee.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    39dfe844
lightnvm.c 32.2 KB