]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/mac80211/scan.c
Merge remote-tracking branch 'arm-soc/for-next'
[karo-tx-linux.git] / net / mac80211 / scan.c
index b64fd2b2d95accd23cf1207b828c8f822e35f929..4aeca4b0c3cb426ba65b23d4a8ebc756e7a826a4 100644 (file)
@@ -1140,10 +1140,10 @@ int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
        return ret;
 }
 
-int ieee80211_request_sched_scan_stop(struct ieee80211_sub_if_data *sdata)
+int ieee80211_request_sched_scan_stop(struct ieee80211_local *local)
 {
-       struct ieee80211_local *local = sdata->local;
-       int ret = 0;
+       struct ieee80211_sub_if_data *sched_scan_sdata;
+       int ret = -ENOENT;
 
        mutex_lock(&local->mtx);
 
@@ -1155,8 +1155,10 @@ int ieee80211_request_sched_scan_stop(struct ieee80211_sub_if_data *sdata)
        /* We don't want to restart sched scan anymore. */
        RCU_INIT_POINTER(local->sched_scan_req, NULL);
 
-       if (rcu_access_pointer(local->sched_scan_sdata)) {
-               ret = drv_sched_scan_stop(local, sdata);
+       sched_scan_sdata = rcu_dereference_protected(local->sched_scan_sdata,
+                                               lockdep_is_held(&local->mtx));
+       if (sched_scan_sdata) {
+               ret = drv_sched_scan_stop(local, sched_scan_sdata);
                if (!ret)
                        RCU_INIT_POINTER(local->sched_scan_sdata, NULL);
        }