[PATCH] nvmet-tcp: remove a redundant line in nvmet_tcp_release_queue_work

Tomas Henzl thenzl at redhat.com
Mon Oct 13 08:46:36 PDT 2025


On 10/7/25 8:46 AM, Maurizio Lombardi wrote:
> On Tue Oct 7, 2025 at 8:26 AM CEST, Maurizio Lombardi wrote:
>> On Mon Oct 6, 2025 at 7:59 PM CEST, Tomas Henzl wrote:
>>> cancel_work_sync(&queue->io_work) is called twice, remove the
>>> second instance.
>>>
>>> Signed-off-by: Tomas Henzl <thenzl at redhat.com>
>>> ---
>>>  drivers/nvme/target/tcp.c | 1 -
>>>  1 file changed, 1 deletion(-)
>>>
>>> diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
>>> index 470bf37e5a63..a1d0f6b18b2c 100644
>>> --- a/drivers/nvme/target/tcp.c
>>> +++ b/drivers/nvme/target/tcp.c
>>> @@ -1577,7 +1577,6 @@ static void nvmet_tcp_release_queue_work(struct work_struct *w)
>>>  	nvmet_tcp_uninit_data_in_cmds(queue);
>>>  	nvmet_sq_destroy(&queue->nvme_sq);
>>>  	nvmet_cq_put(&queue->nvme_cq);
>>> -	cancel_work_sync(&queue->io_work);
>>>  	nvmet_tcp_free_cmd_data_in_buffers(queue);
>>>  	/* ->sock will be released by fput() */
>>>  	fput(queue->sock->file);
>>
>> I am not sure it's safe to remove it because io_work can potentially
>> re-enqueue itself.
>>
> 
> Small correction, the problem isn't io_work re-enqueing itself
> (the first cancel_work_sync() prevents that); I think the real problem
> is that nvmet_sq_destroy() could end up calling
> nvmet_tcp_queue_response() which enqueues io_work again.

The NVMET_TCP_RECV_ERR sate would make the workqueue finish quickly but
sure we don't want a running workqueue.

Let's drop this patch.

tomash

> 
> Maurizio
> 




More information about the Linux-nvme mailing list