diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/core/pktgen.c | 5 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 14 |
2 files changed, 15 insertions, 4 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 7bae576ac115..4ad62d375373 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -3331,8 +3331,9 @@ static __inline__ void pktgen_xmit(struct pktgen_dev *pkt_dev) | |||
3331 | } | 3331 | } |
3332 | 3332 | ||
3333 | if ((netif_queue_stopped(odev) || | 3333 | if ((netif_queue_stopped(odev) || |
3334 | netif_subqueue_stopped(odev, pkt_dev->skb->queue_mapping)) || | 3334 | (pkt_dev->skb && |
3335 | need_resched()) { | 3335 | netif_subqueue_stopped(odev, pkt_dev->skb->queue_mapping))) || |
3336 | need_resched()) { | ||
3336 | idle_start = getCurUs(); | 3337 | idle_start = getCurUs(); |
3337 | 3338 | ||
3338 | if (!netif_running(odev)) { | 3339 | if (!netif_running(odev)) { |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 9785df37a65f..1ee72127462b 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -555,6 +555,16 @@ static void tcp_event_data_recv(struct sock *sk, struct sk_buff *skb) | |||
555 | tcp_grow_window(sk, skb); | 555 | tcp_grow_window(sk, skb); |
556 | } | 556 | } |
557 | 557 | ||
558 | static u32 tcp_rto_min(struct sock *sk) | ||
559 | { | ||
560 | struct dst_entry *dst = __sk_dst_get(sk); | ||
561 | u32 rto_min = TCP_RTO_MIN; | ||
562 | |||
563 | if (dst_metric_locked(dst, RTAX_RTO_MIN)) | ||
564 | rto_min = dst->metrics[RTAX_RTO_MIN-1]; | ||
565 | return rto_min; | ||
566 | } | ||
567 | |||
558 | /* Called to compute a smoothed rtt estimate. The data fed to this | 568 | /* Called to compute a smoothed rtt estimate. The data fed to this |
559 | * routine either comes from timestamps, or from segments that were | 569 | * routine either comes from timestamps, or from segments that were |
560 | * known _not_ to have been retransmitted [see Karn/Partridge | 570 | * known _not_ to have been retransmitted [see Karn/Partridge |
@@ -616,13 +626,13 @@ static void tcp_rtt_estimator(struct sock *sk, const __u32 mrtt) | |||
616 | if (tp->mdev_max < tp->rttvar) | 626 | if (tp->mdev_max < tp->rttvar) |
617 | tp->rttvar -= (tp->rttvar-tp->mdev_max)>>2; | 627 | tp->rttvar -= (tp->rttvar-tp->mdev_max)>>2; |
618 | tp->rtt_seq = tp->snd_nxt; | 628 | tp->rtt_seq = tp->snd_nxt; |
619 | tp->mdev_max = TCP_RTO_MIN; | 629 | tp->mdev_max = tcp_rto_min(sk); |
620 | } | 630 | } |
621 | } else { | 631 | } else { |
622 | /* no previous measure. */ | 632 | /* no previous measure. */ |
623 | tp->srtt = m<<3; /* take the measured time to be rtt */ | 633 | tp->srtt = m<<3; /* take the measured time to be rtt */ |
624 | tp->mdev = m<<1; /* make sure rto = 3*rtt */ | 634 | tp->mdev = m<<1; /* make sure rto = 3*rtt */ |
625 | tp->mdev_max = tp->rttvar = max(tp->mdev, TCP_RTO_MIN); | 635 | tp->mdev_max = tp->rttvar = max(tp->mdev, tcp_rto_min(sk)); |
626 | tp->rtt_seq = tp->snd_nxt; | 636 | tp->rtt_seq = tp->snd_nxt; |
627 | } | 637 | } |
628 | } | 638 | } |