net: Allow pernet_operations to be executed in parallel
authorKirill Tkhai <ktkhai@virtuozzo.com>
Tue, 13 Feb 2018 09:26:44 +0000 (12:26 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 13 Feb 2018 15:36:05 +0000 (10:36 -0500)
commit447cd7a0d7d1e5b4486e99cce289654fec9951e3
treef4fcd20f07114c51de077795088061e70704273b
parentbcab1ddd9b2b105390712a9c1605bdb20a7f9a03
net: Allow pernet_operations to be executed in parallel

This adds new pernet_operations::async flag to indicate operations,
which ->init(), ->exit() and ->exit_batch() methods are allowed
to be executed in parallel with the methods of any other pernet_operations.

When there are only asynchronous pernet_operations in the system,
net_mutex won't be taken for a net construction and destruction.

Also, remove BUG_ON(mutex_is_locked()) from net_assign_generic()
without replacing with the equivalent net_sem check, as there is
one more lockdep assert below.

v3: Add comment near net_mutex.

Suggested-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Acked-by: Andrei Vagin <avagin@virtuozzo.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/net_namespace.h
net/core/net_namespace.c