]> git.proxmox.com Git - ovs.git/commitdiff
compat: Fix up changes to inet frags in 5.1+
authorGreg Rose <gvrose8192@gmail.com>
Fri, 6 Mar 2020 22:37:14 +0000 (14:37 -0800)
committerBen Pfaff <blp@ovn.org>
Fri, 6 Mar 2020 22:39:24 +0000 (14:39 -0800)
Since Linux kernel release 5.1 the fragments field of the inet_frag_queue
structure is removed and now only the rb_fragments structure with an
rb_node pointer is used for both ipv4 and ipv6.  In addition, the
atomic_sub and atomic_add functions are replaced with their
equivalent long counterparts.

Acked-by: Yi-Hung Wei <yihung.wei@gmail.com>
Signed-off-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
acinclude.m4
datapath/linux/compat/include/net/inet_frag.h

index 03d3484c9e4d1d845c1961c29f48ccb0874adab2..3a555ad930ae0ba69828d1504af191dba0ec7bf2 100644 (file)
@@ -1048,6 +1048,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
                   [OVS_DEFINE([HAVE_RBTREE_RB_LINK_NODE_RCU])])
   OVS_GREP_IFELSE([$KSRC/include/net/dst_ops.h], [bool confirm_neigh],
                   [OVS_DEFINE([HAVE_DST_OPS_CONFIRM_NEIGH])])
+  OVS_GREP_IFELSE([$KSRC/include/net/inet_frag.h], [fqdir],
+                  [OVS_DEFINE([HAVE_INET_FRAG_FQDIR])])
 
   if cmp -s datapath/linux/kcompat.h.new \
             datapath/linux/kcompat.h >/dev/null 2>&1; then
index 124c8bea7c5698fa08fb1909e1bc8f671d866a7a..00784da2b7297efa14dcae8dce087e8882961660 100644 (file)
@@ -12,6 +12,7 @@
 #define qp_flags(qp) (qp->q.flags)
 #endif
 
+#ifndef HAVE_CORRECT_MRU_HANDLING
 #ifndef HAVE_INET_FRAG_EVICTING
 static inline bool inet_frag_evicting(struct inet_frag_queue *q)
 {
@@ -22,6 +23,7 @@ static inline bool inet_frag_evicting(struct inet_frag_queue *q)
 #endif /* HAVE_INET_FRAG_QUEUE_WITH_LIST_EVICTOR */
 }
 #endif /* HAVE_INET_FRAG_EVICTING */
+#endif /* HAVE_CORRECT_MRU_HANDLING */
 
 /* Upstream commit 3fd588eb90bf ("inet: frag: remove lru list") dropped this
  * function, but we call it from our compat code. Provide a noop version. */
@@ -29,6 +31,10 @@ static inline bool inet_frag_evicting(struct inet_frag_queue *q)
 #define inet_frag_lru_move(q)
 #endif
 
+#ifdef HAVE_INET_FRAG_FQDIR
+#define netns_frags fqdir
+#endif
+
 #ifndef HAVE_SUB_FRAG_MEM_LIMIT_ARG_STRUCT_NETNS_FRAGS
 #ifdef HAVE_FRAG_PERCPU_COUNTER_BATCH
 static inline void rpl_sub_frag_mem_limit(struct netns_frags *nf, int i)
@@ -45,13 +51,21 @@ static inline void rpl_add_frag_mem_limit(struct netns_frags *nf, int i)
 #else /* !frag_percpu_counter_batch */
 static inline void rpl_sub_frag_mem_limit(struct netns_frags *nf, int i)
 {
+#ifdef HAVE_INET_FRAG_FQDIR
+       atomic_long_sub(i, &nf->mem);
+#else
        atomic_sub(i, &nf->mem);
+#endif
 }
 #define sub_frag_mem_limit rpl_sub_frag_mem_limit
 
 static inline void rpl_add_frag_mem_limit(struct netns_frags *nf, int i)
 {
+#ifdef HAVE_INET_FRAG_FQDIR
+       atomic_long_add(i, &nf->mem);
+#else
        atomic_add(i, &nf->mem);
+#endif
 }
 #define add_frag_mem_limit rpl_add_frag_mem_limit
 #endif /* frag_percpu_counter_batch */