Index: wlcompat/wlcompat.c
===================================================================
--- wlcompat/wlcompat.c	(revision 9980)
+++ wlcompat/wlcompat.c	(working copy)
@@ -39,7 +39,7 @@
 #include <wlioctl.h>
 
 char buf[WLC_IOCTL_MAXLEN];
-static struct net_device *dev;
+static struct net_device *dev = NULL;
 #ifndef DEBUG
 static int random = 1;
 #endif
@@ -982,10 +982,19 @@
 	int found = 0, i;
 	char devname[4] = "wl0";
 
-	while (!found && (dev = dev_get_by_name(devname))) {
+	// 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
+		{
+			// not using this one - put it back
+			dev_put(dev);
+			// try the next device
+			devname[2]++;
+		}
 	}
 
 
@@ -1018,6 +1027,7 @@
 
 static void __exit wlcompat_exit()
 {
+	
 #ifndef DEBUG
 	if (random)
 		del_timer(&rng_timer);
@@ -1027,6 +1037,10 @@
 	dev->wireless_handlers = NULL;
 #endif
 	dev->do_ioctl = old_ioctl;
+
+	// put back the device we kept - this will dec the open_counter
+	dev_put(dev);
+
 	return;
 }
 
