IPVS netns shutdown/startup dead-lock
authorHans Schillstrom <hans@schillstrom.com>
Tue, 11 Oct 2011 01:54:35 +0000 (10:54 +0900)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 12 Oct 2011 16:32:15 +0000 (18:32 +0200)
commitae1d48b23d5e79efbcf0cef4f0ebb9742361af59
treeee357eda6a7a031be2756133a9f31be325081f21
parent98d9ae841ad620045d653fb05764e4a899f42dbd
IPVS netns shutdown/startup dead-lock

ip_vs_mutext is used by both netns shutdown code and startup
and both implicit uses sk_lock-AF_INET mutex.

cleanup CPU-1         startup CPU-2
ip_vs_dst_event()     ip_vs_genl_set_cmd()
 sk_lock-AF_INET     __ip_vs_mutex
                     sk_lock-AF_INET
__ip_vs_mutex
* DEAD LOCK *

A new mutex placed in ip_vs netns struct called sync_mutex is added.

Comments from Julian and Simon added.
This patch has been running for more than 3 month now and it seems to work.

Ver. 3
    IP_VS_SO_GET_DAEMON in do_ip_vs_get_ctl protected by sync_mutex
    instead of __ip_vs_mutex as sugested by Julian.

Signed-off-by: Hans Schillstrom <hans@schillstrom.com>
Acked-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/net/ip_vs.h
net/netfilter/ipvs/ip_vs_ctl.c
net/netfilter/ipvs/ip_vs_sync.c