diff options
| author | David S. Miller <davem@nuts.ninka.net> | 2003-05-19 09:23:57 -0700 |
|---|---|---|
| committer | David S. Miller <davem@nuts.ninka.net> | 2003-05-19 09:23:57 -0700 |
| commit | 13d6a99c44c8ff3298f4d447b321000ec4cd4d8d (patch) | |
| tree | f943d5126f299f78be722d0f134e28fb3a234bcf /net | |
| parent | ff936f4e8148e75b20595eda5de6d3a4bb55b631 (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.c | 11 | ||||
| -rw-r--r-- | net/appletalk/ddp.c | 3 | ||||
| -rw-r--r-- | net/bridge/br_if.c | 4 | ||||
| -rw-r--r-- | net/core/dev.c | 122 | ||||
| -rw-r--r-- | net/core/link_watch.c | 2 | ||||
| -rw-r--r-- | net/core/rtnetlink.c | 24 | ||||
| -rw-r--r-- | net/decnet/dn_dev.c | 6 | ||||
| -rw-r--r-- | net/ipv4/arp.c | 2 | ||||
| -rw-r--r-- | net/ipv4/devinet.c | 4 | ||||
| -rw-r--r-- | net/ipv4/fib_frontend.c | 2 | ||||
| -rw-r--r-- | net/ipv4/igmp.c | 4 | ||||
| -rw-r--r-- | net/ipv4/ipmr.c | 13 | ||||
| -rw-r--r-- | net/ipv6/addrconf.c | 10 | ||||
| -rw-r--r-- | net/ipv6/route.c | 2 | ||||
| -rw-r--r-- | net/llc/af_llc.c | 6 | ||||
| -rw-r--r-- | net/packet/af_packet.c | 6 | ||||
| -rw-r--r-- | net/sched/sch_teql.c | 7 |
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(); |
