All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V3 0/3] Fix a race condition when performing a controller reset
@ 2021-11-16 15:49 Maurizio Lombardi
  2021-11-16 15:49 ` [PATCH V3 1/3] nvmet-tcp: fix a race condition between release_queue and io_work Maurizio Lombardi
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Maurizio Lombardi @ 2021-11-16 15:49 UTC (permalink / raw)
  To: linux-nvme; +Cc: hch, sagi, chaitanya.kulkarni

Memory leaks and kernel panics involving the nvmet driver
have been observed when an initiator executes a reset_controller
operation while doing I/O.

The problem is due to a race condition between io_work
and release_queue, the latter may end up destroying the
commands while io_work is still running, causing use-after-free
and memory leaks.

V3:
  - rename nvmet_tcp_free_iovec() to nvmet_tcp_free_cmd_buffers()

V2:
  - Use "queue->rcv_state" to prevent the race condition, as suggested
    by Sagi Grimberg.
  - Dropped the changes to nvmet_tcp_queue_response() because they are
    no longer necessary.
  - Fix the memory leaks in a separate patch (PATCH 3/3).

Maurizio Lombardi (3):
  nvmet-tcp: fix a race condition between release_queue and io_work
  nvmet-tcp: add an helper to free the cmd buffers
  nvmet-tcp: fix memory leak when performing a controller reset

 drivers/nvme/target/tcp.c | 37 ++++++++++++++++++++++++++-----------
 1 file changed, 26 insertions(+), 11 deletions(-)

-- 
2.27.0



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH V3 1/3] nvmet-tcp: fix a race condition between release_queue and io_work
  2021-11-16 15:49 [PATCH V3 0/3] Fix a race condition when performing a controller reset Maurizio Lombardi
@ 2021-11-16 15:49 ` Maurizio Lombardi
  2021-11-16 17:25   ` John Meneghini
  2021-11-16 15:49 ` [PATCH V3 2/3] nvmet-tcp: add an helper to free the cmd buffers Maurizio Lombardi
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Maurizio Lombardi @ 2021-11-16 15:49 UTC (permalink / raw)
  To: linux-nvme; +Cc: hch, sagi, chaitanya.kulkarni

If the initiator executes a reset controller operation while
performing I/O, the target kernel will crash because of a race condition
between release_queue and io_work;
nvmet_tcp_uninit_data_in_cmds() may be executed while io_work
is running, calling flush_work() was not sufficient to
prevent this because io_work could requeue itself.

Fix this bug by using cancel_work_sync() to prevent io_work
from requeuing itself and set rcv_state to NVMET_TCP_RECV_ERR to
make sure we don't receive any more data from the socket.

Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
---
 drivers/nvme/target/tcp.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
index 84c387e4bf43..18f36256095f 100644
--- a/drivers/nvme/target/tcp.c
+++ b/drivers/nvme/target/tcp.c
@@ -1437,7 +1437,9 @@ static void nvmet_tcp_release_queue_work(struct work_struct *w)
 	mutex_unlock(&nvmet_tcp_queue_mutex);
 
 	nvmet_tcp_restore_socket_callbacks(queue);
-	flush_work(&queue->io_work);
+	cancel_work_sync(&queue->io_work);
+	/* stop accepting incoming data */
+	queue->rcv_state = NVMET_TCP_RECV_ERR;
 
 	nvmet_tcp_uninit_data_in_cmds(queue);
 	nvmet_sq_destroy(&queue->nvme_sq);
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH V3 2/3] nvmet-tcp: add an helper to free the cmd buffers
  2021-11-16 15:49 [PATCH V3 0/3] Fix a race condition when performing a controller reset Maurizio Lombardi
  2021-11-16 15:49 ` [PATCH V3 1/3] nvmet-tcp: fix a race condition between release_queue and io_work Maurizio Lombardi
@ 2021-11-16 15:49 ` Maurizio Lombardi
  2021-11-16 16:23   ` Sagi Grimberg
  2021-11-16 17:25   ` John Meneghini
  2021-11-16 15:49 ` [PATCH V3 3/3] nvmet-tcp: fix memory leak when performing a controller reset Maurizio Lombardi
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 10+ messages in thread
From: Maurizio Lombardi @ 2021-11-16 15:49 UTC (permalink / raw)
  To: linux-nvme; +Cc: hch, sagi, chaitanya.kulkarni

Makes the code easier to read and to debug.

Sets the freed pointers to NULL, it will be useful
when destroying the queues to understand if the commands'
buffers have been released already or not.

Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
---
 drivers/nvme/target/tcp.c | 28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
index 18f36256095f..786b1440a9af 100644
--- a/drivers/nvme/target/tcp.c
+++ b/drivers/nvme/target/tcp.c
@@ -166,6 +166,8 @@ static struct workqueue_struct *nvmet_tcp_wq;
 static const struct nvmet_fabrics_ops nvmet_tcp_ops;
 static void nvmet_tcp_free_cmd(struct nvmet_tcp_cmd *c);
 static void nvmet_tcp_finish_cmd(struct nvmet_tcp_cmd *cmd);
+static void nvmet_tcp_free_cmd_buffers(struct nvmet_tcp_cmd *cmd);
+static void nvmet_tcp_unmap_pdu_iovec(struct nvmet_tcp_cmd *cmd);
 
 static inline u16 nvmet_tcp_cmd_tag(struct nvmet_tcp_queue *queue,
 		struct nvmet_tcp_cmd *cmd)
@@ -297,6 +299,16 @@ static int nvmet_tcp_check_ddgst(struct nvmet_tcp_queue *queue, void *pdu)
 	return 0;
 }
 
+static void nvmet_tcp_free_cmd_buffers(struct nvmet_tcp_cmd *cmd)
+{
+	WARN_ON(unlikely(cmd->nr_mapped > 0));
+
+	kfree(cmd->iov);
+	sgl_free(cmd->req.sg);
+	cmd->iov = NULL;
+	cmd->req.sg = NULL;
+}
+
 static void nvmet_tcp_unmap_pdu_iovec(struct nvmet_tcp_cmd *cmd)
 {
 	struct scatterlist *sg;
@@ -306,6 +318,8 @@ static void nvmet_tcp_unmap_pdu_iovec(struct nvmet_tcp_cmd *cmd)
 
 	for (i = 0; i < cmd->nr_mapped; i++)
 		kunmap(sg_page(&sg[i]));
+
+	cmd->nr_mapped = 0;
 }
 
 static void nvmet_tcp_map_pdu_iovec(struct nvmet_tcp_cmd *cmd)
@@ -387,7 +401,7 @@ static int nvmet_tcp_map_data(struct nvmet_tcp_cmd *cmd)
 
 	return 0;
 err:
-	sgl_free(cmd->req.sg);
+	nvmet_tcp_free_cmd_buffers(cmd);
 	return NVME_SC_INTERNAL;
 }
 
@@ -632,10 +646,8 @@ static int nvmet_try_send_data(struct nvmet_tcp_cmd *cmd, bool last_in_batch)
 		}
 	}
 
-	if (queue->nvme_sq.sqhd_disabled) {
-		kfree(cmd->iov);
-		sgl_free(cmd->req.sg);
-	}
+	if (queue->nvme_sq.sqhd_disabled)
+		nvmet_tcp_free_cmd_buffers(cmd);
 
 	return 1;
 
@@ -664,8 +676,7 @@ static int nvmet_try_send_response(struct nvmet_tcp_cmd *cmd,
 	if (left)
 		return -EAGAIN;
 
-	kfree(cmd->iov);
-	sgl_free(cmd->req.sg);
+	nvmet_tcp_free_cmd_buffers(cmd);
 	cmd->queue->snd_cmd = NULL;
 	nvmet_tcp_put_cmd(cmd);
 	return 1;
@@ -1406,8 +1417,7 @@ static void nvmet_tcp_finish_cmd(struct nvmet_tcp_cmd *cmd)
 {
 	nvmet_req_uninit(&cmd->req);
 	nvmet_tcp_unmap_pdu_iovec(cmd);
-	kfree(cmd->iov);
-	sgl_free(cmd->req.sg);
+	nvmet_tcp_free_cmd_buffers(cmd);
 }
 
 static void nvmet_tcp_uninit_data_in_cmds(struct nvmet_tcp_queue *queue)
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH V3 3/3] nvmet-tcp: fix memory leak when performing a controller reset
  2021-11-16 15:49 [PATCH V3 0/3] Fix a race condition when performing a controller reset Maurizio Lombardi
  2021-11-16 15:49 ` [PATCH V3 1/3] nvmet-tcp: fix a race condition between release_queue and io_work Maurizio Lombardi
  2021-11-16 15:49 ` [PATCH V3 2/3] nvmet-tcp: add an helper to free the cmd buffers Maurizio Lombardi
@ 2021-11-16 15:49 ` Maurizio Lombardi
  2021-11-16 17:26   ` John Meneghini
  2021-11-16 20:26 ` [PATCH V3 0/3] Fix a race condition " Keith Busch
  2021-11-19 17:11 ` Christoph Hellwig
  4 siblings, 1 reply; 10+ messages in thread
From: Maurizio Lombardi @ 2021-11-16 15:49 UTC (permalink / raw)
  To: linux-nvme; +Cc: hch, sagi, chaitanya.kulkarni

If a reset controller is executed while the initiator
is performing some I/O the driver may leak the memory allocated
for the commands' iovec.

Make sure that nvmet_tcp_uninit_data_in_cmds() releases
all the memory.

Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
---
 drivers/nvme/target/tcp.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
index 786b1440a9af..605aa2a8ca53 100644
--- a/drivers/nvme/target/tcp.c
+++ b/drivers/nvme/target/tcp.c
@@ -1427,7 +1427,10 @@ static void nvmet_tcp_uninit_data_in_cmds(struct nvmet_tcp_queue *queue)
 
 	for (i = 0; i < queue->nr_cmds; i++, cmd++) {
 		if (nvmet_tcp_need_data_in(cmd))
-			nvmet_tcp_finish_cmd(cmd);
+			nvmet_req_uninit(&cmd->req);
+
+		nvmet_tcp_unmap_pdu_iovec(cmd);
+		nvmet_tcp_free_cmd_buffers(cmd);
 	}
 
 	if (!queue->nr_cmds && nvmet_tcp_need_data_in(&queue->connect)) {
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH V3 2/3] nvmet-tcp: add an helper to free the cmd buffers
  2021-11-16 15:49 ` [PATCH V3 2/3] nvmet-tcp: add an helper to free the cmd buffers Maurizio Lombardi
@ 2021-11-16 16:23   ` Sagi Grimberg
  2021-11-16 17:25   ` John Meneghini
  1 sibling, 0 replies; 10+ messages in thread
From: Sagi Grimberg @ 2021-11-16 16:23 UTC (permalink / raw)
  To: Maurizio Lombardi, linux-nvme; +Cc: hch, chaitanya.kulkarni

Reviewed-by: Sagi Grimberg <sagi@grimberg.me>


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH V3 1/3] nvmet-tcp: fix a race condition between release_queue and io_work
  2021-11-16 15:49 ` [PATCH V3 1/3] nvmet-tcp: fix a race condition between release_queue and io_work Maurizio Lombardi
@ 2021-11-16 17:25   ` John Meneghini
  0 siblings, 0 replies; 10+ messages in thread
From: John Meneghini @ 2021-11-16 17:25 UTC (permalink / raw)
  To: Maurizio Lombardi, linux-nvme; +Cc: hch, sagi, chaitanya.kulkarni

Reviewed-by: John Meneghini <jmeneghi@redhat.com>

On 11/16/21 10:49, Maurizio Lombardi wrote:
> If the initiator executes a reset controller operation while
> performing I/O, the target kernel will crash because of a race condition
> between release_queue and io_work;
> nvmet_tcp_uninit_data_in_cmds() may be executed while io_work
> is running, calling flush_work() was not sufficient to
> prevent this because io_work could requeue itself.
> 
> Fix this bug by using cancel_work_sync() to prevent io_work
> from requeuing itself and set rcv_state to NVMET_TCP_RECV_ERR to
> make sure we don't receive any more data from the socket.
> 
> Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
> Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
> ---
>   drivers/nvme/target/tcp.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
> index 84c387e4bf43..18f36256095f 100644
> --- a/drivers/nvme/target/tcp.c
> +++ b/drivers/nvme/target/tcp.c
> @@ -1437,7 +1437,9 @@ static void nvmet_tcp_release_queue_work(struct work_struct *w)
>   	mutex_unlock(&nvmet_tcp_queue_mutex);
>   
>   	nvmet_tcp_restore_socket_callbacks(queue);
> -	flush_work(&queue->io_work);
> +	cancel_work_sync(&queue->io_work);
> +	/* stop accepting incoming data */
> +	queue->rcv_state = NVMET_TCP_RECV_ERR;
>   
>   	nvmet_tcp_uninit_data_in_cmds(queue);
>   	nvmet_sq_destroy(&queue->nvme_sq);
> 



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH V3 2/3] nvmet-tcp: add an helper to free the cmd buffers
  2021-11-16 15:49 ` [PATCH V3 2/3] nvmet-tcp: add an helper to free the cmd buffers Maurizio Lombardi
  2021-11-16 16:23   ` Sagi Grimberg
@ 2021-11-16 17:25   ` John Meneghini
  1 sibling, 0 replies; 10+ messages in thread
From: John Meneghini @ 2021-11-16 17:25 UTC (permalink / raw)
  To: Maurizio Lombardi, linux-nvme; +Cc: hch, sagi, chaitanya.kulkarni

Reviewed-by: John Meneghini <jmeneghi@redhat.com>

On 11/16/21 10:49, Maurizio Lombardi wrote:
> Makes the code easier to read and to debug.
> 
> Sets the freed pointers to NULL, it will be useful
> when destroying the queues to understand if the commands'
> buffers have been released already or not.
> 
> Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
> ---
>   drivers/nvme/target/tcp.c | 28 +++++++++++++++++++---------
>   1 file changed, 19 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
> index 18f36256095f..786b1440a9af 100644
> --- a/drivers/nvme/target/tcp.c
> +++ b/drivers/nvme/target/tcp.c
> @@ -166,6 +166,8 @@ static struct workqueue_struct *nvmet_tcp_wq;
>   static const struct nvmet_fabrics_ops nvmet_tcp_ops;
>   static void nvmet_tcp_free_cmd(struct nvmet_tcp_cmd *c);
>   static void nvmet_tcp_finish_cmd(struct nvmet_tcp_cmd *cmd);
> +static void nvmet_tcp_free_cmd_buffers(struct nvmet_tcp_cmd *cmd);
> +static void nvmet_tcp_unmap_pdu_iovec(struct nvmet_tcp_cmd *cmd);
>   
>   static inline u16 nvmet_tcp_cmd_tag(struct nvmet_tcp_queue *queue,
>   		struct nvmet_tcp_cmd *cmd)
> @@ -297,6 +299,16 @@ static int nvmet_tcp_check_ddgst(struct nvmet_tcp_queue *queue, void *pdu)
>   	return 0;
>   }
>   
> +static void nvmet_tcp_free_cmd_buffers(struct nvmet_tcp_cmd *cmd)
> +{
> +	WARN_ON(unlikely(cmd->nr_mapped > 0));
> +
> +	kfree(cmd->iov);
> +	sgl_free(cmd->req.sg);
> +	cmd->iov = NULL;
> +	cmd->req.sg = NULL;
> +}
> +
>   static void nvmet_tcp_unmap_pdu_iovec(struct nvmet_tcp_cmd *cmd)
>   {
>   	struct scatterlist *sg;
> @@ -306,6 +318,8 @@ static void nvmet_tcp_unmap_pdu_iovec(struct nvmet_tcp_cmd *cmd)
>   
>   	for (i = 0; i < cmd->nr_mapped; i++)
>   		kunmap(sg_page(&sg[i]));
> +
> +	cmd->nr_mapped = 0;
>   }
>   
>   static void nvmet_tcp_map_pdu_iovec(struct nvmet_tcp_cmd *cmd)
> @@ -387,7 +401,7 @@ static int nvmet_tcp_map_data(struct nvmet_tcp_cmd *cmd)
>   
>   	return 0;
>   err:
> -	sgl_free(cmd->req.sg);
> +	nvmet_tcp_free_cmd_buffers(cmd);
>   	return NVME_SC_INTERNAL;
>   }
>   
> @@ -632,10 +646,8 @@ static int nvmet_try_send_data(struct nvmet_tcp_cmd *cmd, bool last_in_batch)
>   		}
>   	}
>   
> -	if (queue->nvme_sq.sqhd_disabled) {
> -		kfree(cmd->iov);
> -		sgl_free(cmd->req.sg);
> -	}
> +	if (queue->nvme_sq.sqhd_disabled)
> +		nvmet_tcp_free_cmd_buffers(cmd);
>   
>   	return 1;
>   
> @@ -664,8 +676,7 @@ static int nvmet_try_send_response(struct nvmet_tcp_cmd *cmd,
>   	if (left)
>   		return -EAGAIN;
>   
> -	kfree(cmd->iov);
> -	sgl_free(cmd->req.sg);
> +	nvmet_tcp_free_cmd_buffers(cmd);
>   	cmd->queue->snd_cmd = NULL;
>   	nvmet_tcp_put_cmd(cmd);
>   	return 1;
> @@ -1406,8 +1417,7 @@ static void nvmet_tcp_finish_cmd(struct nvmet_tcp_cmd *cmd)
>   {
>   	nvmet_req_uninit(&cmd->req);
>   	nvmet_tcp_unmap_pdu_iovec(cmd);
> -	kfree(cmd->iov);
> -	sgl_free(cmd->req.sg);
> +	nvmet_tcp_free_cmd_buffers(cmd);
>   }
>   
>   static void nvmet_tcp_uninit_data_in_cmds(struct nvmet_tcp_queue *queue)
> 



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH V3 3/3] nvmet-tcp: fix memory leak when performing a controller reset
  2021-11-16 15:49 ` [PATCH V3 3/3] nvmet-tcp: fix memory leak when performing a controller reset Maurizio Lombardi
@ 2021-11-16 17:26   ` John Meneghini
  0 siblings, 0 replies; 10+ messages in thread
From: John Meneghini @ 2021-11-16 17:26 UTC (permalink / raw)
  To: Maurizio Lombardi, linux-nvme; +Cc: hch, sagi, chaitanya.kulkarni

Reviewed-by: John Meneghini <jmeneghi@redhat.com>


On 11/16/21 10:49, Maurizio Lombardi wrote:
> If a reset controller is executed while the initiator
> is performing some I/O the driver may leak the memory allocated
> for the commands' iovec.
> 
> Make sure that nvmet_tcp_uninit_data_in_cmds() releases
> all the memory.
> 
> Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
> Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
> ---
>   drivers/nvme/target/tcp.c | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
> index 786b1440a9af..605aa2a8ca53 100644
> --- a/drivers/nvme/target/tcp.c
> +++ b/drivers/nvme/target/tcp.c
> @@ -1427,7 +1427,10 @@ static void nvmet_tcp_uninit_data_in_cmds(struct nvmet_tcp_queue *queue)
>   
>   	for (i = 0; i < queue->nr_cmds; i++, cmd++) {
>   		if (nvmet_tcp_need_data_in(cmd))
> -			nvmet_tcp_finish_cmd(cmd);
> +			nvmet_req_uninit(&cmd->req);
> +
> +		nvmet_tcp_unmap_pdu_iovec(cmd);
> +		nvmet_tcp_free_cmd_buffers(cmd);
>   	}
>   
>   	if (!queue->nr_cmds && nvmet_tcp_need_data_in(&queue->connect)) {
> 



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH V3 0/3] Fix a race condition when performing a controller reset
  2021-11-16 15:49 [PATCH V3 0/3] Fix a race condition when performing a controller reset Maurizio Lombardi
                   ` (2 preceding siblings ...)
  2021-11-16 15:49 ` [PATCH V3 3/3] nvmet-tcp: fix memory leak when performing a controller reset Maurizio Lombardi
@ 2021-11-16 20:26 ` Keith Busch
  2021-11-19 17:11 ` Christoph Hellwig
  4 siblings, 0 replies; 10+ messages in thread
From: Keith Busch @ 2021-11-16 20:26 UTC (permalink / raw)
  To: Maurizio Lombardi; +Cc: linux-nvme, hch, sagi, chaitanya.kulkarni

On Tue, Nov 16, 2021 at 04:49:17PM +0100, Maurizio Lombardi wrote:
> Memory leaks and kernel panics involving the nvmet driver
> have been observed when an initiator executes a reset_controller
> operation while doing I/O.
> 
> The problem is due to a race condition between io_work
> and release_queue, the latter may end up destroying the
> commands while io_work is still running, causing use-after-free
> and memory leaks.

Series looks good to me.

Reviewed-by: Keith Busch <kbusch@kernel.org>


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH V3 0/3] Fix a race condition when performing a controller reset
  2021-11-16 15:49 [PATCH V3 0/3] Fix a race condition when performing a controller reset Maurizio Lombardi
                   ` (3 preceding siblings ...)
  2021-11-16 20:26 ` [PATCH V3 0/3] Fix a race condition " Keith Busch
@ 2021-11-19 17:11 ` Christoph Hellwig
  4 siblings, 0 replies; 10+ messages in thread
From: Christoph Hellwig @ 2021-11-19 17:11 UTC (permalink / raw)
  To: Maurizio Lombardi; +Cc: linux-nvme, hch, sagi, chaitanya.kulkarni

Thanks,

applied to nvme-5.16.


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2021-11-19 17:11 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-16 15:49 [PATCH V3 0/3] Fix a race condition when performing a controller reset Maurizio Lombardi
2021-11-16 15:49 ` [PATCH V3 1/3] nvmet-tcp: fix a race condition between release_queue and io_work Maurizio Lombardi
2021-11-16 17:25   ` John Meneghini
2021-11-16 15:49 ` [PATCH V3 2/3] nvmet-tcp: add an helper to free the cmd buffers Maurizio Lombardi
2021-11-16 16:23   ` Sagi Grimberg
2021-11-16 17:25   ` John Meneghini
2021-11-16 15:49 ` [PATCH V3 3/3] nvmet-tcp: fix memory leak when performing a controller reset Maurizio Lombardi
2021-11-16 17:26   ` John Meneghini
2021-11-16 20:26 ` [PATCH V3 0/3] Fix a race condition " Keith Busch
2021-11-19 17:11 ` Christoph Hellwig

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.