On Mon, 2009-07-06 at 19:54 -0700, javier@xxxxxxxxxxx wrote: > From: Javier Cardona <javier@xxxxxxxxxxx> > > The removal of the master netdev broke the mesh forwarding path. This patch > fixes it by using the new internal 'pending' queue. > > As a result of this change, mesh forwarding no longer does the inefficient > 802.11 -> 802.3 -> 802.11 conversion that was done before. > > Signed-off-by: Javier Cardona <javier@xxxxxxxxxxx> > Signed-off-by: Andrey Yurovsky <andrey@xxxxxxxxxxx> Reviewed-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx> > --- > net/mac80211/mesh_hwmp.c | 3 ++- > net/mac80211/mesh_pathtbl.c | 9 ++++----- > net/mac80211/rx.c | 17 +++++++++++++++-- > net/mac80211/tx.c | 3 --- > 4 files changed, 21 insertions(+), 11 deletions(-) > > diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c > index f49ef28..c31fe79 100644 > --- a/net/mac80211/mesh_hwmp.c > +++ b/net/mac80211/mesh_hwmp.c > @@ -784,7 +784,6 @@ int mesh_nexthop_lookup(struct sk_buff *skb, > mesh_path_add(dst_addr, sdata); > mpath = mesh_path_lookup(dst_addr, sdata); > if (!mpath) { > - dev_kfree_skb(skb); > sdata->u.mesh.mshstats.dropped_frames_no_route++; > err = -ENOSPC; > goto endlookup; > @@ -804,6 +803,7 @@ int mesh_nexthop_lookup(struct sk_buff *skb, > memcpy(hdr->addr1, mpath->next_hop->sta.addr, > ETH_ALEN); > } else { > + struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); > if (!(mpath->flags & MESH_PATH_RESOLVING)) { > /* Start discovery only if it is not running yet */ > mesh_queue_preq(mpath, PREQ_Q_F_START); > @@ -815,6 +815,7 @@ int mesh_nexthop_lookup(struct sk_buff *skb, > skb_unlink(skb_to_free, &mpath->frame_queue); > } > > + info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING; > skb_queue_tail(&mpath->frame_queue, skb); > if (skb_to_free) > mesh_path_discard_frame(skb_to_free, sdata); > diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c > index 3c72557..1e32948 100644 > --- a/net/mac80211/mesh_pathtbl.c > +++ b/net/mac80211/mesh_pathtbl.c > @@ -14,6 +14,7 @@ > #include <linux/string.h> > #include <net/mac80211.h> > #include "ieee80211_i.h" > +#include "wme.h" > #include "mesh.h" You _could_ drop that extra include now, but it's not like it really matters. johannes
Attachment:
signature.asc
Description: This is a digitally signed message part