diff options
author | Javier Cardona <javier@cozybit.com> | 2011-08-29 16:23:04 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-09-13 15:42:32 -0400 |
commit | ece1a2e7e86078c8379937b546e32cb7f25fcb6c (patch) | |
tree | f15c838069746175237e3639f85e800d712f88b9 /net/mac80211/iface.c | |
parent | af089c15cb13e1c5d984e41f495c8363dd5b1e30 (diff) |
mac80211: Remove mesh paths when an interface is removed
When an interface is removed, the mesh paths associated with it should
also be removed.
This fixes a bug we observed when reloading a device driver module
without reloading mac80211s.
Signed-off-by: Javier Cardona <javier@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/iface.c')
-rw-r--r-- | net/mac80211/iface.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 556e7e6ddf0a..eaa80a3d412b 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -1214,6 +1214,9 @@ void ieee80211_if_remove(struct ieee80211_sub_if_data *sdata) | |||
1214 | list_del_rcu(&sdata->list); | 1214 | list_del_rcu(&sdata->list); |
1215 | mutex_unlock(&sdata->local->iflist_mtx); | 1215 | mutex_unlock(&sdata->local->iflist_mtx); |
1216 | 1216 | ||
1217 | if (ieee80211_vif_is_mesh(&sdata->vif)) | ||
1218 | mesh_path_flush_by_iface(sdata); | ||
1219 | |||
1217 | synchronize_rcu(); | 1220 | synchronize_rcu(); |
1218 | unregister_netdevice(sdata->dev); | 1221 | unregister_netdevice(sdata->dev); |
1219 | } | 1222 | } |
@@ -1233,6 +1236,9 @@ void ieee80211_remove_interfaces(struct ieee80211_local *local) | |||
1233 | list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { | 1236 | list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { |
1234 | list_del(&sdata->list); | 1237 | list_del(&sdata->list); |
1235 | 1238 | ||
1239 | if (ieee80211_vif_is_mesh(&sdata->vif)) | ||
1240 | mesh_path_flush_by_iface(sdata); | ||
1241 | |||
1236 | unregister_netdevice_queue(sdata->dev, &unreg_list); | 1242 | unregister_netdevice_queue(sdata->dev, &unreg_list); |
1237 | } | 1243 | } |
1238 | mutex_unlock(&local->iflist_mtx); | 1244 | mutex_unlock(&local->iflist_mtx); |