diff options
author | Denis V. Lunev <den@openvz.org> | 2007-10-11 00:12:58 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-10-11 00:12:58 -0400 |
commit | 1536cc0d55a2820b71daf912060fe43ec15630c2 (patch) | |
tree | 0561a25ba3623e987fb801da529ea7c2270f0d11 /net/core | |
parent | d1ec3b772233826bf156284170632563790dbabf (diff) |
[NET]: rtnl_unlock cleanups
There is no need to process outstanding netlink user->kernel packets
during rtnl_unlock now. There is no rtnl_trylock in the rtnetlink_rcv
anymore.
Normal code path is the following:
netlink_sendmsg
netlink_unicast
netlink_sendskb
skb_queue_tail
netlink_data_ready
rtnetlink_rcv
mutex_lock(&rtnl_mutex);
netlink_run_queue(sk, qlen, &rtnetlink_rcv_msg);
mutex_unlock(&rtnl_mutex);
So, it is possible, that packets can be present in the rtnl->sk_receive_queue
during rtnl_unlock, but there is no need to process them at that moment as
rtnetlink_rcv for that packet is pending.
Signed-off-by: Denis V. Lunev <den@openvz.org>
Acked-by: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/rtnetlink.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 739fbad15c6..471d2d9f8ea 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
@@ -75,8 +75,6 @@ void __rtnl_unlock(void) | |||
75 | void rtnl_unlock(void) | 75 | void rtnl_unlock(void) |
76 | { | 76 | { |
77 | mutex_unlock(&rtnl_mutex); | 77 | mutex_unlock(&rtnl_mutex); |
78 | if (rtnl && rtnl->sk_receive_queue.qlen) | ||
79 | rtnl->sk_data_ready(rtnl, 0); | ||
80 | netdev_run_todo(); | 78 | netdev_run_todo(); |
81 | } | 79 | } |
82 | 80 | ||
@@ -1319,11 +1317,9 @@ static void rtnetlink_rcv(struct sock *sk, int len) | |||
1319 | unsigned int qlen = 0; | 1317 | unsigned int qlen = 0; |
1320 | 1318 | ||
1321 | do { | 1319 | do { |
1322 | mutex_lock(&rtnl_mutex); | 1320 | rtnl_lock(); |
1323 | qlen = netlink_run_queue(sk, qlen, &rtnetlink_rcv_msg); | 1321 | qlen = netlink_run_queue(sk, qlen, &rtnetlink_rcv_msg); |
1324 | mutex_unlock(&rtnl_mutex); | 1322 | rtnl_unlock(); |
1325 | |||
1326 | netdev_run_todo(); | ||
1327 | } while (qlen); | 1323 | } while (qlen); |
1328 | } | 1324 | } |
1329 | 1325 | ||