cfg80211: stop sched scan only when needed

cfg80211_leave stops sched scan when any station vif
is leaving. Add an explicit check and call it only
when the relevant vif (the one we scan on) is leaving.

Signed-off-by: Barak Bercovitz <barak@wizery.com>
[Eliad - changed the commit message a bit]
Signed-off-by: Eliad Peller <eliad@wizery.com>
[Johannes - add ASSERT_RTNL since that protects the pointer]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Barak Bercovitz 2013-12-05 11:21:26 +02:00 committed by Johannes Berg
parent d1e33e654e
commit 24d584d70e
1 changed files with 4 additions and 1 deletions

View File

@ -756,13 +756,16 @@ void cfg80211_leave(struct cfg80211_registered_device *rdev,
{ {
struct net_device *dev = wdev->netdev; struct net_device *dev = wdev->netdev;
ASSERT_RTNL();
switch (wdev->iftype) { switch (wdev->iftype) {
case NL80211_IFTYPE_ADHOC: case NL80211_IFTYPE_ADHOC:
cfg80211_leave_ibss(rdev, dev, true); cfg80211_leave_ibss(rdev, dev, true);
break; break;
case NL80211_IFTYPE_P2P_CLIENT: case NL80211_IFTYPE_P2P_CLIENT:
case NL80211_IFTYPE_STATION: case NL80211_IFTYPE_STATION:
__cfg80211_stop_sched_scan(rdev, false); if (rdev->sched_scan_req && dev == rdev->sched_scan_req->dev)
__cfg80211_stop_sched_scan(rdev, false);
wdev_lock(wdev); wdev_lock(wdev);
#ifdef CONFIG_CFG80211_WEXT #ifdef CONFIG_CFG80211_WEXT