forked from mirrors/linux
		
	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)) | 	    (req->flags & REQ_F_PARTIAL_IO)) | ||||||
| 		return; | 		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 | 	 * 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. | 	 * the flag and hence ensure that bl->head doesn't get incremented. | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Dylan Yudaken
						Dylan Yudaken