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>
This commit is contained in:
parent
fd1b3f8e09
commit
a7bf4d7c16
@ -1911,7 +1911,8 @@ static void srcu_module_going(struct module *mod)
|
||||
if (!rcu_seq_state(smp_load_acquire(&ssp->srcu_sup->srcu_gp_seq_needed)) &&
|
||||
!WARN_ON_ONCE(!ssp->srcu_sup->sda_is_static))
|
||||
cleanup_srcu_struct(ssp);
|
||||
free_percpu(ssp->sda);
|
||||
if (!WARN_ON(srcu_readers_active(ssp)))
|
||||
free_percpu(ssp->sda);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user