[PATCH 3/3] nvme-tcp: send quota for nvme_tcp_send_all()

Sagi Grimberg sagi at grimberg.me
Sat May 21 13:02:13 PDT 2022


>>> Add a send quota in nvme_tcp_send_all() to avoid stalls when sending
>>> large amounts of requests.
>>>
>>> Signed-off-by: Daniel Wagner <dwagner at suse.de>
>>> Signed-off-by: Hannes Reinecke <hare at suse.de>
>>> ---
>>>   drivers/nvme/host/tcp.c | 3 ++-
>>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c
>>> index 606565a4c708..87d760dfa3a9 100644
>>> --- a/drivers/nvme/host/tcp.c
>>> +++ b/drivers/nvme/host/tcp.c
>>> @@ -308,11 +308,12 @@ static inline void nvme_tcp_advance_req(struct 
>>> nvme_tcp_request *req,
>>>   static inline void nvme_tcp_send_all(struct nvme_tcp_queue *queue)
>>>   {
>>>       int ret;
>>> +    unsigned long deadline = jiffies + msecs_to_jiffies(1);
>>>       /* drain the send queue as much as we can... */
>>>       do {
>>>           ret = nvme_tcp_try_send(queue);
>>> -    } while (ret > 0);
>>> +    } while (ret > 0 || !time_after(jiffies, deadline));
>>
>> Umm, this will stay here a deadline period even if we don't have
>> anything to send?
> 
> Ah. Yeah, maybe. We can change it to '&&', which should solve it.
> (I think)

See what is done in io_work()



More information about the Linux-nvme mailing list