• Chaitanya Kulkarni's avatar
    nvme: fix qid param blk_mq_alloc_request_hctx · b10907b8
    Chaitanya Kulkarni authored
    Only caller of the __nvme_submit_sync_cmd() with qid value not equal to
    NVME_QID_ANY is nvmf_connect_io_queues(), where qid value is alway set
    to > 0.
    
    [1] __nvme_submit_sync_cmd() callers with  qid parameter from :-
    
            Caller                  |   qid parameter
    ------------------------------------------------------
    * nvme_fc_connect_io_queues()   |
       nvmf_connect_io_queue()      |      qid > 0
    * nvme_rdma_start_io_queues()   |
       nvme_rdma_start_queue()      |
        nvmf_connect_io_queues()    |      qid > 0
    * nvme_tcp_start_io_queues()    |
       nvme_tcp_start_queue()       |
        nvmf_connect_io_queues()    |      qid > 0
    * nvme_loop_connect_io_queues() |
       nvmf_connect_io_queues()     |      qid > 0
    
    When qid value of the function parameter __nvme_submit_sync_cmd() is > 0
    from above callers, we use blk_mq_alloc_request_hctx(), where we pass
    last parameter as 0 if qid functional parameter value is set to 0 with
    conditional operators, see 1002 :-
    
    991 int __nvme_submit_sync_cmd(struct request_queue *q, struct nvme_command *cmd,
     992                 union nvme_result *result, void *buffer, unsigned bufflen,
     993                 int qid, int at_head, blk_mq_req_flags_t flags)
     994 {
     995         struct request *req;
     996         int ret;
     997
     998         if (qid == NVME_QID_ANY)
     999                 req = blk_mq_alloc_request(q, nvme_req_op(cmd), flags);
    1000         else
    1001                 req = blk_mq_alloc_request_hctx(q, nvme_req_op(cmd), flags,
    1002                                                 qid ? qid - 1 : 0);
    1003
    
    But qid function parameter value of the __nvme_submit_sync_cmd() will
    never be 0 from above caller list see [1], and all the other callers of
    __nvme_submit_sync_cmd() use NVME_QID_ANY as qid value :-
    1. nvme_submit_sync_cmd()
    2. nvme_features()
    3. nvme_sec_submit()
    4. nvmf_reg_read32()
    5. nvmf_reg_read64()
    6. nvmf_ref_write32()
    7. nvmf_connect_admin_queue()
    
    Remove the conditional operator to pass the qid as 0 in the call to
    blk_mq_alloc_requst_hctx().
    Signed-off-by: default avatarChaitanya Kulkarni <kch@nvidia.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    b10907b8
core.c 131 KB