]> err.no Git - linux-2.6/blobdiff - net/mac80211/wme.c
Merge branch 'x86/nmi' into x86/devel
[linux-2.6] / net / mac80211 / wme.c
index 8cc036decc8261675c5e47b2968de9b55b0546cd..5d09e8698b57584cb66bbc83e96295955c68c360 100644 (file)
@@ -153,6 +153,7 @@ static int wme_qdiscop_enqueue(struct sk_buff *skb, struct Qdisc* qd)
 
        if (pkt_data->flags & IEEE80211_TXPD_REQUEUE) {
                queue = pkt_data->queue;
+               rcu_read_lock();
                sta = sta_info_get(local, hdr->addr1);
                tid = skb->priority & QOS_CONTROL_TAG1D_MASK;
                if (sta) {
@@ -164,8 +165,8 @@ static int wme_qdiscop_enqueue(struct sk_buff *skb, struct Qdisc* qd)
                        } else {
                                pkt_data->flags &= ~IEEE80211_TXPD_AMPDU;
                        }
-                       sta_info_put(sta);
                }
+               rcu_read_unlock();
                skb_queue_tail(&q->requeued[queue], skb);
                qd->q.qlen++;
                return 0;
@@ -187,6 +188,8 @@ static int wme_qdiscop_enqueue(struct sk_buff *skb, struct Qdisc* qd)
                p++;
                *p = 0;
 
+               rcu_read_lock();
+
                sta = sta_info_get(local, hdr->addr1);
                if (sta) {
                        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)
                        } else {
                                pkt_data->flags &= ~IEEE80211_TXPD_AMPDU;
                        }
-                       sta_info_put(sta);
                }
+
+               rcu_read_unlock();
        }
 
        if (unlikely(queue >= local->hw.queues)) {
@@ -319,8 +323,7 @@ static void wme_qdiscop_destroy(struct Qdisc* qd)
        struct ieee80211_hw *hw = &local->hw;
        int queue;
 
-       tcf_destroy_chain(q->filter_list);
-       q->filter_list = NULL;
+       tcf_destroy_chain(&q->filter_list);
 
        for (queue=0; queue < hw->queues; queue++) {
                skb_queue_purge(&q->requeued[queue]);
@@ -390,7 +393,8 @@ static int wme_qdiscop_init(struct Qdisc *qd, struct nlattr *opt)
                                                 qd->handle);
                if (!q->queues[i]) {
                        q->queues[i] = &noop_qdisc;
-                       printk(KERN_ERR "%s child qdisc %i creation failed", dev->name, i);
+                       printk(KERN_ERR "%s child qdisc %i creation failed\n",
+                              dev->name, i);
                }
        }
 
@@ -668,7 +672,7 @@ int ieee80211_ht_agg_queue_add(struct ieee80211_local *local,
 #ifdef CONFIG_MAC80211_HT_DEBUG
                        if (net_ratelimit())
                                printk(KERN_DEBUG "allocated aggregation queue"
-                                       " %d tid %d addr %s pool=0x%lX",
+                                       " %d tid %d addr %s pool=0x%lX\n",
                                        i, tid, print_mac(mac, sta->addr),
                                        q->qdisc_pool[0]);
 #endif /* CONFIG_MAC80211_HT_DEBUG */
@@ -705,7 +709,7 @@ void ieee80211_requeue(struct ieee80211_local *local, int queue)
        struct ieee80211_sched_data *q = qdisc_priv(root_qd);
        struct Qdisc *qdisc = q->queues[queue];
        struct sk_buff *skb = NULL;
-       u32 len = qdisc->q.qlen;
+       u32 len;
 
        if (!qdisc || !qdisc->dequeue)
                return;