From: Johannes Berg <johannes.berg@xxxxxxxxx> The description for buf_size was misleading and just said you couldn't TX larger aggregates, but of course you can't TX aggregates in a way that would exceed the window either, which is possible even if the aggregates are shorter than that. Expand the description, thanks to Emmanuel for explaining this to me. Cc: Emmanuel Grumbach <egrumbach@xxxxxxxxx> Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx> --- include/net/mac80211.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) --- a/include/net/mac80211.h 2011-03-16 10:30:26.000000000 +0100 +++ b/include/net/mac80211.h 2011-03-16 10:37:49.000000000 +0100 @@ -1753,8 +1753,17 @@ enum ieee80211_ampdu_mlme_action { * that TX/RX_STOP can pass NULL for this parameter. * The @buf_size parameter is only valid when the action is set to * %IEEE80211_AMPDU_TX_OPERATIONAL and indicates the peer's reorder - * buffer size (number of subframes) for this session -- aggregates - * containing more subframes than this may not be transmitted to the peer. + * buffer size (number of subframes) for this session -- the driver + * may neither send aggregates containing more subframes than this + * nor send aggregates in a way that lost frames would exceed the + * buffer size. If just limiting the aggregate size, this would be + * possible with a buf_size of 8: + * - TX: 1......8 + * - RX: 2.....8 (lost frame #1) + * - TX: 9...1... + * which is invalid since #1 was now re-transmitted well past the + * buffer size of 8. The correct way to retransmit #1 would be: + * - TX: 19...... * Returns a negative error code on failure. * The callback can sleep. * -- 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