@@ -40,9 +40,8 @@ struct net init_net = {
40
40
EXPORT_SYMBOL (init_net );
41
41
42
42
static bool init_net_initialized ;
43
- static unsigned nr_sync_pernet_ops ;
44
43
/*
45
- * net_sem: protects: pernet_list, net_generic_ids, nr_sync_pernet_ops,
44
+ * net_sem: protects: pernet_list, net_generic_ids,
46
45
* init_net_initialized and first_device pointer.
47
46
*/
48
47
DECLARE_RWSEM (net_sem );
@@ -406,7 +405,6 @@ struct net *copy_net_ns(unsigned long flags,
406
405
{
407
406
struct ucounts * ucounts ;
408
407
struct net * net ;
409
- unsigned write ;
410
408
int rv ;
411
409
412
410
if (!(flags & CLONE_NEWNET ))
@@ -424,25 +422,14 @@ struct net *copy_net_ns(unsigned long flags,
424
422
refcount_set (& net -> passive , 1 );
425
423
net -> ucounts = ucounts ;
426
424
get_user_ns (user_ns );
427
- again :
428
- write = READ_ONCE (nr_sync_pernet_ops );
429
- if (write )
430
- rv = down_write_killable (& net_sem );
431
- else
432
- rv = down_read_killable (& net_sem );
425
+
426
+ rv = down_read_killable (& net_sem );
433
427
if (rv < 0 )
434
428
goto put_userns ;
435
429
436
- if (!write && unlikely (READ_ONCE (nr_sync_pernet_ops ))) {
437
- up_read (& net_sem );
438
- goto again ;
439
- }
440
430
rv = setup_net (net , user_ns );
441
431
442
- if (write )
443
- up_write (& net_sem );
444
- else
445
- up_read (& net_sem );
432
+ up_read (& net_sem );
446
433
447
434
if (rv < 0 ) {
448
435
put_userns :
@@ -490,21 +477,11 @@ static void cleanup_net(struct work_struct *work)
490
477
struct net * net , * tmp , * last ;
491
478
struct llist_node * net_kill_list ;
492
479
LIST_HEAD (net_exit_list );
493
- unsigned write ;
494
480
495
481
/* Atomically snapshot the list of namespaces to cleanup */
496
482
net_kill_list = llist_del_all (& cleanup_list );
497
- again :
498
- write = READ_ONCE (nr_sync_pernet_ops );
499
- if (write )
500
- down_write (& net_sem );
501
- else
502
- down_read (& net_sem );
503
483
504
- if (!write && unlikely (READ_ONCE (nr_sync_pernet_ops ))) {
505
- up_read (& net_sem );
506
- goto again ;
507
- }
484
+ down_read (& net_sem );
508
485
509
486
/* Don't let anyone else find us. */
510
487
rtnl_lock ();
@@ -543,10 +520,7 @@ static void cleanup_net(struct work_struct *work)
543
520
list_for_each_entry_reverse (ops , & pernet_list , list )
544
521
ops_free_list (ops , & net_exit_list );
545
522
546
- if (write )
547
- up_write (& net_sem );
548
- else
549
- up_read (& net_sem );
523
+ up_read (& net_sem );
550
524
551
525
/* Ensure there are no outstanding rcu callbacks using this
552
526
* network namespace.
@@ -1006,18 +980,13 @@ static int register_pernet_operations(struct list_head *list,
1006
980
rcu_barrier ();
1007
981
if (ops -> id )
1008
982
ida_remove (& net_generic_ids , * ops -> id );
1009
- } else if (!ops -> async ) {
1010
- pr_info_once ("Pernet operations %ps are sync.\n" , ops );
1011
- nr_sync_pernet_ops ++ ;
1012
983
}
1013
984
1014
985
return error ;
1015
986
}
1016
987
1017
988
static void unregister_pernet_operations (struct pernet_operations * ops )
1018
989
{
1019
- if (!ops -> async )
1020
- BUG_ON (nr_sync_pernet_ops -- == 0 );
1021
990
__unregister_pernet_operations (ops );
1022
991
rcu_barrier ();
1023
992
if (ops -> id )
0 commit comments