@@ -206,8 +206,8 @@ static int pfcp_newlink(struct net *net, struct net_device *dev,
206206 goto exit_del_pfcp_sock ;
207207 }
208208
209- pn = net_generic (dev_net ( dev ) , pfcp_net_id );
210- list_add_rcu (& pfcp -> list , & pn -> pfcp_dev_list );
209+ pn = net_generic (net , pfcp_net_id );
210+ list_add (& pfcp -> list , & pn -> pfcp_dev_list );
211211
212212 netdev_dbg (dev , "registered new PFCP interface\n" );
213213
@@ -224,7 +224,7 @@ static void pfcp_dellink(struct net_device *dev, struct list_head *head)
224224{
225225 struct pfcp_dev * pfcp = netdev_priv (dev );
226226
227- list_del_rcu (& pfcp -> list );
227+ list_del (& pfcp -> list );
228228 unregister_netdevice_queue (dev , head );
229229}
230230
@@ -247,11 +247,16 @@ static int __net_init pfcp_net_init(struct net *net)
247247static void __net_exit pfcp_net_exit (struct net * net )
248248{
249249 struct pfcp_net * pn = net_generic (net , pfcp_net_id );
250- struct pfcp_dev * pfcp ;
250+ struct pfcp_dev * pfcp , * pfcp_next ;
251+ struct net_device * dev ;
251252 LIST_HEAD (list );
252253
253254 rtnl_lock ();
254- list_for_each_entry (pfcp , & pn -> pfcp_dev_list , list )
255+ for_each_netdev (net , dev )
256+ if (dev -> rtnl_link_ops == & pfcp_link_ops )
257+ pfcp_dellink (dev , & list );
258+
259+ list_for_each_entry_safe (pfcp , pfcp_next , & pn -> pfcp_dev_list , list )
255260 pfcp_dellink (pfcp -> dev , & list );
256261
257262 unregister_netdevice_many (& list );
0 commit comments