]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/nvme/host/tcp.c
nvme: move sqsize setting to the core
[linux.git] / drivers / nvme / host / tcp.c
index 606b13d35d16f52be5152720b3b65d6bc46ea28e..088dac0d97c46129e454b66d0379686a17940f10 100644 (file)
@@ -608,23 +608,18 @@ static int nvme_tcp_recv_pdu(struct nvme_tcp_queue *queue, struct sk_buff *skb,
 
        switch (hdr->type) {
        case nvme_tcp_c2h_data:
-               ret = nvme_tcp_handle_c2h_data(queue, (void *)queue->pdu);
-               break;
+               return nvme_tcp_handle_c2h_data(queue, (void *)queue->pdu);
        case nvme_tcp_rsp:
                nvme_tcp_init_recv_ctx(queue);
-               ret = nvme_tcp_handle_comp(queue, (void *)queue->pdu);
-               break;
+               return nvme_tcp_handle_comp(queue, (void *)queue->pdu);
        case nvme_tcp_r2t:
                nvme_tcp_init_recv_ctx(queue);
-               ret = nvme_tcp_handle_r2t(queue, (void *)queue->pdu);
-               break;
+               return nvme_tcp_handle_r2t(queue, (void *)queue->pdu);
        default:
                dev_err(queue->ctrl->ctrl.device,
                        "unsupported pdu type (%d)\n", hdr->type);
                return -EINVAL;
        }
-
-       return ret;
 }
 
 static inline void nvme_tcp_end_request(struct request *rq, u16 status)
@@ -1023,14 +1018,15 @@ static int nvme_tcp_try_send(struct nvme_tcp_queue *queue)
 
 static int nvme_tcp_try_recv(struct nvme_tcp_queue *queue)
 {
-       struct sock *sk = queue->sock->sk;
+       struct socket *sock = queue->sock;
+       struct sock *sk = sock->sk;
        read_descriptor_t rd_desc;
        int consumed;
 
        rd_desc.arg.data = queue;
        rd_desc.count = 1;
        lock_sock(sk);
-       consumed = tcp_read_sock(sk, &rd_desc, nvme_tcp_recv_skb);
+       consumed = sock->ops->read_sock(sk, &rd_desc, nvme_tcp_recv_skb);
        release_sock(sk);
        return consumed;
 }
@@ -1711,16 +1707,7 @@ static int nvme_tcp_configure_admin_queue(struct nvme_ctrl *ctrl, bool new)
        if (error)
                goto out_cleanup_queue;
 
-       error = ctrl->ops->reg_read64(ctrl, NVME_REG_CAP, &ctrl->cap);
-       if (error) {
-               dev_err(ctrl->device,
-                       "prop_get NVME_REG_CAP failed\n");
-               goto out_stop_queue;
-       }
-
-       ctrl->sqsize = min_t(int, NVME_CAP_MQES(ctrl->cap), ctrl->sqsize);
-
-       error = nvme_enable_ctrl(ctrl, ctrl->cap);
+       error = nvme_enable_ctrl(ctrl);
        if (error)
                goto out_stop_queue;
 
@@ -1748,9 +1735,11 @@ static void nvme_tcp_teardown_admin_queue(struct nvme_ctrl *ctrl,
 {
        blk_mq_quiesce_queue(ctrl->admin_q);
        nvme_tcp_stop_queue(ctrl, 0);
-       if (ctrl->admin_tagset)
+       if (ctrl->admin_tagset) {
                blk_mq_tagset_busy_iter(ctrl->admin_tagset,
                        nvme_cancel_request, ctrl);
+               blk_mq_tagset_wait_completed_request(ctrl->admin_tagset);
+       }
        blk_mq_unquiesce_queue(ctrl->admin_q);
        nvme_tcp_destroy_admin_queue(ctrl, remove);
 }
@@ -1762,9 +1751,11 @@ static void nvme_tcp_teardown_io_queues(struct nvme_ctrl *ctrl,
                return;
        nvme_stop_queues(ctrl);
        nvme_tcp_stop_io_queues(ctrl);
-       if (ctrl->tagset)
+       if (ctrl->tagset) {
                blk_mq_tagset_busy_iter(ctrl->tagset,
                        nvme_cancel_request, ctrl);
+               blk_mq_tagset_wait_completed_request(ctrl->tagset);
+       }
        if (remove)
                nvme_start_queues(ctrl);
        nvme_tcp_destroy_io_queues(ctrl, remove);