[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1345567633.5158.534.camel@edumazet-glaptop>
Date: Tue, 21 Aug 2012 18:47:13 +0200
From: Eric Dumazet <eric.dumazet@...il.com>
To: Julian Anastasov <ja@....bg>
Cc: Sylvain Munaut <s.munaut@...tever-company.com>,
netdev@...r.kernel.org
Subject: Re: IP fragmentation broken in 3.6-rc ?
On Tue, 2012-08-21 at 19:34 +0300, Julian Anastasov wrote:
> Hello,
>
> On Tue, 21 Aug 2012, Eric Dumazet wrote:
>
> > Following patch should help :
> >
> > diff --git a/include/net/dst.h b/include/net/dst.h
> > index 621e351..a04aa37 100644
> > --- a/include/net/dst.h
> > +++ b/include/net/dst.h
> > @@ -435,7 +435,7 @@ static inline void dst_set_expires(struct dst_entry *dst, int timeout)
> > if (expires == 0)
> > expires = 1;
> >
>
> In theory, restart of PMTUD should not lead to
> fatal problems, we will get new MTUs. But with such
> change should be better, not much, because all MTU
> events will come at same time, later timer will expire
> and we will get again events from routers. The gain
> will be an increased period (with milliseconds to seconds)
> between PMTUD restarts. Compared to the 600-second timer,
> this should be gain below 1% in reduced traffic for PMTUD.
> Before now we started timer from first router, now we
> will start/update timer period after event from last router.
>
Sorry I dont really understand what you mean
> But ipv4_link_failure and ip6_link_failure want to stop
> this timer by setting it to NOW (0). May be we have to add
> also a !timeout check here or to leave the code as before?
>
> > - if (dst->expires == 0 || time_before(expires, dst->expires))
> > + if (dst->expires == 0 || time_after(expires, dst->expires))
> > dst->expires = expires;
> > }
>
> The original problem should be somewhere else, I think.
This patch fixed the problem for me.
My first patch was :
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index e4ba974..9858714 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -956,6 +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;
+ rt->dst.expires = 0;
dst_set_expires(&rt->dst, ip_rt_mtu_expires);
}
}
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists