[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