diff options
-rw-r--r-- | net/ipv4/ipvs/ip_vs_est.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/ipv4/ipvs/ip_vs_est.c b/net/ipv4/ipvs/ip_vs_est.c index bc04eedd6dbb..1d6e58e502fd 100644 --- a/net/ipv4/ipvs/ip_vs_est.c +++ b/net/ipv4/ipvs/ip_vs_est.c | |||
@@ -170,8 +170,11 @@ void ip_vs_kill_estimator(struct ip_vs_stats *stats) | |||
170 | kfree(est); | 170 | kfree(est); |
171 | killed++; | 171 | killed++; |
172 | } | 172 | } |
173 | if (killed && est_list == NULL) | 173 | while (killed && !est_list && try_to_del_timer_sync(&est_timer) < 0) { |
174 | del_timer_sync(&est_timer); | 174 | write_unlock_bh(&est_lock); |
175 | cpu_relax(); | ||
176 | write_lock_bh(&est_lock); | ||
177 | } | ||
175 | write_unlock_bh(&est_lock); | 178 | write_unlock_bh(&est_lock); |
176 | } | 179 | } |
177 | 180 | ||