Re: [BUG] srcu: false-positive WARN in cleanup_srcu_struct() after 78a38cbf6f20

From: Sunho Park

Date: Thu Aug 27 2026 - 09:09:14 EST


On 8/27/26 21:40, Zqiang wrote:
Now, I am trying to rephrase your problem in the following way:

1- the step1 call_srcu() trigger SRCU grace period has been end and queue sdp->work.
2- the step4 queue srcu callback has been intercepted by step5 srcu_barrier()
and start a new SRCU grace period.
3- this new SRCU grace period end, and invoke rcu_seq_end(&sup->srcu_gp_seq), queue a timer.
4- the sdp->work begin run, and call srcu_segcblist_advance() with current sup->srcu_gp_seq.
so the step4's srcu callback and step5's barrier calback both to be run.
all callback finished, but the len not yet update.
5- the srcu_barrier() return, begin call srcu_clean_up(), and then the srcu_clean_up
find the a timer is still pending and the cb_len also not be zero, trigger WARN_ON()

right?
Exactly. The real callbacks are properly invoked as srcu_barrier() guarantees. The WARN is triggered only by the two transient states: a pending delay_work timer and a stale cblist len. So I think this is a false positive warning.

Sorry if my explanations were too wordy.

Thanks
Sunho Park