|
@@ -4611,14 +4611,12 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
|
|
|
|
|
|
__set_current_state(TASK_RUNNING);
|
|
|
|
|
|
- local_bh_enable();
|
|
|
if (!skb_copy_datagram_msg(skb, 0, tp->ucopy.msg, chunk)) {
|
|
|
tp->ucopy.len -= chunk;
|
|
|
tp->copied_seq += chunk;
|
|
|
eaten = (chunk == skb->len);
|
|
|
tcp_rcv_space_adjust(sk);
|
|
|
}
|
|
|
- local_bh_disable();
|
|
|
}
|
|
|
|
|
|
if (eaten <= 0) {
|
|
@@ -5134,7 +5132,6 @@ static int tcp_copy_to_iovec(struct sock *sk, struct sk_buff *skb, int hlen)
|
|
|
int chunk = skb->len - hlen;
|
|
|
int err;
|
|
|
|
|
|
- local_bh_enable();
|
|
|
if (skb_csum_unnecessary(skb))
|
|
|
err = skb_copy_datagram_msg(skb, hlen, tp->ucopy.msg, chunk);
|
|
|
else
|
|
@@ -5146,32 +5143,9 @@ static int tcp_copy_to_iovec(struct sock *sk, struct sk_buff *skb, int hlen)
|
|
|
tcp_rcv_space_adjust(sk);
|
|
|
}
|
|
|
|
|
|
- local_bh_disable();
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-static __sum16 __tcp_checksum_complete_user(struct sock *sk,
|
|
|
- struct sk_buff *skb)
|
|
|
-{
|
|
|
- __sum16 result;
|
|
|
-
|
|
|
- if (sock_owned_by_user(sk)) {
|
|
|
- local_bh_enable();
|
|
|
- result = __tcp_checksum_complete(skb);
|
|
|
- local_bh_disable();
|
|
|
- } else {
|
|
|
- result = __tcp_checksum_complete(skb);
|
|
|
- }
|
|
|
- return result;
|
|
|
-}
|
|
|
-
|
|
|
-static inline bool tcp_checksum_complete_user(struct sock *sk,
|
|
|
- struct sk_buff *skb)
|
|
|
-{
|
|
|
- return !skb_csum_unnecessary(skb) &&
|
|
|
- __tcp_checksum_complete_user(sk, skb);
|
|
|
-}
|
|
|
-
|
|
|
/* Does PAWS and seqno based validation of an incoming segment, flags will
|
|
|
* play significant role here.
|
|
|
*/
|
|
@@ -5386,7 +5360,7 @@ void tcp_rcv_established(struct sock *sk, struct sk_buff *skb,
|
|
|
}
|
|
|
}
|
|
|
if (!eaten) {
|
|
|
- if (tcp_checksum_complete_user(sk, skb))
|
|
|
+ if (tcp_checksum_complete(skb))
|
|
|
goto csum_error;
|
|
|
|
|
|
if ((int)skb->truesize > sk->sk_forward_alloc)
|
|
@@ -5430,7 +5404,7 @@ no_ack:
|
|
|
}
|
|
|
|
|
|
slow_path:
|
|
|
- if (len < (th->doff << 2) || tcp_checksum_complete_user(sk, skb))
|
|
|
+ if (len < (th->doff << 2) || tcp_checksum_complete(skb))
|
|
|
goto csum_error;
|
|
|
|
|
|
if (!th->ack && !th->rst && !th->syn)
|