From d6f974e405153bd81623b1cb85ccd2b1273153f7 Mon Sep 17 00:00:00 2001 From: Chun-Yeow Yeoh Date: Tue, 19 Feb 2013 10:04:50 +0800 Subject: [PATCH] --- yaml --- r: 360797 b: refs/heads/master c: 163df6cf292a1024277f500038fc0ed493635673 h: refs/heads/master i: 360795: 95dd1035e0a09cd416332b0c5c0aaf33e211c47c v: v3 --- [refs] | 2 +- trunk/net/mac80211/tx.c | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index ebe456e37376..901c5349bf16 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 162589f7b162b916ac377753c086e3ba76a9f33d +refs/heads/master: 163df6cf292a1024277f500038fc0ed493635673 diff --git a/trunk/net/mac80211/tx.c b/trunk/net/mac80211/tx.c index 5800c7a0d075..bb05a0f86034 100644 --- a/trunk/net/mac80211/tx.c +++ b/trunk/net/mac80211/tx.c @@ -1844,9 +1844,24 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, } if (!is_multicast_ether_addr(skb->data)) { + struct sta_info *next_hop; + bool mpp_lookup = true; + mpath = mesh_path_lookup(sdata, skb->data); - if (!mpath) + if (mpath) { + mpp_lookup = false; + next_hop = rcu_dereference(mpath->next_hop); + if (!next_hop || + !(mpath->flags & (MESH_PATH_ACTIVE | + MESH_PATH_RESOLVING))) + mpp_lookup = true; + } + + if (mpp_lookup) mppath = mpp_path_lookup(sdata, skb->data); + + if (mppath && mpath) + mesh_path_del(mpath->sdata, mpath->dst); } /*