kvfree_rcu: Update "monitor_todo" once a batch is started
authorUladzislau Rezki (Sony) <urezki@gmail.com>
Thu, 15 Apr 2021 17:19:59 +0000 (19:19 +0200)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 10 May 2021 23:00:48 +0000 (16:00 -0700)
Before attempting to start a new batch the "monitor_todo" variable is
set to "false" and set back to "true" when a previous RCU batch is still
in progress.  This is at best confusing.

Thus change this variable to "false" only when a new batch has been
successfully queued, otherwise, just leave it be.

Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/tree.c

index e86f32d..1ae5f88 100644 (file)
@@ -3442,15 +3442,14 @@ static inline void kfree_rcu_drain_unlock(struct kfree_rcu_cpu *krcp,
                                          unsigned long flags)
 {
        // Attempt to start a new batch.
-       krcp->monitor_todo = false;
        if (queue_kfree_rcu_work(krcp)) {
                // Success! Our job is done here.
+               krcp->monitor_todo = false;
                raw_spin_unlock_irqrestore(&krcp->lock, flags);
                return;
        }
 
        // Previous RCU batch still in progress, try again later.
-       krcp->monitor_todo = true;
        schedule_delayed_work(&krcp->monitor_work, KFREE_DRAIN_JIFFIES);
        raw_spin_unlock_irqrestore(&krcp->lock, flags);
 }