diff mbox

[ovs-dev,04/11] compat: convert many more places to skb_put_zero().

Message ID 20170721234614.2800-5-joe@ovn.org
State Accepted
Headers show

Commit Message

Joe Stringer July 21, 2017, 11:46 p.m. UTC
Upstream commit:
    commit de77b966ce8adcb4c58d50e2f087320d5479812a
    Author: Johannes Berg <johannes.berg@intel.com>
    Date: Fri Jun 16 14:29:19 2017 +0200

    networking: convert many more places to skb_put_zero()

    There were many places that my previous spatch didn't find,
    as pointed out by yuan linyu in various patches.

    The following spatch found many more and also removes the
    now unnecessary casts:

        @@
        identifier p, p2;
        expression len;
        expression skb;
        type t, t2;
        @@
        (
        -p = skb_put(skb, len);
        +p = skb_put_zero(skb, len);
        |
        -p = (t)skb_put(skb, len);
        +p = skb_put_zero(skb, len);
        )
        ... when != p
        (
        p2 = (t2)p;
        -memset(p2, 0, len);
        |
        -memset(p, 0, len);
        )

        @@
        type t, t2;
        identifier p, p2;
        expression skb;
        @@
        t *p;
        ...
        (
        -p = skb_put(skb, sizeof(t));
        +p = skb_put_zero(skb, sizeof(t));
        |
        -p = (t *)skb_put(skb, sizeof(t));
        +p = skb_put_zero(skb, sizeof(t));
        )
        ... when != p
        (
        p2 = (t2)p;
        -memset(p2, 0, sizeof(*p));
        |
        -memset(p, 0, sizeof(*p));
        )

        @@
        expression skb, len;
        @@
        -memset(skb_put(skb, len), 0, len);
        +skb_put_zero(skb, len);

    Apply it to the tree (with one manual fixup to keep the
    comment in vxlan.c, which spatch removed.)

    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Use e45a79da863c ("skbuff/mac80211: introduce and use skb_put_zero()")
as the basis for the backported function.

Upstream: de77b966ce8a ("networking: convert many more places to skb_put_zero()")
Signed-off-by: Joe Stringer <joe@ovn.org>
---
 acinclude.m4                                 |  1 +
 datapath/datapath.c                          |  2 +-
 datapath/linux/compat/include/linux/skbuff.h | 12 ++++++++++++
 3 files changed, 14 insertions(+), 1 deletion(-)
diff mbox

Patch

diff --git a/acinclude.m4 b/acinclude.m4
index 934137e25af4..99326824923c 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -653,6 +653,7 @@  AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
   OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_postpush_rcsum])
   OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [lco_csum])
   OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_nfct])
+  OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_put_zero])
 
   OVS_GREP_IFELSE([$KSRC/include/linux/types.h], [bool],
                   [OVS_DEFINE([HAVE_BOOL_TYPE])])
diff --git a/datapath/datapath.c b/datapath/datapath.c
index 6d252d7516d3..2b7e8c72f2dd 100644
--- a/datapath/datapath.c
+++ b/datapath/datapath.c
@@ -420,7 +420,7 @@  static void pad_packet(struct datapath *dp, struct sk_buff *skb)
 		size_t plen = NLA_ALIGN(skb->len) - skb->len;
 
 		if (plen > 0)
-			memset(skb_put(skb, plen), 0, plen);
+			skb_put_zero(skb, plen);
 	}
 }
 
diff --git a/datapath/linux/compat/include/linux/skbuff.h b/datapath/linux/compat/include/linux/skbuff.h
index 2a6cf2ffa456..2910f3f3575c 100644
--- a/datapath/linux/compat/include/linux/skbuff.h
+++ b/datapath/linux/compat/include/linux/skbuff.h
@@ -387,4 +387,16 @@  static inline struct nf_conntrack *skb_nfct(const struct sk_buff *skb)
 #endif
 }
 #endif
+
+#ifndef HAVE_SKB_PUT_ZERO
+static inline void *skb_put_zero(struct sk_buff *skb, unsigned int len)
+{
+	void *tmp = skb_put(skb, len);
+
+	memset(tmp, 0, len);
+
+	return tmp;
+}
+#endif
+
 #endif