On 7/20/2018 2:00 PM, Yi-Hung Wei wrote:
On Thu, Jul 19, 2018 at 6:48 PM, Greg Rose <gvrose8...@gmail.com> wrote:
The RHEL 7 kernels expect the secret timer interval to be initialized
before calling the inet_frags_init() function.  By not initializing it
the inet_frags_secret_rebuild() function was running on every tick
rather than on the expected interval.  This caused occasional panics
from page faults when inet_frags_secret_rebuild() would try to rearm a
timer from the openvswitch kernel module which had just been removed.
Thanks Greg for the patch.  The bug hides much deeper than I would expect.

Also remove the prior, and now unnecessary, work around.

VMware BZ 2094203
A minor nit, maybe VMware-BZ: #2094203

I'm fine with that.  I wasn't aware of any specific format.


--- a/datapath/linux/compat/ip_fragment.c
+++ b/datapath/linux/compat/ip_fragment.c
@@ -812,6 +812,9 @@ int __init rpl_ipfrag_init(void)
  #ifdef HAVE_INET_FRAGS_WITH_FRAGS_WORK
         ip4_frags.frags_cache_name = ip_frag_cache_name;
  #endif
+#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(8,0)
+       ip4_frags.secret_interval = 10 * 60 * HZ;
+#endif
This is a great catch!  Looks like we remove the secret_interval in
net-next commit
e3a57d18b061 ("inet: frag: remove periodic secret rebuild timer")
But somehow RHEL kernel still retain this field, and the
secret_interval was set to 10 * 60 * HZ.

I would recommend to set 'secret_interval' by grepping this filed in
'struct inet_frags' rather than by kernel version. So that if RHEL 8
kernel still have this field, your fix will apply.

That's a good point to raise.

My thinking was to specifically call it out for RHEL 7 because it hasn't been in the kernel since 3.16 and this bug is RHEL 7 specific. That's a long way back and I'm sure it will not be there in the RHEL 8 kernel.  This makes it clear that it is only for RHEL 7 and nothing else.

However, if you and others feel strongly about it I don't mind making the change.


--- a/datapath/linux/compat/nf_conntrack_reasm.c
+++ b/datapath/linux/compat/nf_conntrack_reasm.c
@@ -643,6 +643,9 @@ int rpl_nf_ct_frag6_init(void)
  #ifdef HAVE_INET_FRAGS_WITH_FRAGS_WORK
         nf_frags.frags_cache_name = nf_frags_cache_name;
  #endif
+#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(8,0)
+       nf_frags.secret_interval = 10 * 60 * HZ;
+#endif
Same for here.

-Yi-Hung

Thanks for the review!  I'll wait another day or two to get more feedback.

- Greg
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to