diff options
Diffstat (limited to 'net/ipv4/route.c')
-rw-r--r-- | net/ipv4/route.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index d62b05d33384..4f11faa5c824 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -287,12 +287,12 @@ static struct rtable *rt_cache_get_first(struct seq_file *seq) | |||
287 | if (!rt_hash_table[st->bucket].chain) | 287 | if (!rt_hash_table[st->bucket].chain) |
288 | continue; | 288 | continue; |
289 | rcu_read_lock_bh(); | 289 | rcu_read_lock_bh(); |
290 | r = rcu_dereference(rt_hash_table[st->bucket].chain); | 290 | r = rcu_dereference_bh(rt_hash_table[st->bucket].chain); |
291 | while (r) { | 291 | while (r) { |
292 | if (dev_net(r->u.dst.dev) == seq_file_net(seq) && | 292 | if (dev_net(r->u.dst.dev) == seq_file_net(seq) && |
293 | r->rt_genid == st->genid) | 293 | r->rt_genid == st->genid) |
294 | return r; | 294 | return r; |
295 | r = rcu_dereference(r->u.dst.rt_next); | 295 | r = rcu_dereference_bh(r->u.dst.rt_next); |
296 | } | 296 | } |
297 | rcu_read_unlock_bh(); | 297 | rcu_read_unlock_bh(); |
298 | } | 298 | } |
@@ -314,7 +314,7 @@ static struct rtable *__rt_cache_get_next(struct seq_file *seq, | |||
314 | rcu_read_lock_bh(); | 314 | rcu_read_lock_bh(); |
315 | r = rt_hash_table[st->bucket].chain; | 315 | r = rt_hash_table[st->bucket].chain; |
316 | } | 316 | } |
317 | return rcu_dereference(r); | 317 | return rcu_dereference_bh(r); |
318 | } | 318 | } |
319 | 319 | ||
320 | static struct rtable *rt_cache_get_next(struct seq_file *seq, | 320 | static struct rtable *rt_cache_get_next(struct seq_file *seq, |
@@ -2689,8 +2689,8 @@ int __ip_route_output_key(struct net *net, struct rtable **rp, | |||
2689 | hash = rt_hash(flp->fl4_dst, flp->fl4_src, flp->oif, rt_genid(net)); | 2689 | hash = rt_hash(flp->fl4_dst, flp->fl4_src, flp->oif, rt_genid(net)); |
2690 | 2690 | ||
2691 | rcu_read_lock_bh(); | 2691 | rcu_read_lock_bh(); |
2692 | for (rth = rcu_dereference(rt_hash_table[hash].chain); rth; | 2692 | for (rth = rcu_dereference_bh(rt_hash_table[hash].chain); rth; |
2693 | rth = rcu_dereference(rth->u.dst.rt_next)) { | 2693 | rth = rcu_dereference_bh(rth->u.dst.rt_next)) { |
2694 | if (rth->fl.fl4_dst == flp->fl4_dst && | 2694 | if (rth->fl.fl4_dst == flp->fl4_dst && |
2695 | rth->fl.fl4_src == flp->fl4_src && | 2695 | rth->fl.fl4_src == flp->fl4_src && |
2696 | rth->fl.iif == 0 && | 2696 | rth->fl.iif == 0 && |
@@ -3008,8 +3008,8 @@ int ip_rt_dump(struct sk_buff *skb, struct netlink_callback *cb) | |||
3008 | if (!rt_hash_table[h].chain) | 3008 | if (!rt_hash_table[h].chain) |
3009 | continue; | 3009 | continue; |
3010 | rcu_read_lock_bh(); | 3010 | rcu_read_lock_bh(); |
3011 | for (rt = rcu_dereference(rt_hash_table[h].chain), idx = 0; rt; | 3011 | for (rt = rcu_dereference_bh(rt_hash_table[h].chain), idx = 0; rt; |
3012 | rt = rcu_dereference(rt->u.dst.rt_next), idx++) { | 3012 | rt = rcu_dereference_bh(rt->u.dst.rt_next), idx++) { |
3013 | if (!net_eq(dev_net(rt->u.dst.dev), net) || idx < s_idx) | 3013 | if (!net_eq(dev_net(rt->u.dst.dev), net) || idx < s_idx) |
3014 | continue; | 3014 | continue; |
3015 | if (rt_is_expired(rt)) | 3015 | if (rt_is_expired(rt)) |