Skip to content

Commit

Permalink
mac80211: set running state earlier
Browse files Browse the repository at this point in the history
When an interface is brought up, the recent changes
to allow changing type-while-up only set the running
bit after everything was done. This broke a number
of things, including idle calculation for monitor
interfaces, and it also broke WDS station insertion
(although nobody noticed yet).

Thus, change the code to set the running bit earlier,
but keep it after the driver's add_interface was
called because otherwise drivers may iterate over
interfaces they haven't fully set up yet.

Reported-by: Rajkumar Manoharan <rmanoharan@atheros.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Johannes Berg authored and John W. Linville committed Sep 16, 2010
1 parent 46a5eba commit 2d2080c
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions net/mac80211/iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,8 @@ static int ieee80211_do_open(struct net_device *dev, bool coming_up)
netif_carrier_on(dev);
}

set_bit(SDATA_STATE_RUNNING, &sdata->state);

if (sdata->vif.type == NL80211_IFTYPE_WDS) {
/* Create STA entry for the WDS peer */
sta = sta_info_alloc(sdata, sdata->u.wds.remote_addr,
Expand Down Expand Up @@ -331,8 +333,6 @@ static int ieee80211_do_open(struct net_device *dev, bool coming_up)

netif_tx_start_all_queues(dev);

set_bit(SDATA_STATE_RUNNING, &sdata->state);

return 0;
err_del_interface:
drv_remove_interface(local, &sdata->vif);
Expand All @@ -343,6 +343,7 @@ static int ieee80211_do_open(struct net_device *dev, bool coming_up)
sdata->bss = NULL;
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
list_del(&sdata->u.vlan.list);
clear_bit(SDATA_STATE_RUNNING, &sdata->state);
return res;
}

Expand Down

0 comments on commit 2d2080c

Please sign in to comment.