Johannes Berg wrote:
> Yeah you're right.
> 
> However, when the interface is deleted, the driver must still also
> remove the scan and definitely schedule the work, so most drivers will
> really always do so in cancel_hw_scan()? We could change the API and
> require that to be synchronous, like in the interface removal case, but
> maybe we don't want to.
> 
> How about this then?
> 
> diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
> index e469b3390f2a..6f1b90eb568c 100644
> --- a/net/mac80211/iface.c
> +++ b/net/mac80211/iface.c
> @@ -766,10 +766,12 @@ static void ieee80211_do_stop(struct 
> ieee80211_sub_if_data *sdata,
>       int i, flushed;
>       struct ps_data *ps;
>       struct cfg80211_chan_def chandef;
> +     bool cancel_scan;
>  
>       clear_bit(SDATA_STATE_RUNNING, &sdata->state);
>  
> -     if (rcu_access_pointer(local->scan_sdata) == sdata)
> +     cancel_scan = rcu_access_pointer(local->scan_sdata) == sdata;
> +     if (cancel_scan)
>               ieee80211_scan_cancel(local);
>  
>       /*
> @@ -993,6 +995,9 @@ static void ieee80211_do_stop(struct 
> ieee80211_sub_if_data *sdata,
>  
>       ieee80211_recalc_ps(local, -1);
>  
> +     if (cancel_scan)
> +             flush_delayed_work(&local->scan_work);
> +
>       if (local->open_count == 0) {
>               ieee80211_stop_device(local);

Yep, this fixes the issue. Thanks !

Sujith
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to