]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/phonet/pn_netlink.c
Merge current mainline tree into linux-omap tree
[linux-2.6-omap-h63xx.git] / net / phonet / pn_netlink.c
index 242fe8f8c322d5fb048d737a46d36b99797f47aa..cec4e59516817ecc0b64a8fdaa04c11de52aa0b2 100644 (file)
@@ -47,8 +47,9 @@ static void rtmsg_notify(int event, struct net_device *dev, u8 addr)
                kfree_skb(skb);
                goto errout;
        }
-       err = rtnl_notify(skb, dev_net(dev), 0,
-                         RTNLGRP_PHONET_IFADDR, NULL, GFP_KERNEL);
+       rtnl_notify(skb, dev_net(dev), 0,
+                   RTNLGRP_PHONET_IFADDR, NULL, GFP_KERNEL);
+       return;
 errout:
        if (err < 0)
                rtnl_set_sk_err(dev_net(dev), RTNLGRP_PHONET_IFADDR, err);
@@ -123,17 +124,16 @@ nla_put_failure:
 
 static int getaddr_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = sock_net(skb->sk);
+       struct phonet_device_list *pndevs;
        struct phonet_device *pnd;
        int dev_idx = 0, dev_start_idx = cb->args[0];
        int addr_idx = 0, addr_start_idx = cb->args[1];
 
-       spin_lock_bh(&pndevs.lock);
-       list_for_each_entry(pnd, &pndevs.list, list) {
+       pndevs = phonet_device_list(sock_net(skb->sk));
+       spin_lock_bh(&pndevs->lock);
+       list_for_each_entry(pnd, &pndevs->list, list) {
                u8 addr;
 
-               if (!net_eq(dev_net(pnd->netdev), net))
-                       continue;
                if (dev_idx > dev_start_idx)
                        addr_start_idx = 0;
                if (dev_idx++ < dev_start_idx)
@@ -153,16 +153,21 @@ static int getaddr_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
        }
 
 out:
-       spin_unlock_bh(&pndevs.lock);
+       spin_unlock_bh(&pndevs->lock);
        cb->args[0] = dev_idx;
        cb->args[1] = addr_idx;
 
        return skb->len;
 }
 
-void __init phonet_netlink_register(void)
+int __init phonet_netlink_register(void)
 {
-       rtnl_register(PF_PHONET, RTM_NEWADDR, addr_doit, NULL);
-       rtnl_register(PF_PHONET, RTM_DELADDR, addr_doit, NULL);
-       rtnl_register(PF_PHONET, RTM_GETADDR, NULL, getaddr_dumpit);
+       int err = __rtnl_register(PF_PHONET, RTM_NEWADDR, addr_doit, NULL);
+       if (err)
+               return err;
+
+       /* Further __rtnl_register() cannot fail */
+       __rtnl_register(PF_PHONET, RTM_DELADDR, addr_doit, NULL);
+       __rtnl_register(PF_PHONET, RTM_GETADDR, NULL, getaddr_dumpit);
+       return 0;
 }