@@ -1524,8 +1524,8 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev,
15241524 goto out_encap ;
15251525 }
15261526
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 );
15291529 dev -> priv_destructor = gtp_destructor ;
15301530
15311531 netdev_dbg (dev , "registered new GTP interface\n" );
@@ -1551,7 +1551,7 @@ static void gtp_dellink(struct net_device *dev, struct list_head *head)
15511551 hlist_for_each_entry_safe (pctx , next , & gtp -> tid_hash [i ], hlist_tid )
15521552 pdp_context_delete (pctx );
15531553
1554- list_del_rcu (& gtp -> list );
1554+ list_del (& gtp -> list );
15551555 unregister_netdevice_queue (dev , head );
15561556}
15571557
@@ -2271,16 +2271,19 @@ static int gtp_genl_dump_pdp(struct sk_buff *skb,
22712271 struct gtp_dev * last_gtp = (struct gtp_dev * )cb -> args [2 ], * gtp ;
22722272 int i , j , bucket = cb -> args [0 ], skip = cb -> args [1 ];
22732273 struct net * net = sock_net (skb -> sk );
2274+ struct net_device * dev ;
22742275 struct pdp_ctx * pctx ;
2275- struct gtp_net * gn ;
2276-
2277- gn = net_generic (net , gtp_net_id );
22782276
22792277 if (cb -> args [4 ])
22802278 return 0 ;
22812279
22822280 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+
22842287 if (last_gtp && last_gtp != gtp )
22852288 continue ;
22862289 else
@@ -2475,9 +2478,14 @@ static void __net_exit gtp_net_exit_batch_rtnl(struct list_head *net_list,
24752478
24762479 list_for_each_entry (net , net_list , exit_list ) {
24772480 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 );
24792487
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 )
24812489 gtp_dellink (gtp -> dev , dev_to_kill );
24822490 }
24832491}
0 commit comments