|
@@ -867,6 +867,7 @@ void __cfg80211_leave(struct cfg80211_registered_device *rdev,
|
|
struct wireless_dev *wdev)
|
|
struct wireless_dev *wdev)
|
|
{
|
|
{
|
|
struct net_device *dev = wdev->netdev;
|
|
struct net_device *dev = wdev->netdev;
|
|
|
|
+ struct cfg80211_sched_scan_request *sched_scan_req;
|
|
|
|
|
|
ASSERT_RTNL();
|
|
ASSERT_RTNL();
|
|
ASSERT_WDEV_LOCK(wdev);
|
|
ASSERT_WDEV_LOCK(wdev);
|
|
@@ -877,7 +878,8 @@ void __cfg80211_leave(struct cfg80211_registered_device *rdev,
|
|
break;
|
|
break;
|
|
case NL80211_IFTYPE_P2P_CLIENT:
|
|
case NL80211_IFTYPE_P2P_CLIENT:
|
|
case NL80211_IFTYPE_STATION:
|
|
case NL80211_IFTYPE_STATION:
|
|
- if (rdev->sched_scan_req && dev == rdev->sched_scan_req->dev)
|
|
|
|
|
|
+ sched_scan_req = rtnl_dereference(rdev->sched_scan_req);
|
|
|
|
+ if (sched_scan_req && dev == sched_scan_req->dev)
|
|
__cfg80211_stop_sched_scan(rdev, false);
|
|
__cfg80211_stop_sched_scan(rdev, false);
|
|
|
|
|
|
#ifdef CONFIG_CFG80211_WEXT
|
|
#ifdef CONFIG_CFG80211_WEXT
|
|
@@ -956,6 +958,7 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
|
|
struct net_device *dev = netdev_notifier_info_to_dev(ptr);
|
|
struct net_device *dev = netdev_notifier_info_to_dev(ptr);
|
|
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
|
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
|
struct cfg80211_registered_device *rdev;
|
|
struct cfg80211_registered_device *rdev;
|
|
|
|
+ struct cfg80211_sched_scan_request *sched_scan_req;
|
|
|
|
|
|
if (!wdev)
|
|
if (!wdev)
|
|
return NOTIFY_DONE;
|
|
return NOTIFY_DONE;
|
|
@@ -1021,8 +1024,9 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
|
|
___cfg80211_scan_done(rdev, false);
|
|
___cfg80211_scan_done(rdev, false);
|
|
}
|
|
}
|
|
|
|
|
|
- if (WARN_ON(rdev->sched_scan_req &&
|
|
|
|
- rdev->sched_scan_req->dev == wdev->netdev)) {
|
|
|
|
|
|
+ sched_scan_req = rtnl_dereference(rdev->sched_scan_req);
|
|
|
|
+ if (WARN_ON(sched_scan_req &&
|
|
|
|
+ sched_scan_req->dev == wdev->netdev)) {
|
|
__cfg80211_stop_sched_scan(rdev, false);
|
|
__cfg80211_stop_sched_scan(rdev, false);
|
|
}
|
|
}
|
|
|
|
|