aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/core.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2009-08-20 21:36:16 +0200
committerJohn W. Linville <linville@tuxdriver.com>2009-08-28 14:40:25 -0400
commit01a0ac417ce9b4f1216a266f2fd454cffefc5aee (patch)
tree3bc13cf46eebc77a44e65b16132d26f71b131f50 /net/wireless/core.c
parent40ba60ddfeff8ef42fb33c0bdacfbb5f83e96b32 (diff)
downloadkernel_samsung_smdk4412-01a0ac417ce9b4f1216a266f2fd454cffefc5aee.zip
kernel_samsung_smdk4412-01a0ac417ce9b4f1216a266f2fd454cffefc5aee.tar.gz
kernel_samsung_smdk4412-01a0ac417ce9b4f1216a266f2fd454cffefc5aee.tar.bz2
cfg80211: check lost scans later, fix bug
When we lose a scan, cfg80211 tries to clean up after the driver. However, it currently does this too early, it does this in GOING_DOWN already instead of DOWN, so it may happen with mac80211. Besides fixing this, also make it more robust by leaking the scan request so if the driver later actually finishes the scan, it won't crash. Also check in ___cfg80211_scan_done whether a scan request is still pending and exit if not. Reported-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Tested-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless/core.c')
-rw-r--r--net/wireless/core.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/wireless/core.c b/net/wireless/core.c
index 154e1e2..9b157ca 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -664,7 +664,7 @@ static void wdev_cleanup_work(struct work_struct *work)
if (WARN_ON(rdev->scan_req && rdev->scan_req->dev == wdev->netdev)) {
rdev->scan_req->aborted = true;
- ___cfg80211_scan_done(rdev);
+ ___cfg80211_scan_done(rdev, true);
}
cfg80211_unlock_rdev(rdev);
@@ -755,6 +755,8 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
default:
break;
}
+ break;
+ case NETDEV_DOWN:
dev_hold(dev);
schedule_work(&wdev->cleanup_work);
break;