> On Tue, Sep 17, 2013 at 8:48 AM, Emmanuel Grumbach > <emmanuel.grumbach@xxxxxxxxx> wrote: > > __ieee80211_scan_completed is called from a worker. This means that > > the following flow is possible. > > > > * driver calls ieee80211_scan_completed > > * mac80211 cancels the scan (that is already complete) > > * __ieee80211_scan_complete runs > > > > When scan_work will finally run, it will see that the scan hasn't been > > aborted and might even trigger another scan on another band. This > > leads to a situation where cfg80211's scan is not done and no further > > scan can be issued. > > > > Fix this by setting a new flag when a HW scan is being cancelled so > > that no other scan will be triggered. > > > > Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@xxxxxxxxx> > > --- > [...] > > > if (test_bit(SCAN_HW_SCANNING, &local->scanning)) { > > - if (local->ops->cancel_hw_scan) > > + /* > > + * Make sure that __ieee80211_scan_completed doesn't trigger a > > + * scan on another band. > > + */ > > + set_bit(SCAN_HW_CANCELLED, &local->scanning); > > + if (local->ops->cancel_hw_scan) { > > drv_cancel_hw_scan(local, > > rcu_dereference_protected(local->scan_sdata, > > > > lockdep_is_held(&local->mtx))); > > + } > > goto out; > > } > > you don't seem to clear this flag anywhere... > Yeah - just like SCAN_HW_SCANNING isn't cleared anywhere... but... in __ieee80211_scan_completed: local->scanning = 0; local->scan_chandef.chan = NULL; yes I know. Don't ask. -- 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