diff options
Diffstat (limited to 'net/mac80211/mesh.c')
-rw-r--r-- | net/mac80211/mesh.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c index c66411df9863..42120d965263 100644 --- a/net/mac80211/mesh.c +++ b/net/mac80211/mesh.c | |||
@@ -881,20 +881,22 @@ void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata) | |||
881 | 881 | ||
882 | netif_carrier_off(sdata->dev); | 882 | netif_carrier_off(sdata->dev); |
883 | 883 | ||
884 | /* flush STAs and mpaths on this iface */ | ||
885 | sta_info_flush(sdata); | ||
886 | mesh_path_flush_by_iface(sdata); | ||
887 | |||
884 | /* stop the beacon */ | 888 | /* stop the beacon */ |
885 | ifmsh->mesh_id_len = 0; | 889 | ifmsh->mesh_id_len = 0; |
886 | sdata->vif.bss_conf.enable_beacon = false; | 890 | sdata->vif.bss_conf.enable_beacon = false; |
887 | clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); | 891 | clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); |
888 | ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED); | 892 | ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED); |
893 | |||
894 | /* remove beacon */ | ||
889 | bcn = rcu_dereference_protected(ifmsh->beacon, | 895 | bcn = rcu_dereference_protected(ifmsh->beacon, |
890 | lockdep_is_held(&sdata->wdev.mtx)); | 896 | lockdep_is_held(&sdata->wdev.mtx)); |
891 | RCU_INIT_POINTER(ifmsh->beacon, NULL); | 897 | RCU_INIT_POINTER(ifmsh->beacon, NULL); |
892 | kfree_rcu(bcn, rcu_head); | 898 | kfree_rcu(bcn, rcu_head); |
893 | 899 | ||
894 | /* flush STAs and mpaths on this iface */ | ||
895 | sta_info_flush(sdata); | ||
896 | mesh_path_flush_by_iface(sdata); | ||
897 | |||
898 | /* free all potentially still buffered group-addressed frames */ | 900 | /* free all potentially still buffered group-addressed frames */ |
899 | local->total_ps_buffered -= skb_queue_len(&ifmsh->ps.bc_buf); | 901 | local->total_ps_buffered -= skb_queue_len(&ifmsh->ps.bc_buf); |
900 | skb_queue_purge(&ifmsh->ps.bc_buf); | 902 | skb_queue_purge(&ifmsh->ps.bc_buf); |