On 5/31/24 3:12 PM, Gabriel Krisman Bertazi wrote: > +int io_bind_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) > +{ > + struct io_bind *bind = io_kiocb_to_cmd(req, struct io_bind); > + struct sockaddr __user *uaddr; > + struct io_async_msghdr *io; > + int ret; > + > + if (sqe->len || sqe->buf_index || sqe->rw_flags || sqe->splice_fd_in) > + return -EINVAL; > + > + uaddr = u64_to_user_ptr(READ_ONCE(sqe->addr)); > + bind->addr_len = READ_ONCE(sqe->addr2); > + > + io = io_msg_alloc_async(req); > + if (unlikely(!io)) > + return -ENOMEM; > + > + ret = move_addr_to_kernel(uaddr, bind->addr_len, &io->addr); > + if (ret) > + io_req_msg_cleanup(req, 0); > + return ret; > +} As mentioned in the other patch, I think this can just be: return move_addr_to_kernel(uaddr, bind->addr_len, &io->addr); } and have normal cleanup take care of it. > +int io_bind(struct io_kiocb *req, unsigned int issue_flags) > +{ > + struct io_bind *bind = io_kiocb_to_cmd(req, struct io_bind); > + struct io_async_msghdr *io = req->async_data; > + int ret; > + > + ret = __sys_bind_socket(sock_from_file(req->file), &io->addr, bind->addr_len); > + if (ret < 0) > + req_set_fail(req); > + io_req_set_res(req, ret, 0); > + > + return 0; > +} Kill the empty line before return. Outside of those minor nits, patch looks good! -- Jens Axboe