mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	epoll: lock ep->mtx in ep_free to silence lockdep
Technically we do not need to hold ep->mtx during ep_free since we are certain there are no other users of ep at that point. However, lockdep complains with a "suspicious rcu_dereference_check() usage!" message; so lock the mutex before ep_remove to silence the warning. Signed-off-by: Eric Wong <normalperson@yhbt.net> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Arve Hjønnevåg <arve@android.com> Cc: Davide Libenzi <davidel@xmailserver.org> Cc: Eric Dumazet <eric.dumazet@gmail.com> Cc: NeilBrown <neilb@suse.de>, Cc: Rafael J. Wysocki <rjw@sisk.pl> Cc: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									eea1d58591
								
							
						
					
					
						commit
						ddf676c38b
					
				
					 1 changed files with 4 additions and 0 deletions
				
			
		|  | @ -745,11 +745,15 @@ static void ep_free(struct eventpoll *ep) | |||
| 	 * point we are sure no poll callbacks will be lingering around, and also by | ||||
| 	 * holding "epmutex" we can be sure that no file cleanup code will hit | ||||
| 	 * us during this operation. So we can avoid the lock on "ep->lock". | ||||
| 	 * We do not need to lock ep->mtx, either, we only do it to prevent | ||||
| 	 * a lockdep warning. | ||||
| 	 */ | ||||
| 	mutex_lock(&ep->mtx); | ||||
| 	while ((rbp = rb_first(&ep->rbr)) != NULL) { | ||||
| 		epi = rb_entry(rbp, struct epitem, rbn); | ||||
| 		ep_remove(ep, epi); | ||||
| 	} | ||||
| 	mutex_unlock(&ep->mtx); | ||||
| 
 | ||||
| 	mutex_unlock(&epmutex); | ||||
| 	mutex_destroy(&ep->mtx); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Eric Wong
						Eric Wong