diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r-- | net/ipv4/tcp_input.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 2776a8b01339..c1ce36237380 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -148,7 +148,7 @@ static void tcp_measure_rcv_mss(struct sock *sk, | |||
148 | * to handle super-low mtu links fairly. | 148 | * to handle super-low mtu links fairly. |
149 | */ | 149 | */ |
150 | (len >= TCP_MIN_MSS + sizeof(struct tcphdr) && | 150 | (len >= TCP_MIN_MSS + sizeof(struct tcphdr) && |
151 | !(tcp_flag_word(skb->h.th)&TCP_REMNANT))) { | 151 | !(tcp_flag_word(tcp_hdr(skb)) & TCP_REMNANT))) { |
152 | /* Subtract also invariant (if peer is RFC compliant), | 152 | /* Subtract also invariant (if peer is RFC compliant), |
153 | * tcp header plus fixed timestamp option length. | 153 | * tcp header plus fixed timestamp option length. |
154 | * Resulting "len" is MSS free of SACK jitter. | 154 | * Resulting "len" is MSS free of SACK jitter. |
@@ -2559,9 +2559,9 @@ static int tcp_ack_update_window(struct sock *sk, struct tcp_sock *tp, | |||
2559 | struct sk_buff *skb, u32 ack, u32 ack_seq) | 2559 | struct sk_buff *skb, u32 ack, u32 ack_seq) |
2560 | { | 2560 | { |
2561 | int flag = 0; | 2561 | int flag = 0; |
2562 | u32 nwin = ntohs(skb->h.th->window); | 2562 | u32 nwin = ntohs(tcp_hdr(skb)->window); |
2563 | 2563 | ||
2564 | if (likely(!skb->h.th->syn)) | 2564 | if (likely(!tcp_hdr(skb)->syn)) |
2565 | nwin <<= tp->rx_opt.snd_wscale; | 2565 | nwin <<= tp->rx_opt.snd_wscale; |
2566 | 2566 | ||
2567 | if (tcp_may_update_window(tp, ack, ack_seq, nwin)) { | 2567 | if (tcp_may_update_window(tp, ack, ack_seq, nwin)) { |
@@ -2766,7 +2766,7 @@ static int tcp_ack(struct sock *sk, struct sk_buff *skb, int flag) | |||
2766 | if (TCP_SKB_CB(skb)->sacked) | 2766 | if (TCP_SKB_CB(skb)->sacked) |
2767 | flag |= tcp_sacktag_write_queue(sk, skb, prior_snd_una); | 2767 | flag |= tcp_sacktag_write_queue(sk, skb, prior_snd_una); |
2768 | 2768 | ||
2769 | if (TCP_ECN_rcv_ecn_echo(tp, skb->h.th)) | 2769 | if (TCP_ECN_rcv_ecn_echo(tp, tcp_hdr(skb))) |
2770 | flag |= FLAG_ECE; | 2770 | flag |= FLAG_ECE; |
2771 | 2771 | ||
2772 | tcp_ca_event(sk, CA_EVENT_SLOW_ACK); | 2772 | tcp_ca_event(sk, CA_EVENT_SLOW_ACK); |
@@ -2833,7 +2833,7 @@ uninteresting_ack: | |||
2833 | void tcp_parse_options(struct sk_buff *skb, struct tcp_options_received *opt_rx, int estab) | 2833 | void tcp_parse_options(struct sk_buff *skb, struct tcp_options_received *opt_rx, int estab) |
2834 | { | 2834 | { |
2835 | unsigned char *ptr; | 2835 | unsigned char *ptr; |
2836 | struct tcphdr *th = skb->h.th; | 2836 | struct tcphdr *th = tcp_hdr(skb); |
2837 | int length=(th->doff*4)-sizeof(struct tcphdr); | 2837 | int length=(th->doff*4)-sizeof(struct tcphdr); |
2838 | 2838 | ||
2839 | ptr = (unsigned char *)(th + 1); | 2839 | ptr = (unsigned char *)(th + 1); |
@@ -2995,7 +2995,7 @@ static inline void tcp_replace_ts_recent(struct tcp_sock *tp, u32 seq) | |||
2995 | static int tcp_disordered_ack(const struct sock *sk, const struct sk_buff *skb) | 2995 | static int tcp_disordered_ack(const struct sock *sk, const struct sk_buff *skb) |
2996 | { | 2996 | { |
2997 | struct tcp_sock *tp = tcp_sk(sk); | 2997 | struct tcp_sock *tp = tcp_sk(sk); |
2998 | struct tcphdr *th = skb->h.th; | 2998 | struct tcphdr *th = tcp_hdr(skb); |
2999 | u32 seq = TCP_SKB_CB(skb)->seq; | 2999 | u32 seq = TCP_SKB_CB(skb)->seq; |
3000 | u32 ack = TCP_SKB_CB(skb)->ack_seq; | 3000 | u32 ack = TCP_SKB_CB(skb)->ack_seq; |
3001 | 3001 | ||
@@ -3357,8 +3357,8 @@ static void tcp_ofo_queue(struct sock *sk) | |||
3357 | __skb_unlink(skb, &tp->out_of_order_queue); | 3357 | __skb_unlink(skb, &tp->out_of_order_queue); |
3358 | __skb_queue_tail(&sk->sk_receive_queue, skb); | 3358 | __skb_queue_tail(&sk->sk_receive_queue, skb); |
3359 | tp->rcv_nxt = TCP_SKB_CB(skb)->end_seq; | 3359 | tp->rcv_nxt = TCP_SKB_CB(skb)->end_seq; |
3360 | if (skb->h.th->fin) | 3360 | if (tcp_hdr(skb)->fin) |
3361 | tcp_fin(skb, sk, skb->h.th); | 3361 | tcp_fin(skb, sk, tcp_hdr(skb)); |
3362 | } | 3362 | } |
3363 | } | 3363 | } |
3364 | 3364 | ||
@@ -3366,7 +3366,7 @@ static int tcp_prune_queue(struct sock *sk); | |||
3366 | 3366 | ||
3367 | static void tcp_data_queue(struct sock *sk, struct sk_buff *skb) | 3367 | static void tcp_data_queue(struct sock *sk, struct sk_buff *skb) |
3368 | { | 3368 | { |
3369 | struct tcphdr *th = skb->h.th; | 3369 | struct tcphdr *th = tcp_hdr(skb); |
3370 | struct tcp_sock *tp = tcp_sk(sk); | 3370 | struct tcp_sock *tp = tcp_sk(sk); |
3371 | int eaten = -1; | 3371 | int eaten = -1; |
3372 | 3372 | ||
@@ -3605,7 +3605,7 @@ tcp_collapse(struct sock *sk, struct sk_buff_head *list, | |||
3605 | * - bloated or contains data before "start" or | 3605 | * - bloated or contains data before "start" or |
3606 | * overlaps to the next one. | 3606 | * overlaps to the next one. |
3607 | */ | 3607 | */ |
3608 | if (!skb->h.th->syn && !skb->h.th->fin && | 3608 | if (!tcp_hdr(skb)->syn && !tcp_hdr(skb)->fin && |
3609 | (tcp_win_from_space(skb->truesize) > skb->len || | 3609 | (tcp_win_from_space(skb->truesize) > skb->len || |
3610 | before(TCP_SKB_CB(skb)->seq, start) || | 3610 | before(TCP_SKB_CB(skb)->seq, start) || |
3611 | (skb->next != tail && | 3611 | (skb->next != tail && |
@@ -3616,7 +3616,7 @@ tcp_collapse(struct sock *sk, struct sk_buff_head *list, | |||
3616 | start = TCP_SKB_CB(skb)->end_seq; | 3616 | start = TCP_SKB_CB(skb)->end_seq; |
3617 | skb = skb->next; | 3617 | skb = skb->next; |
3618 | } | 3618 | } |
3619 | if (skb == tail || skb->h.th->syn || skb->h.th->fin) | 3619 | if (skb == tail || tcp_hdr(skb)->syn || tcp_hdr(skb)->fin) |
3620 | return; | 3620 | return; |
3621 | 3621 | ||
3622 | while (before(start, end)) { | 3622 | while (before(start, end)) { |
@@ -3665,7 +3665,9 @@ tcp_collapse(struct sock *sk, struct sk_buff_head *list, | |||
3665 | __kfree_skb(skb); | 3665 | __kfree_skb(skb); |
3666 | NET_INC_STATS_BH(LINUX_MIB_TCPRCVCOLLAPSED); | 3666 | NET_INC_STATS_BH(LINUX_MIB_TCPRCVCOLLAPSED); |
3667 | skb = next; | 3667 | skb = next; |
3668 | if (skb == tail || skb->h.th->syn || skb->h.th->fin) | 3668 | if (skb == tail || |
3669 | tcp_hdr(skb)->syn || | ||
3670 | tcp_hdr(skb)->fin) | ||
3669 | return; | 3671 | return; |
3670 | } | 3672 | } |
3671 | } | 3673 | } |
@@ -4072,7 +4074,7 @@ static int tcp_dma_try_early_copy(struct sock *sk, struct sk_buff *skb, int hlen | |||
4072 | tcp_rcv_space_adjust(sk); | 4074 | tcp_rcv_space_adjust(sk); |
4073 | 4075 | ||
4074 | if ((tp->ucopy.len == 0) || | 4076 | if ((tp->ucopy.len == 0) || |
4075 | (tcp_flag_word(skb->h.th) & TCP_FLAG_PSH) || | 4077 | (tcp_flag_word(tcp_hdr(skb)) & TCP_FLAG_PSH) || |
4076 | (atomic_read(&sk->sk_rmem_alloc) > (sk->sk_rcvbuf >> 1))) { | 4078 | (atomic_read(&sk->sk_rmem_alloc) > (sk->sk_rcvbuf >> 1))) { |
4077 | tp->ucopy.wakeup = 1; | 4079 | tp->ucopy.wakeup = 1; |
4078 | sk->sk_data_ready(sk, 0); | 4080 | sk->sk_data_ready(sk, 0); |