Message ID | 1345618109.5158.599.camel@edumazet-glaptop |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Hi, > From: Eric Dumazet <edumazet@google.com> > ip_rt_update_pmtu() calls dst_set_expires() to rearm a new expiration, > but dst_set_expires() does nothing because dst.expires is already set. > > It seems we want to set the expires field to a new value, regardless > of prior one. > > With help from Julian Anastasov. > > Reported-by: Sylvain Munaut <s.munaut@whatever-company.com> > Signed-off-by: Eric Dumazet <edumazet@google.com> > CC: Julian Anastasov <ja@ssi.bg> Tested-by: Sylvain Munaut <s.munaut@whatever-company.com> I confirm this corrects the issue for me. I tested this on 3 machines with 2 different hw config that all previously exhibited the issue short after boot and now they've been running with this version of the patch for hours without problems. @Eric: Thanks for looking into this. Cheers, Sylvain -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, 2012-08-22 at 12:16 +0200, Sylvain Munaut wrote: > Hi, > > > From: Eric Dumazet <edumazet@google.com> > > > ip_rt_update_pmtu() calls dst_set_expires() to rearm a new expiration, > > but dst_set_expires() does nothing because dst.expires is already set. > > > > It seems we want to set the expires field to a new value, regardless > > of prior one. > > > > With help from Julian Anastasov. > > > > Reported-by: Sylvain Munaut <s.munaut@whatever-company.com> > > Signed-off-by: Eric Dumazet <edumazet@google.com> > > CC: Julian Anastasov <ja@ssi.bg> > > Tested-by: Sylvain Munaut <s.munaut@whatever-company.com> > > I confirm this corrects the issue for me. I tested this on 3 machines > with 2 different hw config that all previously exhibited the issue > short after boot and now they've been running with this version of the > patch for hours without problems. > > @Eric: Thanks for looking into this. Thans Sylvain for being an early tester of bleeding edge kernel ! -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, 2012-08-22 at 12:21 +0200, Eric Dumazet wrote:
> Thans Sylvain for being an early tester of bleeding edge kernel !
Oh well, I meant to say Thanks ;)
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Wed, 22 Aug 2012 08:48:29 +0200 > From: Eric Dumazet <edumazet@google.com> > > Sylvain Munault reported following info : > > - TCP connection get "stuck" with data in send queue when doing > "large" transfers ( like typing 'ps ax' on a ssh connection ) > - Only happens on path where the PMTU is lower than the MTU of > the interface > - Is not present right after boot, it only appears 10-20min after > boot or so. (and that's inside the _same_ TCP connection, it works > fine at first and then in the same ssh session, it'll get stuck) > - Definitely seems related to fragments somehow since I see a router > sending ICMP message saying fragmentation is needed. > - Exact same setup works fine with kernel 3.5.1 > > Problem happens when the 10 minutes (ip_rt_mtu_expires) expiration > period is over. > > ip_rt_update_pmtu() calls dst_set_expires() to rearm a new expiration, > but dst_set_expires() does nothing because dst.expires is already set. > > It seems we want to set the expires field to a new value, regardless > of prior one. > > With help from Julian Anastasov. > > Reported-by: Sylvain Munaut <s.munaut@whatever-company.com> > Signed-off-by: Eric Dumazet <edumazet@google.com> > CC: Julian Anastasov <ja@ssi.bg> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index e4ba974..8d6d320 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -956,7 +956,7 @@ static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk, dst->obsolete = DST_OBSOLETE_KILL; } else { rt->rt_pmtu = mtu; - dst_set_expires(&rt->dst, ip_rt_mtu_expires); + rt->dst.expires = max(1UL, jiffies + ip_rt_mtu_expires); } }