aboutsummaryrefslogtreecommitdiffstats
path: root/net/phonet/pn_dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/phonet/pn_dev.c')
-rw-r--r--net/phonet/pn_dev.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/net/phonet/pn_dev.c b/net/phonet/pn_dev.c
index 56a6146ac94b..a58680016472 100644
--- a/net/phonet/pn_dev.c
+++ b/net/phonet/pn_dev.c
@@ -36,7 +36,7 @@
36 36
37struct phonet_routes { 37struct phonet_routes {
38 struct mutex lock; 38 struct mutex lock;
39 struct net_device *table[64]; 39 struct net_device __rcu *table[64];
40}; 40};
41 41
42struct phonet_net { 42struct phonet_net {
@@ -275,7 +275,7 @@ static void phonet_route_autodel(struct net_device *dev)
275 bitmap_zero(deleted, 64); 275 bitmap_zero(deleted, 64);
276 mutex_lock(&pnn->routes.lock); 276 mutex_lock(&pnn->routes.lock);
277 for (i = 0; i < 64; i++) 277 for (i = 0; i < 64; i++)
278 if (dev == pnn->routes.table[i]) { 278 if (rcu_access_pointer(pnn->routes.table[i]) == dev) {
279 RCU_INIT_POINTER(pnn->routes.table[i], NULL); 279 RCU_INIT_POINTER(pnn->routes.table[i], NULL);
280 set_bit(i, deleted); 280 set_bit(i, deleted);
281 } 281 }
@@ -388,7 +388,7 @@ int phonet_route_del(struct net_device *dev, u8 daddr)
388 388
389 daddr = daddr >> 2; 389 daddr = daddr >> 2;
390 mutex_lock(&routes->lock); 390 mutex_lock(&routes->lock);
391 if (dev == routes->table[daddr]) 391 if (rcu_access_pointer(routes->table[daddr]) == dev)
392 RCU_INIT_POINTER(routes->table[daddr], NULL); 392 RCU_INIT_POINTER(routes->table[daddr], NULL);
393 else 393 else
394 dev = NULL; 394 dev = NULL;