tcp: refine tcp_write_queue_empty() implementation
authorEric Dumazet <edumazet@google.com>
Thu, 12 Dec 2019 20:55:30 +0000 (12:55 -0800)
committerJakub Kicinski <jakub.kicinski@netronome.com>
Sat, 14 Dec 2019 05:58:40 +0000 (21:58 -0800)
commitee2aabd3fc2eef4c1a0ebdadccc76fbff74b94fc
treeff49c797d50165533687b248d7531010a9b24339
parent1f85e6267caca44b30c54711652b0726fadbb131
tcp: refine tcp_write_queue_empty() implementation

Due to how tcp_sendmsg() is implemented, we can have an empty
skb at the tail of the write queue.

Most [1] tcp_write_queue_empty() callers want to know if there is
anything to send (payload and/or FIN)

Instead of checking if the sk_write_queue is empty, we need
to test if tp->write_seq == tp->snd_nxt

[1] tcp_send_fin() was the only caller that expected to
 see if an skb was in the write queue, I have changed the code
 to reuse the tcp_write_queue_tail() result.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
include/net/tcp.h
net/ipv4/tcp_output.c