diff --git a/io_uring/msg_ring.c b/io_uring/msg_ring.c index e63af34004b7..333c220d322a 100644 --- a/io_uring/msg_ring.c +++ b/io_uring/msg_ring.c @@ -333,7 +333,6 @@ int io_msg_ring(struct io_kiocb *req, unsigned int issue_flags) int io_uring_sync_msg_ring(struct io_uring_sqe *sqe) { struct io_msg io_msg = { }; - struct fd f; int ret; ret = __io_msg_ring_prep(&io_msg, sqe); @@ -347,16 +346,13 @@ int io_uring_sync_msg_ring(struct io_uring_sqe *sqe) if (io_msg.cmd != IORING_MSG_DATA) return -EINVAL; - ret = -EBADF; - f = fdget(sqe->fd); - if (fd_file(f)) { - ret = -EBADFD; - if (io_is_uring_fops(fd_file(f))) - ret = __io_msg_ring_data(fd_file(f)->private_data, - &io_msg, IO_URING_F_UNLOCKED); - fdput(f); - } - return ret; + CLASS(fd, f)(sqe->fd); + if (fd_empty(f)) + return -EBADF; + if (!io_is_uring_fops(fd_file(f))) + return -EBADFD; + return __io_msg_ring_data(fd_file(f)->private_data, + &io_msg, IO_URING_F_UNLOCKED); } void io_msg_cache_free(const void *entry)