From 2d91c1cb5794d71ba4337abf17d718ff7138e632 Mon Sep 17 00:00:00 2001 From: mtaylor Date: Wed, 9 Apr 2008 21:15:32 +0000 Subject: [PATCH] When power save queue overflows, we have to return NETDEV_TX_OK and free the SKB. The convention for this function ieee80211_pwrsave is to consume the SKB and either queue it or free it. Also switch some SKB_CB(...)->ni to SKB_NI(...) git-svn-id: http://madwifi-project.org/svn/madwifi/trunk@3491 0192ed92-7a03-0410-a25b-9323aeb14dbd --- net80211/ieee80211_power.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/net80211/ieee80211_power.c b/net80211/ieee80211_power.c index 6b9d4aa..c180df9 100644 --- a/net80211/ieee80211_power.c +++ b/net80211/ieee80211_power.c @@ -115,8 +115,8 @@ ieee80211_node_saveq_drain(struct ieee80211_node *ni) IEEE80211_NODE_SAVEQ_LOCK_IRQ(ni); qlen = IEEE80211_NODE_SAVEQ_QLEN(ni); while ((skb = __skb_dequeue(&ni->ni_savedq)) != NULL) { - if (SKB_CB(skb)->ni != NULL) - ieee80211_unref_node(&SKB_CB(skb)->ni); + if (SKB_NI(skb) != NULL) + ieee80211_unref_node(&SKB_NI(skb)); ieee80211_dev_kfree_skb(&skb); } IEEE80211_NODE_SAVEQ_UNLOCK_IRQ(ni); @@ -153,8 +153,8 @@ ieee80211_node_saveq_age(struct ieee80211_node *ni) "discard frame, age %u", M_AGE_GET(skb)); skb = __skb_dequeue(&ni->ni_savedq); - if (SKB_CB(skb)->ni != NULL) - ieee80211_unref_node(&SKB_CB(skb)->ni); + if (SKB_NI(skb) != NULL) + ieee80211_unref_node(&SKB_NI(skb)); ieee80211_dev_kfree_skb(&skb); discard++; } @@ -209,7 +209,7 @@ ieee80211_set_tim(struct ieee80211_node *ni, int set) int ieee80211_pwrsave(struct sk_buff *skb) { - struct ieee80211_node *ni = SKB_CB(skb)->ni; + struct ieee80211_node *ni = SKB_NI(skb); struct ieee80211vap *vap = ni->ni_vap; struct ieee80211com *ic = ni->ni_ic; struct sk_buff *tail; @@ -228,7 +228,8 @@ ieee80211_pwrsave(struct sk_buff *skb) #endif if (SKB_CB(skb)->ni != NULL) ieee80211_unref_node(&SKB_CB(skb)->ni); - return NETDEV_TX_BUSY; + ieee80211_dev_kfree_skb(&skb); + return NETDEV_TX_OK; } /* -- 2.35.1