|
@@ -1051,11 +1051,13 @@ void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata)
|
|
{
|
|
{
|
|
struct ieee80211_local *local = sdata->local;
|
|
struct ieee80211_local *local = sdata->local;
|
|
struct ieee80211_work *wk;
|
|
struct ieee80211_work *wk;
|
|
|
|
+ bool cleanup = false;
|
|
|
|
|
|
mutex_lock(&local->mtx);
|
|
mutex_lock(&local->mtx);
|
|
list_for_each_entry(wk, &local->work_list, list) {
|
|
list_for_each_entry(wk, &local->work_list, list) {
|
|
if (wk->sdata != sdata)
|
|
if (wk->sdata != sdata)
|
|
continue;
|
|
continue;
|
|
|
|
+ cleanup = true;
|
|
wk->type = IEEE80211_WORK_ABORT;
|
|
wk->type = IEEE80211_WORK_ABORT;
|
|
wk->started = true;
|
|
wk->started = true;
|
|
wk->timeout = jiffies;
|
|
wk->timeout = jiffies;
|
|
@@ -1063,7 +1065,8 @@ void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata)
|
|
mutex_unlock(&local->mtx);
|
|
mutex_unlock(&local->mtx);
|
|
|
|
|
|
/* run cleanups etc. */
|
|
/* run cleanups etc. */
|
|
- ieee80211_work_work(&local->work_work);
|
|
|
|
|
|
+ if (cleanup)
|
|
|
|
+ ieee80211_work_work(&local->work_work);
|
|
|
|
|
|
mutex_lock(&local->mtx);
|
|
mutex_lock(&local->mtx);
|
|
list_for_each_entry(wk, &local->work_list, list) {
|
|
list_for_each_entry(wk, &local->work_list, list) {
|