diff options
| -rw-r--r-- | net/ieee80211/ieee80211_tx.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/net/ieee80211/ieee80211_tx.c b/net/ieee80211/ieee80211_tx.c index f4f2a33973a7..fb4509032402 100644 --- a/net/ieee80211/ieee80211_tx.c +++ b/net/ieee80211/ieee80211_tx.c | |||
| @@ -190,7 +190,7 @@ void ieee80211_txb_free(struct ieee80211_txb *txb) | |||
| 190 | } | 190 | } |
| 191 | 191 | ||
| 192 | static struct ieee80211_txb *ieee80211_alloc_txb(int nr_frags, int txb_size, | 192 | static struct ieee80211_txb *ieee80211_alloc_txb(int nr_frags, int txb_size, |
| 193 | gfp_t gfp_mask) | 193 | int headroom, gfp_t gfp_mask) |
| 194 | { | 194 | { |
| 195 | struct ieee80211_txb *txb; | 195 | struct ieee80211_txb *txb; |
| 196 | int i; | 196 | int i; |
| @@ -204,11 +204,13 @@ static struct ieee80211_txb *ieee80211_alloc_txb(int nr_frags, int txb_size, | |||
| 204 | txb->frag_size = txb_size; | 204 | txb->frag_size = txb_size; |
| 205 | 205 | ||
| 206 | for (i = 0; i < nr_frags; i++) { | 206 | for (i = 0; i < nr_frags; i++) { |
| 207 | txb->fragments[i] = dev_alloc_skb(txb_size); | 207 | txb->fragments[i] = __dev_alloc_skb(txb_size + headroom, |
| 208 | gfp_mask); | ||
| 208 | if (unlikely(!txb->fragments[i])) { | 209 | if (unlikely(!txb->fragments[i])) { |
| 209 | i--; | 210 | i--; |
| 210 | break; | 211 | break; |
| 211 | } | 212 | } |
| 213 | skb_reserve(txb->fragments[i], headroom); | ||
| 212 | } | 214 | } |
| 213 | if (unlikely(i != nr_frags)) { | 215 | if (unlikely(i != nr_frags)) { |
| 214 | while (i >= 0) | 216 | while (i >= 0) |
| @@ -384,7 +386,8 @@ int ieee80211_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 384 | /* When we allocate the TXB we allocate enough space for the reserve | 386 | /* When we allocate the TXB we allocate enough space for the reserve |
| 385 | * and full fragment bytes (bytes_per_frag doesn't include prefix, | 387 | * and full fragment bytes (bytes_per_frag doesn't include prefix, |
| 386 | * postfix, header, FCS, etc.) */ | 388 | * postfix, header, FCS, etc.) */ |
| 387 | txb = ieee80211_alloc_txb(nr_frags, frag_size, GFP_ATOMIC); | 389 | txb = ieee80211_alloc_txb(nr_frags, frag_size, |
| 390 | ieee->tx_headroom, GFP_ATOMIC); | ||
| 388 | if (unlikely(!txb)) { | 391 | if (unlikely(!txb)) { |
| 389 | printk(KERN_WARNING "%s: Could not allocate TXB\n", | 392 | printk(KERN_WARNING "%s: Could not allocate TXB\n", |
| 390 | ieee->dev->name); | 393 | ieee->dev->name); |
