mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	io_uring: single shot poll removal optimisation
We don't need to poll oneshot request if we've got a desired mask in io_poll_wake(), task_work will clean it up correctly, but as we already hold a wq spinlock, we can remove ourselves and save on additional spinlocking in io_poll_remove_entries(). Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/ee170a344a18c9ef36b554d806c64caadfd61c31.1639605189.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
		
							parent
							
								
									aa43477b04
								
							
						
					
					
						commit
						eb0089d629
					
				
					 1 changed files with 7 additions and 1 deletions
				
			
		|  | @ -5568,8 +5568,14 @@ static int io_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync, | |||
| 	if (mask && !(mask & poll->events)) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	if (io_poll_get_ownership(req)) | ||||
| 	if (io_poll_get_ownership(req)) { | ||||
| 		/* optional, saves extra locking for removal in tw handler */ | ||||
| 		if (mask && poll->events & EPOLLONESHOT) { | ||||
| 			list_del_init(&poll->wait.entry); | ||||
| 			poll->head = NULL; | ||||
| 		} | ||||
| 		__io_poll_execute(req, mask); | ||||
| 	} | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Pavel Begunkov
						Pavel Begunkov