Report NL80211_CMD_SCHED_SCAN_STOPPED and change internal states in cfg80211 only after the driver reports that sched scan was actually stopped. Signed-off-by: Eyal Shapira <eyal@xxxxxxxxxx> --- v2: No changes net/wireless/scan.c | 17 ++++++++--------- 1 files changed, 8 insertions(+), 9 deletions(-) diff --git a/net/wireless/scan.c b/net/wireless/scan.c index 31119e3..d6c87d9 100644 --- a/net/wireless/scan.c +++ b/net/wireless/scan.c @@ -133,6 +133,7 @@ EXPORT_SYMBOL(cfg80211_sched_scan_stopped); int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev, bool driver_initiated) { + int err = 0; struct net_device *dev; lockdep_assert_held(&rdev->sched_scan_mtx); @@ -143,17 +144,15 @@ int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev, dev = rdev->sched_scan_req->dev; if (!driver_initiated) { - int err = rdev->ops->sched_scan_stop(&rdev->wiphy, dev); - if (err) - return err; + err = rdev->ops->sched_scan_stop(&rdev->wiphy, dev); + } else { + nl80211_send_sched_scan(rdev, dev, + NL80211_CMD_SCHED_SCAN_STOPPED); + kfree(rdev->sched_scan_req); + rdev->sched_scan_req = NULL; } - nl80211_send_sched_scan(rdev, dev, NL80211_CMD_SCHED_SCAN_STOPPED); - - kfree(rdev->sched_scan_req); - rdev->sched_scan_req = NULL; - - return 0; + return err; } static void bss_release(struct kref *ref) -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html