cfg80211: check for and abort dangling scan requests
authorJohannes Berg <johannes@sipsolutions.net>
Wed, 12 Aug 2009 20:21:21 +0000 (22:21 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 14 Aug 2009 13:14:07 +0000 (09:14 -0400)
commit36e6fea84905512ea776707e82b5b435220efc17
treedb588e7dbbfcf0fa47f4954344a03961e960c898
parent70bdb6b275d789ddf05c3a858e6b57715539394b
cfg80211: check for and abort dangling scan requests

If you trigger a scan request on an interface and then
take it down, or rmmod the module or unplug the device
the driver might "forget" to cancel the scan request.
That is a bug in the driver, but the current behaviour
is that we just hang endlessly waiting for the netdev
refcount to become 0 which it never will. To improve
robustness, check for this situation in cfg80211, warn
about it and clean up behind the driver. I don't just
clean up silently because it's likely that the driver
also has some internal state it has now leaked.

Additionally, this fixes a locking bug, clearing the
scan_req pointer should be done under the rdev lock.

Finally, we also need to _wait_ for the scan work and
not just abort it since it might be pending and wanting
to do a cleanup.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/wireless/core.c
net/wireless/core.h
net/wireless/scan.c