On Tue, Sep 17, 2013 at 2:28 PM, Grumbach, Emmanuel <emmanuel.grumbach@xxxxxxxxx> wrote: >> 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. oh, right, i overlooked it :) Eliad. -- 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