pkt_sched: do not use rcu in tc_dump_qdisc()
authorEric Dumazet <edumazet@google.com>
Tue, 11 Mar 2014 00:11:42 +0000 (17:11 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 12 Mar 2014 03:54:23 +0000 (23:54 -0400)
Like all rtnetlink dump operations, we hold RTNL in tc_dump_qdisc(),
so we do not need to use rcu protection to protect list of netdevices.

This will allow preemption to occur, thus reducing latencies.
Following patch adds explicit cond_resched() calls.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_api.c

index 1313145e3b8650853514552a0ddb371b4000b788..272292efa7f02a90c8a711bf000b3edfc9ce368b 100644 (file)
@@ -1434,9 +1434,9 @@ 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];
 
-       rcu_read_lock();
        idx = 0;
-       for_each_netdev_rcu(net, dev) {
+       ASSERT_RTNL();
+       for_each_netdev(net, dev) {
                struct netdev_queue *dev_queue;
 
                if (idx < s_idx)
@@ -1459,8 +1459,6 @@ cont:
        }
 
 done:
-       rcu_read_unlock();
-
        cb->args[0] = idx;
        cb->args[1] = q_idx;