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.
Also remove the prior, and now unnecessary, work around. VMware BZ 2094203 Fixes: 595e069a ("compat: Backport IPv4 reassembly.") Signed-off-by: Greg Rose <gvrose8...@gmail.com> --- datapath/datapath.c | 10 ---------- datapath/linux/compat/ip_fragment.c | 3 +++ datapath/linux/compat/nf_conntrack_reasm.c | 3 +++ 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/datapath/datapath.c b/datapath/datapath.c index 43f0d74..3ea240a 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -2478,16 +2478,6 @@ error: static void dp_cleanup(void) { -#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(8,0) - /* On RHEL 7.x kernels we hit a kernel paging error without - * this barrier and subsequent hefty delay. A process will - * attempt to access openvwitch memory after it has been - * unloaded. Further debugging is needed on that but for - * now let's not let customer machines panic. - */ - rcu_barrier(); - msleep(3000); -#endif dp_unregister_genl(ARRAY_SIZE(dp_genl_families)); ovs_netdev_exit(); unregister_netdevice_notifier(&ovs_dp_device_notifier); diff --git a/datapath/linux/compat/ip_fragment.c b/datapath/linux/compat/ip_fragment.c index 8f2012b..f910b99 100644 --- 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 if (inet_frags_init(&ip4_frags)) { pr_warn("IP: failed to allocate ip4_frags cache\n"); return -ENOMEM; diff --git a/datapath/linux/compat/nf_conntrack_reasm.c b/datapath/linux/compat/nf_conntrack_reasm.c index ea153c3..ce13112 100644 --- 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 ret = inet_frags_init(&nf_frags); if (ret) goto out; -- 1.8.3.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev