On Sun, Aug 28, 2011 at 9:11 PM, Felix Fietkau <nbd@xxxxxxxxxxx> wrote: > Unfortunately failed BAR tx attempts happen more frequently than I > expected, and the resulting aggregation teardowns cause performance > issues, as the aggregation session does not always get re-established > properly. > Instead of tearing down the entire aggr session, we can simply store the > SSN of the last failed BAR tx attempt, wait for the first successful > tx status event, and then send another BAR with the same SSN. > > Signed-off-by: Felix Fietkau <nbd@xxxxxxxxxxx> > Cc: Helmut Schaa <helmut.schaa@xxxxxxxxxxxxxx> [...] > static void ieee80211_frame_acked(struct sta_info *sta, struct sk_buff *skb) > { > struct ieee80211_mgmt *mgmt = (void *) skb->data; > struct ieee80211_local *local = sta->local; > struct ieee80211_sub_if_data *sdata = sta->sdata; > > + if (ieee80211_is_data_qos(mgmt->frame_control)) { > + struct ieee80211_hdr *hdr = (void *) skb->data; > + u8 *qc = ieee80211_get_qos_ctl(hdr); > + u16 tid = qc[0] & 0xf; > + > + ieee80211_check_pending_bar(sta, hdr->addr1, tid); > + } > + This code will not be run for injected QoS frames. Is this intended? Otherwise looks good to me. Helmut -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html