.. | .. |
---|
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); |
---|