From 1c1cb744851500e107daad6adb96d40a04bf6536 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Sun, 26 Jun 2005 15:31:51 -0700 Subject: [PATCH] --- yaml --- r: 3481 b: refs/heads/master c: d470e3b483dcf79c16463bc740738dca76a035a9 h: refs/heads/master i: 3479: d9d888426349bc9ca6c9057c0491c5b718690939 v: v3 --- [refs] | 2 +- trunk/net/netlink/af_netlink.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index e1421f2f82df..2898eeb9e902 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 32e9e25ef20789c24ffa1f41489a13932cf82c77 +refs/heads/master: d470e3b483dcf79c16463bc740738dca76a035a9 diff --git a/trunk/net/netlink/af_netlink.c b/trunk/net/netlink/af_netlink.c index 70bcd4744d93..fc456a7aaec3 100644 --- a/trunk/net/netlink/af_netlink.c +++ b/trunk/net/netlink/af_netlink.c @@ -315,8 +315,8 @@ static int netlink_insert(struct sock *sk, u32 pid) static void netlink_remove(struct sock *sk) { netlink_table_grab(); - nl_table[sk->sk_protocol].hash.entries--; - sk_del_node_init(sk); + if (sk_del_node_init(sk)) + nl_table[sk->sk_protocol].hash.entries--; if (nlk_sk(sk)->groups) __sk_del_bind_node(sk); netlink_table_ungrab(); @@ -429,7 +429,12 @@ static int netlink_autobind(struct socket *sock) err = netlink_insert(sk, pid); if (err == -EADDRINUSE) goto retry; - return 0; + + /* If 2 threads race to autobind, that is fine. */ + if (err == -EBUSY) + err = 0; + + return err; } static inline int netlink_capable(struct socket *sock, unsigned int flag)