diff options
author | stephen hemminger <shemminger@vyatta.com> | 2009-11-10 08:54:49 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-11-11 07:26:30 +0100 |
commit | f1e9016da6d0f16551d90085758ae45d26826118 (patch) | |
tree | c68bd66565e2e78704cfc366ff022adaca75be55 /net/sched | |
parent | vlan: eliminate use of dev_base_lock (diff) | |
download | linux-f1e9016da6d0f16551d90085758ae45d26826118.tar.xz linux-f1e9016da6d0f16551d90085758ae45d26826118.zip |
net: use rcu for network scheduler API
Use RCU to walk list of network devices in qdisc dump.
This could be optimized for large number of devices.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched')
-rw-r--r-- | net/sched/sch_api.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index 1acfd29cc826..876ba4bb6ae9 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c @@ -1279,9 +1279,10 @@ static int tc_dump_qdisc(struct sk_buff *skb, struct netlink_callback *cb) s_idx = cb->args[0]; s_q_idx = q_idx = cb->args[1]; - read_lock(&dev_base_lock); + + rcu_read_lock(); idx = 0; - for_each_netdev(&init_net, dev) { + for_each_netdev_rcu(&init_net, dev) { struct netdev_queue *dev_queue; if (idx < s_idx) @@ -1302,7 +1303,7 @@ cont: } done: - read_unlock(&dev_base_lock); + rcu_read_unlock(); cb->args[0] = idx; cb->args[1] = q_idx; |