mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	io_uring: do not recycle buffer in READV
READV cannot recycle buffers as it would lose some of the data required to
reimport that buffer.
Reported-by: Ammar Faizi <ammarfaizi2@gnuweeb.org>
Fixes: b66e65f414 ("io_uring: never call io_buffer_select() for a buffer re-select")
Signed-off-by: Dylan Yudaken <dylany@fb.com>
Link: https://lore.kernel.org/r/20220721131325.624788-1-dylany@fb.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
			
			
This commit is contained in:
		
							parent
							
								
									ec8516f3b7
								
							
						
					
					
						commit
						934447a603
					
				
					 1 changed files with 8 additions and 0 deletions
				
			
		|  | @ -1737,6 +1737,14 @@ static void io_kbuf_recycle(struct io_kiocb *req, unsigned issue_flags) | |||
| 	    (req->flags & REQ_F_PARTIAL_IO)) | ||||
| 		return; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * READV uses fields in `struct io_rw` (len/addr) to stash the selected | ||||
| 	 * buffer data. However if that buffer is recycled the original request | ||||
| 	 * data stored in addr is lost. Therefore forbid recycling for now. | ||||
| 	 */ | ||||
| 	if (req->opcode == IORING_OP_READV) | ||||
| 		return; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * We don't need to recycle for REQ_F_BUFFER_RING, we can just clear | ||||
| 	 * the flag and hence ensure that bl->head doesn't get incremented. | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Dylan Yudaken
						Dylan Yudaken