diff --git a/io_uring/net.c b/io_uring/net.c index efd54aaf50eb..ebd4ab81467c 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -1522,6 +1522,11 @@ int io_connect(struct io_kiocb *req, unsigned int issue_flags) io = &__io; } + if (unlikely(req->flags & REQ_F_FAIL)) { + ret = -ECONNRESET; + goto out; + } + file_flags = force_nonblock ? O_NONBLOCK : 0; ret = __sys_connect_file(req->file, &io->address, diff --git a/io_uring/poll.c b/io_uring/poll.c index d1077577c6b9..645ea9a7e2a5 100644 --- a/io_uring/poll.c +++ b/io_uring/poll.c @@ -313,6 +313,8 @@ static int io_poll_check_events(struct io_kiocb *req, struct io_tw_state *ts) return IOU_POLL_REISSUE; } } + if (unlikely(req->cqe.res & EPOLLERR)) + req_set_fail(req); if (req->apoll_events & EPOLLONESHOT) return IOU_POLL_DONE;