forked from Minki/linux
ipv4: Fix inetpeer expire time information
As we update the learned pmtu informations on demand, we might report a nagative expiration time value to userspace if the pmtu informations are already expired and we have not send a packet to that inetpeer after expiration. With this patch we send a expire time of null to userspace after expiration until the next packet is send to that inetpeer. Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
20db93c340
commit
2bc8ca40f9
@ -2845,7 +2845,7 @@ static int rt_fill_info(struct net *net,
|
|||||||
struct rtable *rt = skb_rtable(skb);
|
struct rtable *rt = skb_rtable(skb);
|
||||||
struct rtmsg *r;
|
struct rtmsg *r;
|
||||||
struct nlmsghdr *nlh;
|
struct nlmsghdr *nlh;
|
||||||
long expires = 0;
|
unsigned long expires = 0;
|
||||||
const struct inet_peer *peer = rt->peer;
|
const struct inet_peer *peer = rt->peer;
|
||||||
u32 id = 0, ts = 0, tsage = 0, error;
|
u32 id = 0, ts = 0, tsage = 0, error;
|
||||||
|
|
||||||
@ -2902,8 +2902,12 @@ static int rt_fill_info(struct net *net,
|
|||||||
tsage = get_seconds() - peer->tcp_ts_stamp;
|
tsage = get_seconds() - peer->tcp_ts_stamp;
|
||||||
}
|
}
|
||||||
expires = ACCESS_ONCE(peer->pmtu_expires);
|
expires = ACCESS_ONCE(peer->pmtu_expires);
|
||||||
if (expires)
|
if (expires) {
|
||||||
expires -= jiffies;
|
if (time_before(jiffies, expires))
|
||||||
|
expires -= jiffies;
|
||||||
|
else
|
||||||
|
expires = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rt_is_input_route(rt)) {
|
if (rt_is_input_route(rt)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user