If many callbacks have been queued and waking up the nocb leader should
be deferred, then we should wake up the leader unconditionally when
it's safe to do so.

It was well managed in commit fbce7497ee(rcu: Parallelize and economize
NOCB kthread wakeups) at first, but the commit 8be6e1b15c(rcu: Use timer
as backstop for NOCB deferred wakeups) made a mistake which passed
RCU_NOCB_WAKE instead of RCU_NOCB_WAKE_FORCE as a parameter. Fix it.

Signed-off-by: Byungchul Park <byungchul.p...@lge.com>
---
 kernel/rcu/tree_plugin.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index b0d7f9b..c06cf87 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -1987,7 +1987,7 @@ static void __call_rcu_nocb_enqueue(struct rcu_data *rdp,
                        trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu,
                                            TPS("WakeOvf"));
                } else {
-                       wake_nocb_leader_defer(rdp, RCU_NOCB_WAKE,
+                       wake_nocb_leader_defer(rdp, RCU_NOCB_WAKE_FORCE,
                                               TPS("WakeOvfIsDeferred"));
                }
                rdp->qlen_last_fqs_check = LONG_MAX / 2;
-- 
1.9.1

Reply via email to