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 | |
| 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>
| -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 739fbad15c6a..471d2d9f8eae 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 | ||
