diff options
Diffstat (limited to 'net/mac80211/wme.c')
-rw-r--r-- | net/mac80211/wme.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/net/mac80211/wme.c b/net/mac80211/wme.c index 8cc036decc82..4e94e4026e78 100644 --- a/net/mac80211/wme.c +++ b/net/mac80211/wme.c | |||
@@ -153,6 +153,7 @@ static int wme_qdiscop_enqueue(struct sk_buff *skb, struct Qdisc* qd) | |||
153 | 153 | ||
154 | if (pkt_data->flags & IEEE80211_TXPD_REQUEUE) { | 154 | if (pkt_data->flags & IEEE80211_TXPD_REQUEUE) { |
155 | queue = pkt_data->queue; | 155 | queue = pkt_data->queue; |
156 | rcu_read_lock(); | ||
156 | sta = sta_info_get(local, hdr->addr1); | 157 | sta = sta_info_get(local, hdr->addr1); |
157 | tid = skb->priority & QOS_CONTROL_TAG1D_MASK; | 158 | tid = skb->priority & QOS_CONTROL_TAG1D_MASK; |
158 | if (sta) { | 159 | if (sta) { |
@@ -164,8 +165,8 @@ static int wme_qdiscop_enqueue(struct sk_buff *skb, struct Qdisc* qd) | |||
164 | } else { | 165 | } else { |
165 | pkt_data->flags &= ~IEEE80211_TXPD_AMPDU; | 166 | pkt_data->flags &= ~IEEE80211_TXPD_AMPDU; |
166 | } | 167 | } |
167 | sta_info_put(sta); | ||
168 | } | 168 | } |
169 | rcu_read_unlock(); | ||
169 | skb_queue_tail(&q->requeued[queue], skb); | 170 | skb_queue_tail(&q->requeued[queue], skb); |
170 | qd->q.qlen++; | 171 | qd->q.qlen++; |
171 | return 0; | 172 | return 0; |
@@ -187,6 +188,8 @@ static int wme_qdiscop_enqueue(struct sk_buff *skb, struct Qdisc* qd) | |||
187 | p++; | 188 | p++; |
188 | *p = 0; | 189 | *p = 0; |
189 | 190 | ||
191 | rcu_read_lock(); | ||
192 | |||
190 | sta = sta_info_get(local, hdr->addr1); | 193 | sta = sta_info_get(local, hdr->addr1); |
191 | if (sta) { | 194 | if (sta) { |
192 | int ampdu_queue = sta->tid_to_tx_q[tid]; | 195 | int ampdu_queue = sta->tid_to_tx_q[tid]; |
@@ -197,8 +200,9 @@ static int wme_qdiscop_enqueue(struct sk_buff *skb, struct Qdisc* qd) | |||
197 | } else { | 200 | } else { |
198 | pkt_data->flags &= ~IEEE80211_TXPD_AMPDU; | 201 | pkt_data->flags &= ~IEEE80211_TXPD_AMPDU; |
199 | } | 202 | } |
200 | sta_info_put(sta); | ||
201 | } | 203 | } |
204 | |||
205 | rcu_read_unlock(); | ||
202 | } | 206 | } |
203 | 207 | ||
204 | if (unlikely(queue >= local->hw.queues)) { | 208 | if (unlikely(queue >= local->hw.queues)) { |