srcu: Check for readers at module-exit time
authorPaul E. McKenney <paulmck@kernel.org>
Fri, 24 Mar 2023 16:05:50 +0000 (09:05 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Tue, 4 Apr 2023 15:36:43 +0000 (08:36 -0700)
commita7bf4d7c16c1cf9753873879630a5d5169eb3206
treeaf06eeafeb3848e5b55fcb641187121c90d387f3
parentfd1b3f8e097b7fbbab8ac4a802b24fc23c703dcf
srcu: Check for readers at module-exit time

If a given statically allocated in-module srcu_struct structure was ever
used for updates, srcu_module_going() will invoke cleanup_srcu_struct()
at module-exit time.  This will check for the error case of SRCU readers
persisting past module-exit time.  On the other hand, if this srcu_struct
structure never went through a grace period, srcu_module_going() only
invokes free_percpu(), which would result in strange failures if SRCU
readers persisted past module-exit time.

This commit therefore adds a srcu_readers_active() check to
srcu_module_going(), splatting if readers have persisted and refraining
from invoking free_percpu() in that case.  Better to leak memory than
to suffer silent memory corruption!

[ paulmck: Apply Zhang, Qiang1 feedback on memory leak. ]

Tested-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/srcutree.c