tcp: fix FIONREAD/SIOCINQ
authorEric Dumazet <edumazet@google.com>
Thu, 18 Oct 2012 09:14:12 +0000 (09:14 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 18 Oct 2012 19:34:31 +0000 (15:34 -0400)
commita3374c42aa5f7237e87ff3b0622018636b0c847e
tree8a9232aed518f5ce9acb862fc125aacc5cd7cebd
parentc6846ee148e07e4cfae4de486532efb02d238938
tcp: fix FIONREAD/SIOCINQ

tcp_ioctl() tries to take into account if tcp socket received a FIN
to report correct number bytes in receive queue.

But its flaky because if the application ate the last skb,
we return 1 instead of 0.

Correct way to detect that FIN was received is to test SOCK_DONE.

Reported-by: Elliot Hughes <enh@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp.c