net: suppress lockdep-RCU false positive in FIB trie.
[safe/jmp/linux-2.6] / net / phonet / pn_netlink.c
index 609e509..fe2e708 100644 (file)
@@ -131,8 +131,8 @@ static int getaddr_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
        int addr_idx = 0, addr_start_idx = cb->args[1];
 
        pndevs = phonet_device_list(sock_net(skb->sk));
-       spin_lock_bh(&pndevs->lock);
-       list_for_each_entry(pnd, &pndevs->list, list) {
+       rcu_read_lock();
+       list_for_each_entry_rcu(pnd, &pndevs->list, list) {
                u8 addr;
 
                if (dev_idx > dev_start_idx)
@@ -141,8 +141,7 @@ static int getaddr_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
                        continue;
 
                addr_idx = 0;
-               for (addr = find_first_bit(pnd->addrs, 64); addr < 64;
-                       addr = find_next_bit(pnd->addrs, 64, 1+addr)) {
+               for_each_set_bit(addr, pnd->addrs, 64) {
                        if (addr_idx++ < addr_start_idx)
                                continue;
 
@@ -154,7 +153,7 @@ static int getaddr_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
        }
 
 out:
-       spin_unlock_bh(&pndevs->lock);
+       rcu_read_unlock();
        cb->args[0] = dev_idx;
        cb->args[1] = addr_idx;