nvme-tcp: allocate socket file
authorHannes Reinecke <hare@suse.de>
Thu, 24 Aug 2023 14:39:14 +0000 (16:39 +0200)
committerKeith Busch <kbusch@kernel.org>
Wed, 11 Oct 2023 17:11:55 +0000 (10:11 -0700)
When using the TLS upcall we need to allocate a socket file such
that the userspace daemon is able to use the socket.

Signed-off-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Keith Busch <kbusch@kernel.org>
drivers/nvme/host/tcp.c

index 5b332d9f87fc3a20b803231879616eeb44a20260..5af6c7df44a6e6a62a003d9f81e07c53f291cff0 100644 (file)
@@ -1338,7 +1338,9 @@ static void nvme_tcp_free_queue(struct nvme_ctrl *nctrl, int qid)
        }
 
        noreclaim_flag = memalloc_noreclaim_save();
-       sock_release(queue->sock);
+       /* ->sock will be released by fput() */
+       fput(queue->sock->file);
+       queue->sock = NULL;
        memalloc_noreclaim_restore(noreclaim_flag);
 
        kfree(queue->pdu);
@@ -1512,6 +1514,7 @@ static int nvme_tcp_alloc_queue(struct nvme_ctrl *nctrl, int qid)
        struct nvme_tcp_ctrl *ctrl = to_tcp_ctrl(nctrl);
        struct nvme_tcp_queue *queue = &ctrl->queues[qid];
        int ret, rcv_pdu_size;
+       struct file *sock_file;
 
        mutex_init(&queue->queue_lock);
        queue->ctrl = ctrl;
@@ -1534,6 +1537,11 @@ static int nvme_tcp_alloc_queue(struct nvme_ctrl *nctrl, int qid)
                goto err_destroy_mutex;
        }
 
+       sock_file = sock_alloc_file(queue->sock, O_CLOEXEC, NULL);
+       if (IS_ERR(sock_file)) {
+               ret = PTR_ERR(sock_file);
+               goto err_destroy_mutex;
+       }
        nvme_tcp_reclassify_socket(queue->sock);
 
        /* Single syn retry */
@@ -1640,7 +1648,8 @@ err_crypto:
        if (queue->hdr_digest || queue->data_digest)
                nvme_tcp_free_crypto(queue);
 err_sock:
-       sock_release(queue->sock);
+       /* ->sock will be released by fput() */
+       fput(queue->sock->file);
        queue->sock = NULL;
 err_destroy_mutex:
        mutex_destroy(&queue->send_mutex);