Instead of open-coding making the checksum writable we can use an
appropriate helper. skb_ensure_writable is a candidate, however we
might also use skb_header_unclone. Hints welcome.

Signed-off-by: Heiner Kallweit <hkallwe...@gmail.com>
---
 net/core/dev.c | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index fc676b261..90516a800 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2939,12 +2939,9 @@ int skb_checksum_help(struct sk_buff *skb)
        offset += skb->csum_offset;
        BUG_ON(offset + sizeof(__sum16) > skb_headlen(skb));
 
-       if (skb_cloned(skb) &&
-           !skb_clone_writable(skb, offset + sizeof(__sum16))) {
-               ret = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
-               if (ret)
-                       goto out;
-       }
+       ret = skb_ensure_writable(skb, offset + sizeof(__sum16));
+       if (ret)
+               goto out;
 
        *(__sum16 *)(skb->data + offset) = csum_fold(csum) ?: CSUM_MANGLED_0;
 out_set_summed:
@@ -2979,12 +2976,11 @@ int skb_crc32c_csum_help(struct sk_buff *skb)
                ret = -EINVAL;
                goto out;
        }
-       if (skb_cloned(skb) &&
-           !skb_clone_writable(skb, offset + sizeof(__le32))) {
-               ret = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
-               if (ret)
-                       goto out;
-       }
+
+       ret = skb_ensure_writable(skb, offset + sizeof(__le32));
+       if (ret)
+               goto out;
+
        crc32c_csum = cpu_to_le32(~__skb_checksum(skb, start,
                                                  skb->len - start, ~(__u32)0,
                                                  crc32c_csum_stub));
-- 
2.22.0

Reply via email to