| .. | .. |
|---|
| 613 | 613 | } |
|---|
| 614 | 614 | |
|---|
| 615 | 615 | headroom += LL_RESERVED_SPACE(rt->dst.dev) + rt->dst.header_len; |
|---|
| 616 | | - if (headroom > dev->needed_headroom) |
|---|
| 617 | | - dev->needed_headroom = headroom; |
|---|
| 616 | + if (headroom > READ_ONCE(dev->needed_headroom)) |
|---|
| 617 | + WRITE_ONCE(dev->needed_headroom, headroom); |
|---|
| 618 | 618 | |
|---|
| 619 | | - if (skb_cow_head(skb, dev->needed_headroom)) { |
|---|
| 619 | + if (skb_cow_head(skb, READ_ONCE(dev->needed_headroom))) { |
|---|
| 620 | 620 | ip_rt_put(rt); |
|---|
| 621 | 621 | goto tx_dropped; |
|---|
| 622 | 622 | } |
|---|
| .. | .. |
|---|
| 797 | 797 | |
|---|
| 798 | 798 | max_headroom = LL_RESERVED_SPACE(rt->dst.dev) + sizeof(struct iphdr) |
|---|
| 799 | 799 | + rt->dst.header_len + ip_encap_hlen(&tunnel->encap); |
|---|
| 800 | | - if (max_headroom > dev->needed_headroom) |
|---|
| 801 | | - dev->needed_headroom = max_headroom; |
|---|
| 800 | + if (max_headroom > READ_ONCE(dev->needed_headroom)) |
|---|
| 801 | + WRITE_ONCE(dev->needed_headroom, max_headroom); |
|---|
| 802 | 802 | |
|---|
| 803 | | - if (skb_cow_head(skb, dev->needed_headroom)) { |
|---|
| 803 | + if (skb_cow_head(skb, READ_ONCE(dev->needed_headroom))) { |
|---|
| 804 | 804 | ip_rt_put(rt); |
|---|
| 805 | 805 | dev->stats.tx_dropped++; |
|---|
| 806 | 806 | kfree_skb(skb); |
|---|