diff options
Diffstat (limited to 'net/ipv4/route.c')
| -rw-r--r-- | net/ipv4/route.c | 11 | 
1 files changed, 9 insertions, 2 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index f1ac3efc552..11d1b2080a1 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -1816,7 +1816,12 @@ static unsigned int ipv4_default_advmss(const struct dst_entry *dst)  static unsigned int ipv4_mtu(const struct dst_entry *dst)  { -	unsigned int mtu = dst->dev->mtu; +	unsigned int mtu = dst_metric_raw(dst, RTAX_MTU); + +	if (mtu) +		return mtu; + +	mtu = dst->dev->mtu;  	if (unlikely(dst_metric_locked(dst, RTAX_MTU))) {  		const struct rtable *rt = (const struct rtable *) dst; @@ -2757,7 +2762,9 @@ static struct dst_entry *ipv4_blackhole_dst_check(struct dst_entry *dst, u32 coo  static unsigned int ipv4_blackhole_mtu(const struct dst_entry *dst)  { -	return dst->dev->mtu; +	unsigned int mtu = dst_metric_raw(dst, RTAX_MTU); + +	return mtu ? : dst->dev->mtu;  }  static void ipv4_rt_blackhole_update_pmtu(struct dst_entry *dst, u32 mtu)  |