[PATCH 3/3] nvme-tcp: fix I/O stalls on congested sockets

Sagi Grimberg sagi at grimberg.me
Tue May 27 14:49:17 PDT 2025


>>
>> We still need to hunt these down. I'm still puzzled why adding the 
>> WAKE_SENDER
>> flag was able to make this issue disappear? I'll have another look at 
>> this patch.
>>
>> For now, I think we can go with this patchset, and then incrementally 
>> fix the remains.
>
> Kamaljit, can you check the following patch on top of the patchset 
> from Hannes that
> gets a reproduction?
>
> -- 
> diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c
> index 835e29014841..2f5f2fcfb078 100644
> --- a/drivers/nvme/host/tcp.c
> +++ b/drivers/nvme/host/tcp.c
> @@ -1075,7 +1075,7 @@ static void nvme_tcp_write_space(struct sock *sk)
>
>         read_lock_bh(&sk->sk_callback_lock);
>         queue = sk->sk_user_data;
> -       if (likely(queue && sk_stream_is_writeable(sk))) {
> +      if (likely(queue)) {
>                 clear_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
>                 queue_work_on(queue->io_cpu, nvme_tcp_wq, 
> &queue->io_work);
>         }
> -- 
>
> This think this may be preventing the scheduling of io_work. But now 
> that io_work is
> also ceasing based on sk_stream_is_writeable, we should probably still 
> schedule it.

Kamaljit? Any info on this?



More information about the Linux-nvme mailing list