diff options
Diffstat (limited to 'include/net/ip6_route.h')
-rw-r--r-- | include/net/ip6_route.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h index 1d09b46c1e48..5e192068e6cb 100644 --- a/include/net/ip6_route.h +++ b/include/net/ip6_route.h | |||
@@ -170,11 +170,13 @@ static inline bool ipv6_anycast_destination(const struct sk_buff *skb) | |||
170 | return rt->rt6i_flags & RTF_ANYCAST; | 170 | return rt->rt6i_flags & RTF_ANYCAST; |
171 | } | 171 | } |
172 | 172 | ||
173 | int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)); | 173 | int ip6_fragment(struct sock *sk, struct sk_buff *skb, |
174 | int (*output)(struct sock *, struct sk_buff *)); | ||
174 | 175 | ||
175 | static inline int ip6_skb_dst_mtu(struct sk_buff *skb) | 176 | static inline int ip6_skb_dst_mtu(struct sk_buff *skb) |
176 | { | 177 | { |
177 | struct ipv6_pinfo *np = skb->sk ? inet6_sk(skb->sk) : NULL; | 178 | struct ipv6_pinfo *np = skb->sk && !dev_recursion_level() ? |
179 | inet6_sk(skb->sk) : NULL; | ||
178 | 180 | ||
179 | return (np && np->pmtudisc >= IPV6_PMTUDISC_PROBE) ? | 181 | return (np && np->pmtudisc >= IPV6_PMTUDISC_PROBE) ? |
180 | skb_dst(skb)->dev->mtu : dst_mtu(skb_dst(skb)); | 182 | skb_dst(skb)->dev->mtu : dst_mtu(skb_dst(skb)); |