|
@@ -2017,24 +2017,14 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
|
|
|
skb = skb_clone(skb, GFP_ATOMIC);
|
|
|
if (skb) {
|
|
|
unsigned long flags;
|
|
|
- int id, r;
|
|
|
+ int id;
|
|
|
|
|
|
spin_lock_irqsave(&local->ack_status_lock, flags);
|
|
|
- r = idr_get_new_above(&local->ack_status_frames,
|
|
|
- orig_skb, 1, &id);
|
|
|
- if (r == -EAGAIN) {
|
|
|
- idr_pre_get(&local->ack_status_frames,
|
|
|
- GFP_ATOMIC);
|
|
|
- r = idr_get_new_above(&local->ack_status_frames,
|
|
|
- orig_skb, 1, &id);
|
|
|
- }
|
|
|
- if (WARN_ON(!id) || id > 0xffff) {
|
|
|
- idr_remove(&local->ack_status_frames, id);
|
|
|
- r = -ERANGE;
|
|
|
- }
|
|
|
+ id = idr_alloc(&local->ack_status_frames, orig_skb,
|
|
|
+ 1, 0x10000, GFP_ATOMIC);
|
|
|
spin_unlock_irqrestore(&local->ack_status_lock, flags);
|
|
|
|
|
|
- if (!r) {
|
|
|
+ if (id >= 0) {
|
|
|
info_id = id;
|
|
|
info_flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
|
|
|
} else if (skb_shared(skb)) {
|