diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2025-07-18 12:21:26 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2025-07-18 12:21:26 -0700 |
commit | e347810e84094078d155663acbf36d82efe91f95 (patch) | |
tree | f0e7296f5f9870b51b6568fa8146ba15a34bf52e /io_uring/net.c | |
parent | e5ac874257bf06eba00282e5b627f23b72ac8f7d (diff) | |
parent | c7cafd5b81cc07fb402e3068d134c21e60ea688c (diff) |
Merge tag 'io_uring-6.16-20250718' of git://git.kernel.dk/linux
Pull io_uring fixes from Jens Axboe:
- dmabug offset fix for zcrx
- Fix for the POLLERR connect work around handling
* tag 'io_uring-6.16-20250718' of git://git.kernel.dk/linux:
io_uring/poll: fix POLLERR handling
io_uring/zcrx: disallow user selected dmabuf offset and size
Diffstat (limited to 'io_uring/net.c')
-rw-r--r-- | io_uring/net.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/io_uring/net.c b/io_uring/net.c index 43a43522f406..bec8c6ed0a93 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -1738,9 +1738,11 @@ int io_connect(struct io_kiocb *req, unsigned int issue_flags) int ret; bool force_nonblock = issue_flags & IO_URING_F_NONBLOCK; - if (unlikely(req->flags & REQ_F_FAIL)) { - ret = -ECONNRESET; - goto out; + if (connect->in_progress) { + struct poll_table_struct pt = { ._key = EPOLLERR }; + + if (vfs_poll(req->file, &pt) & EPOLLERR) + goto get_sock_err; } file_flags = force_nonblock ? O_NONBLOCK : 0; @@ -1765,8 +1767,10 @@ int io_connect(struct io_kiocb *req, unsigned int issue_flags) * which means the previous result is good. For both of these, * grab the sock_error() and use that for the completion. */ - if (ret == -EBADFD || ret == -EISCONN) + if (ret == -EBADFD || ret == -EISCONN) { +get_sock_err: ret = sock_error(sock_from_file(req->file)->sk); + } } if (ret == -ERESTARTSYS) ret = -EINTR; |