tcp: Extend SOF_TIMESTAMPING_RX_SOFTWARE to TCP recvmsg
authorMike Maloney <maloney@google.com>
Tue, 22 Aug 2017 21:08:48 +0000 (17:08 -0400)
committerDavid S. Miller <davem@davemloft.net>
Thu, 24 Aug 2017 03:30:47 +0000 (20:30 -0700)
commit98aaa913b4ed250324429f0a9e6d5f77a3b5276c
tree651cb3f820b76e3b199d25c4997dd0e494cdcc06
parentb28547728d4fd42a004df2b662724e16ff778db6
tcp: Extend SOF_TIMESTAMPING_RX_SOFTWARE to TCP recvmsg

When SOF_TIMESTAMPING_RX_SOFTWARE is enabled for tcp sockets, return the
timestamp corresponding to the highest sequence number data returned.

Previously the skb->tstamp is overwritten when a TCP packet is placed
in the out of order queue.  While the packet is in the ooo queue, save the
timestamp in the TCB_SKB_CB.  This space is shared with the gso_*
options which are only used on the tx path, and a previously unused 4
byte hole.

When skbs are coalesced either in the sk_receive_queue or the
out_of_order_queue always choose the timestamp of the appended skb to
maintain the invariant of returning the timestamp of the last byte in
the recvmsg buffer.

Signed-off-by: Mike Maloney <maloney@google.com>
Acked-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/tcp.h
net/ipv4/tcp.c
net/ipv4/tcp_input.c
net/ipv4/tcp_ipv4.c
net/ipv6/tcp_ipv6.c