diff --git a/package/broadcom-wl/Makefile b/package/broadcom-wl/Makefile index aaf6083ee..6b68b84c2 100644 --- a/package/broadcom-wl/Makefile +++ b/package/broadcom-wl/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2006-2010 OpenWrt.org +# Copyright (C) 2006-2011 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -10,7 +10,7 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=broadcom-wl PKG_VERSION:=4.150.10.5.3 -PKG_RELEASE:=7 +PKG_RELEASE:=8 WLC_VERSION:=0.2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 diff --git a/package/broadcom-wl/src/wlcompat/wlcompat.c b/package/broadcom-wl/src/wlcompat/wlcompat.c index 1b5dd78e1..95e700d4e 100644 --- a/package/broadcom-wl/src/wlcompat/wlcompat.c +++ b/package/broadcom-wl/src/wlcompat/wlcompat.c @@ -38,7 +38,7 @@ #include char buf[WLC_IOCTL_MAXLEN]; -static struct net_device *dev; +static struct net_device *dev = NULL; #ifndef DEBUG static int random = 1; #endif @@ -981,10 +981,15 @@ static int __init wlcompat_init() int found = 0, i; char devname[4] = "wl0"; + /* calling dev_get_by_name() will inc the open_counter in dev + * we must put it back with dev_put() when we are finished to dec the counter */ while (!found && (dev = dev_get_by_name(devname))) { if ((wl_ioctl(dev, WLC_GET_MAGIC, &i, sizeof(i)) == 0) && (i == WLC_IOCTL_MAGIC)) found = 1; - devname[2]++; + else { + dev_put(dev); + devname[2]++; + } } @@ -1026,6 +1031,9 @@ static void __exit wlcompat_exit() dev->wireless_handlers = NULL; #endif dev->do_ioctl = old_ioctl; + + dev_put(dev); + return; }