|
@@ -776,8 +776,16 @@ static void ip_vs_conn_expire(unsigned long data)
|
|
if (cp->control)
|
|
if (cp->control)
|
|
ip_vs_control_del(cp);
|
|
ip_vs_control_del(cp);
|
|
|
|
|
|
- if (cp->flags & IP_VS_CONN_F_NFCT)
|
|
|
|
|
|
+ if (cp->flags & IP_VS_CONN_F_NFCT) {
|
|
ip_vs_conn_drop_conntrack(cp);
|
|
ip_vs_conn_drop_conntrack(cp);
|
|
|
|
+ /* Do not access conntracks during subsys cleanup
|
|
|
|
+ * because nf_conntrack_find_get can not be used after
|
|
|
|
+ * conntrack cleanup for the net.
|
|
|
|
+ */
|
|
|
|
+ smp_rmb();
|
|
|
|
+ if (ipvs->enable)
|
|
|
|
+ ip_vs_conn_drop_conntrack(cp);
|
|
|
|
+ }
|
|
|
|
|
|
ip_vs_pe_put(cp->pe);
|
|
ip_vs_pe_put(cp->pe);
|
|
kfree(cp->pe_data);
|
|
kfree(cp->pe_data);
|