aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_input.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r--net/ipv4/tcp_input.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index d854363a4387..f93687f97d80 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -4576,6 +4576,17 @@ err:
4576 4576
4577} 4577}
4578 4578
4579void tcp_data_ready(struct sock *sk)
4580{
4581 const struct tcp_sock *tp = tcp_sk(sk);
4582 int avail = tp->rcv_nxt - tp->copied_seq;
4583
4584 if (avail < sk->sk_rcvlowat && !sock_flag(sk, SOCK_DONE))
4585 return;
4586
4587 sk->sk_data_ready(sk);
4588}
4589
4579static void tcp_data_queue(struct sock *sk, struct sk_buff *skb) 4590static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
4580{ 4591{
4581 struct tcp_sock *tp = tcp_sk(sk); 4592 struct tcp_sock *tp = tcp_sk(sk);
@@ -4633,7 +4644,7 @@ queue_and_out:
4633 if (eaten > 0) 4644 if (eaten > 0)
4634 kfree_skb_partial(skb, fragstolen); 4645 kfree_skb_partial(skb, fragstolen);
4635 if (!sock_flag(sk, SOCK_DEAD)) 4646 if (!sock_flag(sk, SOCK_DEAD))
4636 sk->sk_data_ready(sk); 4647 tcp_data_ready(sk);
4637 return; 4648 return;
4638 } 4649 }
4639 4650
@@ -5434,7 +5445,7 @@ void tcp_rcv_established(struct sock *sk, struct sk_buff *skb,
5434no_ack: 5445no_ack:
5435 if (eaten) 5446 if (eaten)
5436 kfree_skb_partial(skb, fragstolen); 5447 kfree_skb_partial(skb, fragstolen);
5437 sk->sk_data_ready(sk); 5448 tcp_data_ready(sk);
5438 return; 5449 return;
5439 } 5450 }
5440 } 5451 }