diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/tx.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 5800c7a0d075..bb05a0f86034 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -1844,9 +1844,24 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, | |||
1844 | } | 1844 | } |
1845 | 1845 | ||
1846 | if (!is_multicast_ether_addr(skb->data)) { | 1846 | if (!is_multicast_ether_addr(skb->data)) { |
1847 | struct sta_info *next_hop; | ||
1848 | bool mpp_lookup = true; | ||
1849 | |||
1847 | mpath = mesh_path_lookup(sdata, skb->data); | 1850 | mpath = mesh_path_lookup(sdata, skb->data); |
1848 | if (!mpath) | 1851 | if (mpath) { |
1852 | mpp_lookup = false; | ||
1853 | next_hop = rcu_dereference(mpath->next_hop); | ||
1854 | if (!next_hop || | ||
1855 | !(mpath->flags & (MESH_PATH_ACTIVE | | ||
1856 | MESH_PATH_RESOLVING))) | ||
1857 | mpp_lookup = true; | ||
1858 | } | ||
1859 | |||
1860 | if (mpp_lookup) | ||
1849 | mppath = mpp_path_lookup(sdata, skb->data); | 1861 | mppath = mpp_path_lookup(sdata, skb->data); |
1862 | |||
1863 | if (mppath && mpath) | ||
1864 | mesh_path_del(mpath->sdata, mpath->dst); | ||
1850 | } | 1865 | } |
1851 | 1866 | ||
1852 | /* | 1867 | /* |