kmod_dup_request_delete() calls synchronize_rcu() while holding kmod_dup_mutex. This is unnecessary since list_del_rcu() only needs the mutex for list manipulation, and the RCU grace period just needs to complete before kfree(). Holding the mutex across the grace period blocks all other kmod_dup_mutex users for the duration, causing unnecessary latency.
Move synchronize_rcu() after the mutex is released. Signed-off-by: Naveen Kumar Chaudhary <[email protected]> --- kernel/module/dups.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/module/dups.c b/kernel/module/dups.c index 1d720a5311ba..46e74c06ed52 100644 --- a/kernel/module/dups.c +++ b/kernel/module/dups.c @@ -88,8 +88,8 @@ static void kmod_dup_request_delete(struct work_struct *work) */ mutex_lock(&kmod_dup_mutex); list_del_rcu(&kmod_req->list); - synchronize_rcu(); mutex_unlock(&kmod_dup_mutex); + synchronize_rcu(); kfree(kmod_req); } -- 2.43.0
