diff options
Diffstat (limited to 'net/ipv6/ip6mr.c')
-rw-r--r-- | net/ipv6/ip6mr.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c index 228be551e9c1..a35d8fc55b04 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c | |||
@@ -398,10 +398,9 @@ static int pim6_rcv(struct sk_buff *skb) | |||
398 | skb->protocol = htons(ETH_P_IPV6); | 398 | skb->protocol = htons(ETH_P_IPV6); |
399 | skb->ip_summed = 0; | 399 | skb->ip_summed = 0; |
400 | skb->pkt_type = PACKET_HOST; | 400 | skb->pkt_type = PACKET_HOST; |
401 | dst_release(skb->dst); | 401 | skb_dst_drop(skb); |
402 | reg_dev->stats.rx_bytes += skb->len; | 402 | reg_dev->stats.rx_bytes += skb->len; |
403 | reg_dev->stats.rx_packets++; | 403 | reg_dev->stats.rx_packets++; |
404 | skb->dst = NULL; | ||
405 | nf_reset(skb); | 404 | nf_reset(skb); |
406 | netif_rx(skb); | 405 | netif_rx(skb); |
407 | dev_put(reg_dev); | 406 | dev_put(reg_dev); |
@@ -849,7 +848,7 @@ static int ip6mr_cache_report(struct net *net, struct sk_buff *pkt, mifi_t mifi, | |||
849 | ipv6_addr_copy(&msg->im6_src, &ipv6_hdr(pkt)->saddr); | 848 | ipv6_addr_copy(&msg->im6_src, &ipv6_hdr(pkt)->saddr); |
850 | ipv6_addr_copy(&msg->im6_dst, &ipv6_hdr(pkt)->daddr); | 849 | ipv6_addr_copy(&msg->im6_dst, &ipv6_hdr(pkt)->daddr); |
851 | 850 | ||
852 | skb->dst = dst_clone(pkt->dst); | 851 | skb_dst_set(skb, dst_clone(skb_dst(pkt))); |
853 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 852 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
854 | } | 853 | } |
855 | 854 | ||
@@ -1487,7 +1486,7 @@ int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg) | |||
1487 | 1486 | ||
1488 | static inline int ip6mr_forward2_finish(struct sk_buff *skb) | 1487 | static inline int ip6mr_forward2_finish(struct sk_buff *skb) |
1489 | { | 1488 | { |
1490 | IP6_INC_STATS_BH(dev_net(skb->dst->dev), ip6_dst_idev(skb->dst), | 1489 | IP6_INC_STATS_BH(dev_net(skb_dst(skb)->dev), ip6_dst_idev(skb_dst(skb)), |
1491 | IPSTATS_MIB_OUTFORWDATAGRAMS); | 1490 | IPSTATS_MIB_OUTFORWDATAGRAMS); |
1492 | return dst_output(skb); | 1491 | return dst_output(skb); |
1493 | } | 1492 | } |
@@ -1532,8 +1531,8 @@ static int ip6mr_forward2(struct sk_buff *skb, struct mfc6_cache *c, int vifi) | |||
1532 | if (!dst) | 1531 | if (!dst) |
1533 | goto out_free; | 1532 | goto out_free; |
1534 | 1533 | ||
1535 | dst_release(skb->dst); | 1534 | skb_dst_drop(skb); |
1536 | skb->dst = dst; | 1535 | skb_dst_set(skb, dst); |
1537 | 1536 | ||
1538 | /* | 1537 | /* |
1539 | * RFC1584 teaches, that DVMRP/PIM router must deliver packets locally | 1538 | * RFC1584 teaches, that DVMRP/PIM router must deliver packets locally |
@@ -1722,7 +1721,7 @@ int ip6mr_get_route(struct net *net, | |||
1722 | { | 1721 | { |
1723 | int err; | 1722 | int err; |
1724 | struct mfc6_cache *cache; | 1723 | struct mfc6_cache *cache; |
1725 | struct rt6_info *rt = (struct rt6_info *)skb->dst; | 1724 | struct rt6_info *rt = (struct rt6_info *)skb_dst(skb); |
1726 | 1725 | ||
1727 | read_lock(&mrt_lock); | 1726 | read_lock(&mrt_lock); |
1728 | cache = ip6mr_cache_find(net, &rt->rt6i_src.addr, &rt->rt6i_dst.addr); | 1727 | cache = ip6mr_cache_find(net, &rt->rt6i_src.addr, &rt->rt6i_dst.addr); |