On 04/03/2020 02:50, Jens Axboe wrote: > In preparation for not needing req->file in on the prep side at all. > > Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> > --- > fs/io_uring.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/fs/io_uring.c b/fs/io_uring.c > index 0464efbeba25..9d5e49a39dba 100644 > --- a/fs/io_uring.c > +++ b/fs/io_uring.c > @@ -3367,10 +3367,6 @@ static int io_close_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) > return -EBADF; > > req->close.fd = READ_ONCE(sqe->fd); > - if (req->file->f_op == &io_uring_fops || > - req->close.fd == req->ctx->ring_fd) > - return -EBADF; > - > return 0; > } > > @@ -3400,6 +3396,10 @@ static int io_close(struct io_kiocb *req, bool force_nonblock) > { > int ret; > > + if (req->file->f_op == &io_uring_fops || > + req->close.fd == req->ctx->ring_fd) > + return -EBADF; > + @ring_fd's and @ring_file's lifetimes are bound by call to io_submit_sqes(), and they're undefined outside. For the same reason both of them should be used with ctx->uring_lock hold. > req->close.put_file = NULL; > ret = __close_fd_get_file(req->close.fd, &req->close.put_file); > if (ret < 0) > -- Pavel Begunkov