0 - disabled
        not 0 - enabled (default)
 
-       If disabled, the estimation will be stop, and you can't see
-       any update on speed estimation data.
+       If disabled, the estimation will be suspended and kthread tasks
+       stopped.
 
        You can always re-enable estimation by setting this value to 1.
        But be careful, the first estimation after re-enable is not
 
 static inline void ip_vs_est_stopped_recalc(struct netns_ipvs *ipvs)
 {
 #ifdef CONFIG_SYSCTL
-       ipvs->est_stopped = ipvs->est_cpulist_valid &&
-                           cpumask_empty(sysctl_est_cpulist(ipvs));
+       /* Stop tasks while cpulist is empty or if disabled with flag */
+       ipvs->est_stopped = !sysctl_run_estimation(ipvs) ||
+                           (ipvs->est_cpulist_valid &&
+                            cpumask_empty(sysctl_est_cpulist(ipvs)));
 #endif
 }
 
 
        return ret;
 }
 
+static int ipvs_proc_run_estimation(struct ctl_table *table, int write,
+                                   void *buffer, size_t *lenp, loff_t *ppos)
+{
+       struct netns_ipvs *ipvs = table->extra2;
+       int *valp = table->data;
+       int val = *valp;
+       int ret;
+
+       struct ctl_table tmp_table = {
+               .data = &val,
+               .maxlen = sizeof(int),
+               .mode = table->mode,
+       };
+
+       ret = proc_dointvec(&tmp_table, write, buffer, lenp, ppos);
+       if (write && ret >= 0) {
+               mutex_lock(&ipvs->est_mutex);
+               if (*valp != val) {
+                       *valp = val;
+                       ip_vs_est_reload_start(ipvs);
+               }
+               mutex_unlock(&ipvs->est_mutex);
+       }
+       return ret;
+}
+
 /*
  *     IPVS sysctl table (under the /proc/sys/net/ipv4/vs/)
  *     Do not change order or insert new entries without
                .procname       = "run_estimation",
                .maxlen         = sizeof(int),
                .mode           = 0644,
-               .proc_handler   = proc_dointvec,
+               .proc_handler   = ipvs_proc_run_estimation,
        },
        {
                .procname       = "est_cpulist",
        tbl[idx++].data = &ipvs->sysctl_schedule_icmp;
        tbl[idx++].data = &ipvs->sysctl_ignore_tunneled;
        ipvs->sysctl_run_estimation = 1;
+       tbl[idx].extra2 = ipvs;
        tbl[idx++].data = &ipvs->sysctl_run_estimation;
 
        ipvs->est_cpulist_valid = 0;