mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-03 18:20:25 +02:00 
			
		
		
		
	io_uring: defer msg-ring file validity check until command issue
In preparation for not using the file at prep time, defer checking if this file refers to a valid io_uring instance until issue time. Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
		
							parent
							
								
									9666d4206e
								
							
						
					
					
						commit
						3f1d52abf0
					
				
					 1 changed files with 7 additions and 4 deletions
				
			
		| 
						 | 
					@ -4473,9 +4473,6 @@ static int io_msg_ring_prep(struct io_kiocb *req,
 | 
				
			||||||
		     sqe->splice_fd_in || sqe->buf_index || sqe->personality))
 | 
							     sqe->splice_fd_in || sqe->buf_index || sqe->personality))
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (req->file->f_op != &io_uring_fops)
 | 
					 | 
				
			||||||
		return -EBADFD;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	req->msg.user_data = READ_ONCE(sqe->off);
 | 
						req->msg.user_data = READ_ONCE(sqe->off);
 | 
				
			||||||
	req->msg.len = READ_ONCE(sqe->len);
 | 
						req->msg.len = READ_ONCE(sqe->len);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					@ -4485,9 +4482,14 @@ static int io_msg_ring(struct io_kiocb *req, unsigned int issue_flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct io_ring_ctx *target_ctx;
 | 
						struct io_ring_ctx *target_ctx;
 | 
				
			||||||
	struct io_msg *msg = &req->msg;
 | 
						struct io_msg *msg = &req->msg;
 | 
				
			||||||
	int ret = -EOVERFLOW;
 | 
					 | 
				
			||||||
	bool filled;
 | 
						bool filled;
 | 
				
			||||||
 | 
						int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret = -EBADFD;
 | 
				
			||||||
 | 
						if (req->file->f_op != &io_uring_fops)
 | 
				
			||||||
 | 
							goto done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret = -EOVERFLOW;
 | 
				
			||||||
	target_ctx = req->file->private_data;
 | 
						target_ctx = req->file->private_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spin_lock(&target_ctx->completion_lock);
 | 
						spin_lock(&target_ctx->completion_lock);
 | 
				
			||||||
| 
						 | 
					@ -4500,6 +4502,7 @@ static int io_msg_ring(struct io_kiocb *req, unsigned int issue_flags)
 | 
				
			||||||
		ret = 0;
 | 
							ret = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					done:
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
		req_set_fail(req);
 | 
							req_set_fail(req);
 | 
				
			||||||
	__io_req_complete(req, issue_flags, ret, 0);
 | 
						__io_req_complete(req, issue_flags, ret, 0);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue