diff options
Diffstat (limited to 'net/decnet/dn_route.c')
-rw-r--r-- | net/decnet/dn_route.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c index 3b6400d17dc2..9bd45fcb3b8e 100644 --- a/net/decnet/dn_route.c +++ b/net/decnet/dn_route.c | |||
@@ -241,9 +241,11 @@ static int dn_dst_gc(struct dst_ops *ops) | |||
241 | */ | 241 | */ |
242 | static void dn_dst_update_pmtu(struct dst_entry *dst, u32 mtu) | 242 | static void dn_dst_update_pmtu(struct dst_entry *dst, u32 mtu) |
243 | { | 243 | { |
244 | struct neighbour *n = dst_get_neighbour(dst); | ||
244 | u32 min_mtu = 230; | 245 | u32 min_mtu = 230; |
245 | struct dn_dev *dn = dst->neighbour ? | 246 | struct dn_dev *dn; |
246 | rcu_dereference_raw(dst->neighbour->dev->dn_ptr) : NULL; | 247 | |
248 | dn = n ? rcu_dereference_raw(n->dev->dn_ptr) : NULL; | ||
247 | 249 | ||
248 | if (dn && dn->use_long == 0) | 250 | if (dn && dn->use_long == 0) |
249 | min_mtu -= 6; | 251 | min_mtu -= 6; |
@@ -708,7 +710,7 @@ out: | |||
708 | static int dn_to_neigh_output(struct sk_buff *skb) | 710 | static int dn_to_neigh_output(struct sk_buff *skb) |
709 | { | 711 | { |
710 | struct dst_entry *dst = skb_dst(skb); | 712 | struct dst_entry *dst = skb_dst(skb); |
711 | struct neighbour *n = dst->neighbour; | 713 | struct neighbour *n = dst_get_neighbour(dst); |
712 | 714 | ||
713 | return n->output(n, skb); | 715 | return n->output(n, skb); |
714 | } | 716 | } |
@@ -723,7 +725,7 @@ static int dn_output(struct sk_buff *skb) | |||
723 | 725 | ||
724 | int err = -EINVAL; | 726 | int err = -EINVAL; |
725 | 727 | ||
726 | if ((neigh = dst->neighbour) == NULL) | 728 | if ((neigh = dst_get_neighbour(dst)) == NULL) |
727 | goto error; | 729 | goto error; |
728 | 730 | ||
729 | skb->dev = dev; | 731 | skb->dev = dev; |
@@ -840,11 +842,11 @@ static int dn_rt_set_next_hop(struct dn_route *rt, struct dn_fib_res *res) | |||
840 | } | 842 | } |
841 | rt->rt_type = res->type; | 843 | rt->rt_type = res->type; |
842 | 844 | ||
843 | if (dev != NULL && rt->dst.neighbour == NULL) { | 845 | if (dev != NULL && dst_get_neighbour(&rt->dst) == NULL) { |
844 | n = __neigh_lookup_errno(&dn_neigh_table, &rt->rt_gateway, dev); | 846 | n = __neigh_lookup_errno(&dn_neigh_table, &rt->rt_gateway, dev); |
845 | if (IS_ERR(n)) | 847 | if (IS_ERR(n)) |
846 | return PTR_ERR(n); | 848 | return PTR_ERR(n); |
847 | rt->dst.neighbour = n; | 849 | dst_set_neighbour(&rt->dst, n); |
848 | } | 850 | } |
849 | 851 | ||
850 | if (dst_metric(&rt->dst, RTAX_MTU) > rt->dst.dev->mtu) | 852 | if (dst_metric(&rt->dst, RTAX_MTU) > rt->dst.dev->mtu) |
@@ -1151,7 +1153,7 @@ make_route: | |||
1151 | rt->rt_dst_map = fld.daddr; | 1153 | rt->rt_dst_map = fld.daddr; |
1152 | rt->rt_src_map = fld.saddr; | 1154 | rt->rt_src_map = fld.saddr; |
1153 | 1155 | ||
1154 | rt->dst.neighbour = neigh; | 1156 | dst_set_neighbour(&rt->dst, neigh); |
1155 | neigh = NULL; | 1157 | neigh = NULL; |
1156 | 1158 | ||
1157 | rt->dst.lastuse = jiffies; | 1159 | rt->dst.lastuse = jiffies; |
@@ -1423,7 +1425,7 @@ make_route: | |||
1423 | rt->fld.flowidn_iif = in_dev->ifindex; | 1425 | rt->fld.flowidn_iif = in_dev->ifindex; |
1424 | rt->fld.flowidn_mark = fld.flowidn_mark; | 1426 | rt->fld.flowidn_mark = fld.flowidn_mark; |
1425 | 1427 | ||
1426 | rt->dst.neighbour = neigh; | 1428 | dst_set_neighbour(&rt->dst, neigh); |
1427 | rt->dst.lastuse = jiffies; | 1429 | rt->dst.lastuse = jiffies; |
1428 | rt->dst.output = dn_rt_bug; | 1430 | rt->dst.output = dn_rt_bug; |
1429 | switch (res.type) { | 1431 | switch (res.type) { |