@@ -1524,8 +1524,8 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev,
1524
1524
goto out_encap ;
1525
1525
}
1526
1526
1527
- gn = net_generic (dev_net ( dev ) , gtp_net_id );
1528
- list_add_rcu (& gtp -> list , & gn -> gtp_dev_list );
1527
+ gn = net_generic (src_net , gtp_net_id );
1528
+ list_add (& gtp -> list , & gn -> gtp_dev_list );
1529
1529
dev -> priv_destructor = gtp_destructor ;
1530
1530
1531
1531
netdev_dbg (dev , "registered new GTP interface\n" );
@@ -1551,7 +1551,7 @@ static void gtp_dellink(struct net_device *dev, struct list_head *head)
1551
1551
hlist_for_each_entry_safe (pctx , next , & gtp -> tid_hash [i ], hlist_tid )
1552
1552
pdp_context_delete (pctx );
1553
1553
1554
- list_del_rcu (& gtp -> list );
1554
+ list_del (& gtp -> list );
1555
1555
unregister_netdevice_queue (dev , head );
1556
1556
}
1557
1557
@@ -2271,16 +2271,19 @@ static int gtp_genl_dump_pdp(struct sk_buff *skb,
2271
2271
struct gtp_dev * last_gtp = (struct gtp_dev * )cb -> args [2 ], * gtp ;
2272
2272
int i , j , bucket = cb -> args [0 ], skip = cb -> args [1 ];
2273
2273
struct net * net = sock_net (skb -> sk );
2274
+ struct net_device * dev ;
2274
2275
struct pdp_ctx * pctx ;
2275
- struct gtp_net * gn ;
2276
-
2277
- gn = net_generic (net , gtp_net_id );
2278
2276
2279
2277
if (cb -> args [4 ])
2280
2278
return 0 ;
2281
2279
2282
2280
rcu_read_lock ();
2283
- list_for_each_entry_rcu (gtp , & gn -> gtp_dev_list , list ) {
2281
+ for_each_netdev_rcu (net , dev ) {
2282
+ if (dev -> rtnl_link_ops != & gtp_link_ops )
2283
+ continue ;
2284
+
2285
+ gtp = netdev_priv (dev );
2286
+
2284
2287
if (last_gtp && last_gtp != gtp )
2285
2288
continue ;
2286
2289
else
@@ -2475,9 +2478,14 @@ static void __net_exit gtp_net_exit_batch_rtnl(struct list_head *net_list,
2475
2478
2476
2479
list_for_each_entry (net , net_list , exit_list ) {
2477
2480
struct gtp_net * gn = net_generic (net , gtp_net_id );
2478
- struct gtp_dev * gtp ;
2481
+ struct gtp_dev * gtp , * gtp_next ;
2482
+ struct net_device * dev ;
2483
+
2484
+ for_each_netdev (net , dev )
2485
+ if (dev -> rtnl_link_ops == & gtp_link_ops )
2486
+ gtp_dellink (dev , dev_to_kill );
2479
2487
2480
- list_for_each_entry (gtp , & gn -> gtp_dev_list , list )
2488
+ list_for_each_entry_safe (gtp , gtp_next , & gn -> gtp_dev_list , list )
2481
2489
gtp_dellink (gtp -> dev , dev_to_kill );
2482
2490
}
2483
2491
}
0 commit comments