Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ade6648b authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6

parents 2ad56496 fad87aca
Loading
Loading
Loading
Loading
+20 −19
Original line number Diff line number Diff line
@@ -861,7 +861,8 @@ static int tso_fragment(struct sock *sk, struct sk_buff *skb, unsigned int len,
	u16 flags;

	/* All of a TSO frame must be composed of paged data.  */
	BUG_ON(skb->len != skb->data_len);
	if (skb->len != skb->data_len)
		return tcp_fragment(sk, skb, len, mss_now);

	buff = sk_stream_alloc_pskb(sk, 0, 0, GFP_ATOMIC);
	if (unlikely(buff == NULL))
@@ -974,6 +975,8 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle)

	sent_pkts = 0;
	while ((skb = sk->sk_send_head)) {
		unsigned int limit;

		tso_segs = tcp_init_tso_segs(sk, skb, mss_now);
		BUG_ON(!tso_segs);

@@ -994,8 +997,9 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle)
				break;
		}

		limit = mss_now;
		if (tso_segs > 1) {
			u32 limit = tcp_window_allows(tp, skb,
			limit = tcp_window_allows(tp, skb,
						  mss_now, cwnd_quota);

			if (skb->len < limit) {
@@ -1004,14 +1008,11 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle)
				if (trim)
					limit = skb->len - trim;
			}
			if (skb->len > limit) {
				if (tso_fragment(sk, skb, limit, mss_now))
					break;
		}
		} else if (unlikely(skb->len > mss_now)) {
			if (unlikely(tcp_fragment(sk, skb,  mss_now, mss_now)))

		if (skb->len > limit &&
		    unlikely(tso_fragment(sk, skb, limit, mss_now)))
			break;
		}

		TCP_SKB_CB(skb)->when = tcp_time_stamp;

@@ -1064,10 +1065,13 @@ void tcp_push_one(struct sock *sk, unsigned int mss_now)
	cwnd_quota = tcp_snd_test(sk, skb, mss_now, TCP_NAGLE_PUSH);

	if (likely(cwnd_quota)) {
		unsigned int limit;

		BUG_ON(!tso_segs);

		limit = mss_now;
		if (tso_segs > 1) {
			u32 limit = tcp_window_allows(tp, skb,
			limit = tcp_window_allows(tp, skb,
						  mss_now, cwnd_quota);

			if (skb->len < limit) {
@@ -1076,14 +1080,11 @@ void tcp_push_one(struct sock *sk, unsigned int mss_now)
				if (trim)
					limit = skb->len - trim;
			}
			if (skb->len > limit) {
				if (unlikely(tso_fragment(sk, skb, limit, mss_now)))
					return;
		}
		} else if (unlikely(skb->len > mss_now)) {
			if (unlikely(tcp_fragment(sk, skb, mss_now, mss_now)))

		if (skb->len > limit &&
		    unlikely(tso_fragment(sk, skb, limit, mss_now)))
			return;
		}

		/* Send it out now. */
		TCP_SKB_CB(skb)->when = tcp_time_stamp;
+5 −4
Original line number Diff line number Diff line
@@ -198,13 +198,14 @@ static inline int ip6_input_finish(struct sk_buff *skb)
		if (!raw_sk) {
			if (xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
				IP6_INC_STATS_BH(IPSTATS_MIB_INUNKNOWNPROTOS);
				icmpv6_param_prob(skb, ICMPV6_UNK_NEXTHDR, nhoff);
				icmpv6_send(skb, ICMPV6_PARAMPROB,
				            ICMPV6_UNK_NEXTHDR, nhoff,
				            skb->dev);
			}
		} else {
		} else
			IP6_INC_STATS_BH(IPSTATS_MIB_INDELIVERS);
		kfree_skb(skb);
	}
	}
	rcu_read_unlock();
	return 0;

+2 −0
Original line number Diff line number Diff line
@@ -328,6 +328,8 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)

	if (skb->ip_summed != CHECKSUM_UNNECESSARY) {
		if (skb->ip_summed == CHECKSUM_HW) {
			skb_postpull_rcsum(skb, skb->nh.raw,
			                   skb->h.raw - skb->nh.raw);
			skb->ip_summed = CHECKSUM_UNNECESSARY;
			if (csum_ipv6_magic(&skb->nh.ipv6h->saddr,
					    &skb->nh.ipv6h->daddr,