mac80211: Update last_tx_rate only for data frames
authorHelmut Schaa <helmut.schaa@googlemail.com>
Wed, 1 Dec 2010 15:34:45 +0000 (16:34 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 6 Dec 2010 20:58:43 +0000 (15:58 -0500)
The last_tx_rate field was also updated for non-data frames that are
often sent with a lower rate (for example management frames at 1 Mbps).
This is confusing when the data rate is actually much higher.

Hence, only update the last_tx_rate field with tx rate information
gathered from last data frames.

If the rate control algorithm filled in txrc.reported_rate we don't need
to verify this information.

Cc: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/tx.c

index 2ba7426568252b78064eb498f5e0b46e038d2623..5d6b0759d18c9d2dab0073d8a2f388ab84bae963 100644 (file)
@@ -666,10 +666,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
        if (unlikely(info->control.rates[0].idx < 0))
                return TX_DROP;
 
-       if (txrc.reported_rate.idx < 0)
+       if (txrc.reported_rate.idx < 0) {
                txrc.reported_rate = info->control.rates[0];
-
-       if (tx->sta)
+               if (tx->sta && ieee80211_is_data(hdr->frame_control))
+                       tx->sta->last_tx_rate = txrc.reported_rate;
+       } else if (tx->sta)
                tx->sta->last_tx_rate = txrc.reported_rate;
 
        if (unlikely(!info->control.rates[0].count))