Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 5851
b: refs/heads/master
c: 35d59ef
h: refs/heads/master
i:
  5849: d19101b
  5847: 8492711
v: v3
  • Loading branch information
Herbert Xu authored and David S. Miller committed Aug 17, 2005
1 parent 5552fd8 commit 4ae6b88
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 20 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 97077c4a9868fce8ac151512cde5d24fc1144f24
refs/heads/master: 35d59efd105b3b7c1b5878dcc9d1749f41f9740f
39 changes: 20 additions & 19 deletions trunk/net/ipv4/tcp_output.c
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down Expand Up @@ -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);

Expand All @@ -994,25 +997,23 @@ 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,
mss_now, cwnd_quota);
limit = tcp_window_allows(tp, skb,
mss_now, cwnd_quota);

if (skb->len < limit) {
unsigned int trim = skb->len % mss_now;

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)))
break;
}

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

TCP_SKB_CB(skb)->when = tcp_time_stamp;

if (unlikely(tcp_transmit_skb(sk, skb_clone(skb, GFP_ATOMIC))))
Expand Down Expand Up @@ -1064,27 +1065,27 @@ 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,
mss_now, cwnd_quota);
limit = tcp_window_allows(tp, skb,
mss_now, cwnd_quota);

if (skb->len < limit) {
unsigned int trim = skb->len % 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)))
return;
}

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;

Expand Down

0 comments on commit 4ae6b88

Please sign in to comment.