summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@nuts.ninka.net>2003-05-19 09:23:57 -0700
committerDavid S. Miller <davem@nuts.ninka.net>2003-05-19 09:23:57 -0700
commit13d6a99c44c8ff3298f4d447b321000ec4cd4d8d (patch)
treef943d5126f299f78be722d0f134e28fb3a234bcf /net
parentff936f4e8148e75b20595eda5de6d3a4bb55b631 (diff)
[NET]: More device register/unregister fixing.
Revert the rtnl_lock API change, it is totally unneeded. Instead we manage the todo work inside of net/core/dev.c Also, we have to move sbin hotplug invocation outside of the RTNL semaphore as well, both for register and unregister.
Diffstat (limited to 'net')
-rw-r--r--net/8021q/vlan.c11
-rw-r--r--net/appletalk/ddp.c3
-rw-r--r--net/bridge/br_if.c4
-rw-r--r--net/core/dev.c122
-rw-r--r--net/core/link_watch.c2
-rw-r--r--net/core/rtnetlink.c24
-rw-r--r--net/decnet/dn_dev.c6
-rw-r--r--net/ipv4/arp.c2
-rw-r--r--net/ipv4/devinet.c4
-rw-r--r--net/ipv4/fib_frontend.c2
-rw-r--r--net/ipv4/igmp.c4
-rw-r--r--net/ipv4/ipmr.c13
-rw-r--r--net/ipv6/addrconf.c10
-rw-r--r--net/ipv6/route.c2
-rw-r--r--net/llc/af_llc.c6
-rw-r--r--net/packet/af_packet.c6
-rw-r--r--net/sched/sch_teql.c7
17 files changed, 132 insertions, 96 deletions
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index ed7cf2acba21..b166e3ea34a8 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -112,9 +112,9 @@ static int __init vlan_proto_init(void)
*/
static void __exit vlan_cleanup_devices(void)
{
- struct net_device *dev, *nxt, *unregister_list;
+ struct net_device *dev, *nxt;
- rtnl_lock(&unregister_list);
+ rtnl_lock();
for (dev = dev_base; dev; dev = nxt) {
nxt = dev->next;
if (dev->priv_flags & IFF_802_1Q_VLAN) {
@@ -304,9 +304,7 @@ static int unregister_vlan_device(const char *vlan_IF_name)
ret = -EINVAL;
if (dev) {
if (dev->priv_flags & IFF_802_1Q_VLAN) {
- struct net_device *unregister_list;
-
- rtnl_lock(&unregister_list);
+ rtnl_lock();
ret = unregister_vlan_dev(VLAN_DEV_INFO(dev)->real_dev,
VLAN_DEV_INFO(dev)->vlan_id);
@@ -344,7 +342,6 @@ static struct net_device *register_vlan_device(const char *eth_IF_name,
unsigned short VLAN_ID)
{
struct vlan_group *grp;
- struct net_device *unregister_list;
struct net_device *new_dev;
struct net_device *real_dev; /* the ethernet device */
int malloc_size = 0;
@@ -388,7 +385,7 @@ static struct net_device *register_vlan_device(const char *eth_IF_name,
/* From this point on, all the data structures must remain
* consistent.
*/
- rtnl_lock(&unregister_list);
+ rtnl_lock();
/* The real device must be up and operating in order to
* assosciate a VLAN device with it.
diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
index 8990d16c307b..b86a34e5be6f 100644
--- a/net/appletalk/ddp.c
+++ b/net/appletalk/ddp.c
@@ -1700,7 +1700,6 @@ static int atalk_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
{
int rc = -EINVAL;
struct sock *sk = sock->sk;
- struct net_device *unregister_list;
switch (cmd) {
/* Protocol layer */
@@ -1749,7 +1748,7 @@ static int atalk_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
case SIOCDIFADDR:
case SIOCSARP: /* proxy AARP */
case SIOCDARP: /* proxy AARP */
- rtnl_lock(&unregister_list);
+ rtnl_lock();
rc = atif_ioctl(cmd, (void *)arg);
rtnl_unlock();
break;
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
index 69eb8eb13ce2..b98773255b90 100644
--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -272,9 +272,9 @@ void br_get_port_ifindices(struct net_bridge *br, int *ifindices)
void __exit br_cleanup_bridges(void)
{
- struct net_device *dev, *nxt, *unregister_list;
+ struct net_device *dev, *nxt;
- rtnl_lock(&unregister_list);
+ rtnl_lock();
for (dev = dev_base; dev; dev = nxt) {
nxt = dev->next;
if (dev->priv_flags & IFF_EBRIDGE) {
diff --git a/net/core/dev.c b/net/core/dev.c
index 36ebb13badd8..3315e6a1ff8c 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -179,9 +179,11 @@ static struct timer_list samp_timer = TIMER_INITIALIZER(sample_queue, 0, 0);
#endif
#ifdef CONFIG_HOTPLUG
-static int net_run_sbin_hotplug(struct net_device *dev, char *action);
+static void net_run_sbin_hotplug(struct net_device *dev, int is_register);
+static void net_run_hotplug_todo(void);
#else
-#define net_run_sbin_hotplug(dev, action) ({ 0; })
+#define net_run_sbin_hotplug(dev, is_register) do { } while (0)
+#define net_run_hotplug_todo() do { } while (0)
#endif
/*
@@ -2355,7 +2357,6 @@ static int dev_ifsioc(struct ifreq *ifr, unsigned int cmd)
int dev_ioctl(unsigned int cmd, void *arg)
{
- struct net_device *rtnl_list;
struct ifreq ifr;
int ret;
char *colon;
@@ -2427,7 +2428,7 @@ int dev_ioctl(unsigned int cmd, void *arg)
if (!capable(CAP_NET_ADMIN))
return -EPERM;
dev_load(ifr.ifr_name);
- rtnl_lock(&rtnl_list);
+ rtnl_lock();
ret = dev_ifsioc(&ifr, cmd);
rtnl_unlock();
if (!ret) {
@@ -2466,7 +2467,7 @@ int dev_ioctl(unsigned int cmd, void *arg)
if (!capable(CAP_NET_ADMIN))
return -EPERM;
dev_load(ifr.ifr_name);
- rtnl_lock(&rtnl_list);
+ rtnl_lock();
ret = dev_ifsioc(&ifr, cmd);
rtnl_unlock();
return ret;
@@ -2488,7 +2489,7 @@ int dev_ioctl(unsigned int cmd, void *arg)
(cmd >= SIOCDEVPRIVATE &&
cmd <= SIOCDEVPRIVATE + 15)) {
dev_load(ifr.ifr_name);
- rtnl_lock(&rtnl_list);
+ rtnl_lock();
ret = dev_ifsioc(&ifr, cmd);
rtnl_unlock();
if (!ret && copy_to_user(arg, &ifr,
@@ -2507,7 +2508,7 @@ int dev_ioctl(unsigned int cmd, void *arg)
return -EPERM;
}
dev_load(ifr.ifr_name);
- rtnl_lock(&rtnl_list);
+ rtnl_lock();
/* Follow me in net/core/wireless.c */
ret = wireless_process_ioctl(&ifr, cmd);
rtnl_unlock();
@@ -2567,6 +2568,7 @@ int register_netdevice(struct net_device *dev)
int ret;
BUG_ON(dev_boot_phase);
+ ASSERT_RTNL();
spin_lock_init(&dev->queue_lock);
spin_lock_init(&dev->xmit_lock);
@@ -2639,7 +2641,7 @@ int register_netdevice(struct net_device *dev)
/* Notify protocols, that a new device appeared. */
notifier_call_chain(&netdev_chain, NETDEV_REGISTER, dev);
- net_run_sbin_hotplug(dev, "register");
+ net_run_sbin_hotplug(dev, 1);
ret = 0;
out:
@@ -2730,11 +2732,13 @@ static void netdev_wait_allrefs(struct net_device *dev)
/* The sequence is:
*
- * struct net_device *local_list;
- *
- * rtnl_lock(&local_list);
- * unregister_netdevice(x1);
- * unregister_netdevice(x2);
+ * rtnl_lock();
+ * ...
+ * register_netdevyce(x1);
+ * register_netdevyce(x2);
+ * ...
+ * unregister_netdevice(y1);
+ * unregister_netdevice(y2);
* ...
* rtnl_unlock();
*
@@ -2745,21 +2749,32 @@ static void netdev_wait_allrefs(struct net_device *dev)
* 2) Since we run with the RTNL semaphore not held, we can sleep
* safely in order to wait for the netdev refcnt to drop to zero.
*/
-void netdev_wait_and_finish_unregister(struct net_device **devp)
+static spinlock_t unregister_todo_lock = SPIN_LOCK_UNLOCKED;
+static struct net_device *unregister_todo;
+
+void netdev_run_todo(void)
{
struct net_device *dev;
- while ((dev = *devp) != NULL) {
- *devp = dev->next;
- dev->next = NULL;
+ net_run_hotplug_todo();
+
+ spin_lock(&unregister_todo_lock);
+ dev = unregister_todo;
+ unregister_todo = NULL;
+ spin_unlock(&unregister_todo_lock);
- net_run_sbin_hotplug(dev, "unregister");
+ while (dev) {
+ struct net_device *next = dev->next;
+
+ dev->next = NULL;
netdev_wait_allrefs(dev);
BUG_ON(atomic_read(&dev->refcnt));
netdev_finish_unregister(dev);
+
+ dev = next;
}
}
@@ -2789,7 +2804,6 @@ int unregister_netdevice(struct net_device *dev)
BUG_ON(dev_boot_phase);
ASSERT_RTNL();
- BUG_ON(!rtnl_netdev_unregister_list);
/* If device is running, close it first. */
if (dev->flags & IFF_UP)
@@ -2803,8 +2817,6 @@ int unregister_netdevice(struct net_device *dev)
if (d == dev) {
write_lock_bh(&dev_base_lock);
*dp = d->next;
- d->next = *rtnl_netdev_unregister_list;
- *rtnl_netdev_unregister_list = d;
write_unlock_bh(&dev_base_lock);
break;
}
@@ -2824,7 +2836,7 @@ int unregister_netdevice(struct net_device *dev)
/* Shutdown queueing discipline. */
dev_shutdown(dev);
- net_run_sbin_hotplug(dev, "unregister");
+ net_run_sbin_hotplug(dev, 0);
/* Notify protocols, that we are about to destroy
this device. They should clean all the things.
@@ -2847,6 +2859,12 @@ int unregister_netdevice(struct net_device *dev)
#endif
kobject_unregister(&dev->kobj);
+
+ spin_lock(&unregister_todo_lock);
+ dev->next = unregister_todo;
+ unregister_todo = dev;
+ spin_unlock(&unregister_todo_lock);
+
dev_put(dev);
return 0;
}
@@ -3016,18 +3034,22 @@ subsys_initcall(net_dev_init);
#ifdef CONFIG_HOTPLUG
-/* Notify userspace when a netdevice event occurs,
- * by running '/sbin/hotplug net' with certain
- * environment variables set.
- */
+struct net_hotplug_todo {
+ struct net_hotplug_todo *next;
+ char ifname[IFNAMSIZ];
+ int is_register;
+};
+static spinlock_t net_hotplug_list_lock = SPIN_LOCK_UNLOCKED;
+static struct net_hotplug_todo *net_hotplug_list;
-static int net_run_sbin_hotplug(struct net_device *dev, char *action)
+static void net_run_hotplug_one(struct net_hotplug_todo *ent)
{
char *argv[3], *envp[5], ifname[12 + IFNAMSIZ], action_str[32];
int i;
- sprintf(ifname, "INTERFACE=%s", dev->name);
- sprintf(action_str, "ACTION=%s", action);
+ sprintf(ifname, "INTERFACE=%s", ent->ifname);
+ sprintf(action_str, "ACTION=%s",
+ (ent->is_register ? "register" : "unregister"));
i = 0;
argv[i++] = hotplug_path;
@@ -3042,6 +3064,46 @@ static int net_run_sbin_hotplug(struct net_device *dev, char *action)
envp [i++] = action_str;
envp [i] = 0;
- return call_usermodehelper(argv [0], argv, envp, 0);
+ call_usermodehelper(argv [0], argv, envp, 0);
+}
+
+static void net_run_hotplug_todo(void)
+{
+ struct net_hotplug_todo *list;
+
+ spin_lock(&net_hotplug_list_lock);
+ list = net_hotplug_list;
+ net_hotplug_list = NULL;
+ spin_unlock(&net_hotplug_list_lock);
+
+ while (list != NULL) {
+ struct net_hotplug_todo *next = list->next;
+
+ net_run_hotplug_one(list);
+
+ kfree(list);
+ list = next;
+ }
+}
+
+/* Notify userspace when a netdevice event occurs,
+ * by running '/sbin/hotplug net' with certain
+ * environment variables set.
+ */
+
+static void net_run_sbin_hotplug(struct net_device *dev, int is_register)
+{
+ struct net_hotplug_todo *ent = kmalloc(sizeof(*ent), GFP_KERNEL);
+
+ if (!ent)
+ return;
+
+ memcpy(ent->ifname, dev->name, IFNAMSIZ);
+ ent->is_register = is_register;
+
+ spin_lock(&net_hotplug_list_lock);
+ ent->next = net_hotplug_list;
+ net_hotplug_list = ent;
+ spin_unlock(&net_hotplug_list_lock);
}
#endif
diff --git a/net/core/link_watch.c b/net/core/link_watch.c
index dbe4562bb573..958385890b79 100644
--- a/net/core/link_watch.c
+++ b/net/core/link_watch.c
@@ -91,7 +91,7 @@ static void linkwatch_event(void *dummy)
linkwatch_nextevent = jiffies + HZ;
clear_bit(LW_RUNNING, &linkwatch_flags);
- rtnl_lock(NULL);
+ rtnl_lock();
linkwatch_run_queue();
rtnl_unlock();
}
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 5756d6794dba..37400a8c62e9 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -52,30 +52,18 @@
DECLARE_MUTEX(rtnl_sem);
-struct net_device **rtnl_netdev_unregister_list;
-
-void rtnl_lock(struct net_device **unregister_list)
+void rtnl_lock()
{
rtnl_shlock();
rtnl_exlock();
- BUG_ON(rtnl_netdev_unregister_list);
- if (unregister_list) {
- *unregister_list = NULL;
- rtnl_netdev_unregister_list = unregister_list;
- }
}
void rtnl_unlock(void)
{
- struct net_device **list = rtnl_netdev_unregister_list;
-
- rtnl_netdev_unregister_list = NULL;
-
rtnl_exunlock();
rtnl_shunlock();
- if (list)
- netdev_wait_and_finish_unregister(list);
+ netdev_run_todo();
}
int rtattr_parse(struct rtattr *tb[], int maxattr, struct rtattr *rta, int len)
@@ -498,13 +486,10 @@ static void rtnetlink_rcv(struct sock *sk, int len)
{
do {
struct sk_buff *skb;
- struct net_device *unregister_list;
if (rtnl_shlock_nowait())
return;
- rtnl_netdev_unregister_list = &unregister_list;
-
while ((skb = skb_dequeue(&sk->receive_queue)) != NULL) {
if (rtnetlink_rcv_skb(skb)) {
if (skb->len)
@@ -516,10 +501,9 @@ static void rtnetlink_rcv(struct sock *sk, int len)
kfree_skb(skb);
}
- rtnl_netdev_unregister_list = NULL;
- netdev_wait_and_finish_unregister(&unregister_list);
-
up(&rtnl_sem);
+
+ netdev_run_todo();
} while (rtnl && rtnl->receive_queue.qlen);
}
diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c
index 014af6985d3b..4711ac69f3d1 100644
--- a/net/decnet/dn_dev.c
+++ b/net/decnet/dn_dev.c
@@ -584,7 +584,7 @@ int dn_dev_ioctl(unsigned int cmd, void *arg)
return -EINVAL;
}
- rtnl_lock(NULL);
+ rtnl_lock();
if ((dev = __dev_get_by_name(ifr->ifr_name)) == NULL) {
ret = -ENODEV;
@@ -1258,7 +1258,7 @@ void dn_dev_devices_off(void)
{
struct net_device *dev;
- rtnl_lock(NULL);
+ rtnl_lock();
for(dev = dev_base; dev; dev = dev->next)
dn_dev_down(dev);
rtnl_unlock();
@@ -1269,7 +1269,7 @@ void dn_dev_devices_on(void)
{
struct net_device *dev;
- rtnl_lock(NULL);
+ rtnl_lock();
for(dev = dev_base; dev; dev = dev->next) {
if (dev->flags & IFF_UP)
dn_dev_up(dev);
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
index 41e81826c005..b1368d019c2b 100644
--- a/net/ipv4/arp.c
+++ b/net/ipv4/arp.c
@@ -1035,7 +1035,7 @@ int arp_ioctl(unsigned int cmd, void *arg)
if (!(r.arp_flags & ATF_NETMASK))
((struct sockaddr_in *)&r.arp_netmask)->sin_addr.s_addr =
htonl(0xFFFFFFFFUL);
- rtnl_lock(NULL);
+ rtnl_lock();
if (r.arp_dev[0]) {
err = -ENODEV;
if ((dev = __dev_get_by_name(r.arp_dev)) == NULL)
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index d092bbf1777b..c66cf0b5950b 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -493,7 +493,7 @@ int devinet_ioctl(unsigned int cmd, void *arg)
struct in_device *in_dev;
struct in_ifaddr **ifap = NULL;
struct in_ifaddr *ifa = NULL;
- struct net_device *dev, *unregister_list;
+ struct net_device *dev;
char *colon;
int ret = -EFAULT;
int tryaddrmatch = 0;
@@ -552,7 +552,7 @@ int devinet_ioctl(unsigned int cmd, void *arg)
goto out;
}
- rtnl_lock(&unregister_list);
+ rtnl_lock();
ret = -ENODEV;
if ((dev = __dev_get_by_name(ifr.ifr_name)) == NULL)
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index b2c1704f59b1..bc68ff57db9b 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -251,7 +251,7 @@ int ip_rt_ioctl(unsigned int cmd, void *arg)
return -EPERM;
if (copy_from_user(&r, arg, sizeof(struct rtentry)))
return -EFAULT;
- rtnl_lock(NULL);
+ rtnl_lock();
err = fib_convert_rtentry(cmd, &req.nlh, &req.rtm, &rta, &r);
if (err == 0) {
if (cmd == SIOCDELRT) {
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index e92e8bf4b96e..680ab028ad69 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -1650,7 +1650,7 @@ int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr)
struct inet_opt *inet = inet_sk(sk);
struct ip_mc_socklist *iml, **imlp;
- rtnl_lock(NULL);
+ rtnl_lock();
for (imlp = &inet->mc_list; (iml = *imlp) != NULL; imlp = &iml->next) {
if (iml->multi.imr_multiaddr.s_addr==imr->imr_multiaddr.s_addr &&
iml->multi.imr_address.s_addr==imr->imr_address.s_addr &&
@@ -2028,7 +2028,7 @@ void ip_mc_drop_socket(struct sock *sk)
if (inet->mc_list == NULL)
return;
- rtnl_lock(NULL);
+ rtnl_lock();
while ((iml = inet->mc_list) != NULL) {
struct in_device *in_dev;
inet->mc_list = iml->next;
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
index e9a57417f5b6..b6c5c1c872c4 100644
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
@@ -825,9 +825,7 @@ static void mroute_clean_tables(struct sock *sk)
static void mrtsock_destruct(struct sock *sk)
{
- struct net_device *unregister_list;
-
- rtnl_lock(&unregister_list);
+ rtnl_lock();
if (sk == mroute_socket) {
ipv4_devconf.mc_forwarding--;
@@ -852,7 +850,6 @@ int ip_mroute_setsockopt(struct sock *sk,int optname,char *optval,int optlen)
int ret;
struct vifctl vif;
struct mfcctl mfc;
- struct net_device *unregister_list;
if(optname!=MRT_INIT)
{
@@ -868,7 +865,7 @@ int ip_mroute_setsockopt(struct sock *sk,int optname,char *optval,int optlen)
if(optlen!=sizeof(int))
return -ENOPROTOOPT;
- rtnl_lock(NULL);
+ rtnl_lock();
if (mroute_socket) {
rtnl_unlock();
return -EADDRINUSE;
@@ -896,7 +893,7 @@ int ip_mroute_setsockopt(struct sock *sk,int optname,char *optval,int optlen)
return -EFAULT;
if(vif.vifc_vifi >= MAXVIFS)
return -ENFILE;
- rtnl_lock(&unregister_list);
+ rtnl_lock();
if (optname==MRT_ADD_VIF) {
ret = vif_add(&vif, sk==mroute_socket);
} else {
@@ -915,7 +912,7 @@ int ip_mroute_setsockopt(struct sock *sk,int optname,char *optval,int optlen)
return -EINVAL;
if (copy_from_user(&mfc,optval, sizeof(mfc)))
return -EFAULT;
- rtnl_lock(NULL);
+ rtnl_lock();
if (optname==MRT_DEL_MFC)
ret = ipmr_mfc_delete(&mfc);
else
@@ -940,7 +937,7 @@ int ip_mroute_setsockopt(struct sock *sk,int optname,char *optval,int optlen)
if(get_user(v,(int *)optval))
return -EFAULT;
v = (v)?1:0;
- rtnl_lock(NULL);
+ rtnl_lock();
ret = 0;
if (v != mroute_do_pim) {
mroute_do_pim = v;
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 2e848d529730..5eac36c4cc3e 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -1480,7 +1480,7 @@ int addrconf_set_dstaddr(void *arg)
struct net_device *dev;
int err = -EINVAL;
- rtnl_lock(NULL);
+ rtnl_lock();
err = -EFAULT;
if (copy_from_user(&ireq, arg, sizeof(struct in6_ifreq)))
@@ -1605,7 +1605,7 @@ int addrconf_add_ifaddr(void *arg)
if (copy_from_user(&ireq, arg, sizeof(struct in6_ifreq)))
return -EFAULT;
- rtnl_lock(NULL);
+ rtnl_lock();
err = inet6_addr_add(ireq.ifr6_ifindex, &ireq.ifr6_addr, ireq.ifr6_prefixlen);
rtnl_unlock();
return err;
@@ -1622,7 +1622,7 @@ int addrconf_del_ifaddr(void *arg)
if (copy_from_user(&ireq, arg, sizeof(struct in6_ifreq)))
return -EFAULT;
- rtnl_lock(NULL);
+ rtnl_lock();
err = inet6_addr_del(ireq.ifr6_ifindex, &ireq.ifr6_addr, ireq.ifr6_prefixlen);
rtnl_unlock();
return err;
@@ -2705,7 +2705,7 @@ void __init addrconf_init(void)
#ifdef MODULE
/* This takes sense only during module load. */
- rtnl_lock(NULL);
+ rtnl_lock();
for (dev = dev_base; dev; dev = dev->next) {
if (!(dev->flags&IFF_UP))
continue;
@@ -2754,7 +2754,7 @@ void addrconf_cleanup(void)
addrconf_sysctl_unregister(&ipv6_devconf);
#endif
- rtnl_lock(NULL);
+ rtnl_lock();
/*
* clean dev list.
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 9c458235043b..6b2ff60d42bf 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -1176,7 +1176,7 @@ int ipv6_route_ioctl(unsigned int cmd, void *arg)
if (err)
return -EFAULT;
- rtnl_lock(NULL);
+ rtnl_lock();
switch (cmd) {
case SIOCADDRT:
err = ip6_route_add(&rtmsg, NULL, NULL);
diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
index 18e48211c26e..c50d55b4765b 100644
--- a/net/llc/af_llc.c
+++ b/net/llc/af_llc.c
@@ -250,7 +250,7 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr)
goto out;
/* bind to a specific mac, optional. */
if (!llc_mac_null(addr->sllc_smac)) {
- rtnl_lock(NULL);
+ rtnl_lock();
dev = dev_getbyhwaddr(addr->sllc_arphrd, addr->sllc_smac);
rtnl_unlock();
rc = -ENETUNREACH;
@@ -414,7 +414,7 @@ static int llc_ui_connect(struct socket *sock, struct sockaddr *uaddr,
goto out;
}
if (!llc->dev) {
- rtnl_lock(NULL);
+ rtnl_lock();
dev = dev_getbyhwaddr(addr->sllc_arphrd, addr->sllc_smac);
rtnl_unlock();
if (!dev)
@@ -764,7 +764,7 @@ static int llc_ui_sendmsg(struct kiocb *iocb, struct socket *sock,
goto release;
}
if (!llc->dev) {
- rtnl_lock(NULL);
+ rtnl_lock();
dev = dev_getbyhwaddr(addr->sllc_arphrd, addr->sllc_smac);
rtnl_unlock();
rc = -ENETUNREACH;
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index c3e917a01f8e..a83a22015c04 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -1170,7 +1170,7 @@ static int packet_mc_add(struct sock *sk, struct packet_mreq *mreq)
struct net_device *dev;
int err;
- rtnl_lock(NULL);
+ rtnl_lock();
err = -ENODEV;
dev = __dev_get_by_index(mreq->mr_ifindex);
@@ -1217,7 +1217,7 @@ static int packet_mc_drop(struct sock *sk, struct packet_mreq *mreq)
{
struct packet_mclist *ml, **mlp;
- rtnl_lock(NULL);
+ rtnl_lock();
for (mlp = &pkt_sk(sk)->mclist; (ml = *mlp) != NULL; mlp = &ml->next) {
if (ml->ifindex == mreq->mr_ifindex &&
@@ -1250,7 +1250,7 @@ static void packet_flush_mclist(struct sock *sk)
if (!po->mclist)
return;
- rtnl_lock(NULL);
+ rtnl_lock();
while ((ml = po->mclist) != NULL) {
struct net_device *dev;
diff --git a/net/sched/sch_teql.c b/net/sched/sch_teql.c
index 7f936d52556c..667cfa0a72f7 100644
--- a/net/sched/sch_teql.c
+++ b/net/sched/sch_teql.c
@@ -456,10 +456,9 @@ int init_module(void)
int __init teql_init(void)
#endif
{
- struct net_device *unregister_list;
int err;
- rtnl_lock(&unregister_list);
+ rtnl_lock();
the_master.dev.priv = (void*)&the_master;
err = dev_alloc_name(&the_master.dev, "teql%d");
@@ -482,9 +481,7 @@ int __init teql_init(void)
#ifdef MODULE
void cleanup_module(void)
{
- struct net_device *unregister_list;
-
- rtnl_lock(&unregister_list);
+ rtnl_lock();
unregister_qdisc(&the_master.qops);
unregister_netdevice(&the_master.dev);
rtnl_unlock();