@@ -206,8 +206,8 @@ static int pfcp_newlink(struct net *net, struct net_device *dev,
206
206
goto exit_del_pfcp_sock ;
207
207
}
208
208
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 );
211
211
212
212
netdev_dbg (dev , "registered new PFCP interface\n" );
213
213
@@ -224,7 +224,7 @@ static void pfcp_dellink(struct net_device *dev, struct list_head *head)
224
224
{
225
225
struct pfcp_dev * pfcp = netdev_priv (dev );
226
226
227
- list_del_rcu (& pfcp -> list );
227
+ list_del (& pfcp -> list );
228
228
unregister_netdevice_queue (dev , head );
229
229
}
230
230
@@ -247,11 +247,16 @@ static int __net_init pfcp_net_init(struct net *net)
247
247
static void __net_exit pfcp_net_exit (struct net * net )
248
248
{
249
249
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 ;
251
252
LIST_HEAD (list );
252
253
253
254
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 )
255
260
pfcp_dellink (pfcp -> dev , & list );
256
261
257
262
unregister_netdevice_many (& list );
0 commit comments