diff options
| author | Junyuan Feng <a@lollipopkit.com> | 2026-09-23 09:20:44 +0000 |
|---|---|---|
| committer | Jens Axboe <axboe@kernel.dk> | 2026-09-28 08:28:28 -0600 |
| commit | 98ad5b63f5041dc354a6e694f4a9436f74e0681b (patch) | |
| tree | 92156c1a999d05a03f38e47edafacda2b99b3f2b /tools/lib/python/kdoc/python_version.py | |
| parent | a3bdf68feecc57af5c11fb599f860ac9790ffad9 (diff) | |
| download | linux-next-98ad5b63f5041dc354a6e694f4a9436f74e0681b.tar.gz linux-next-98ad5b63f5041dc354a6e694f4a9436f74e0681b.zip | |
io_uring/zcrx: requeue multishot receives stopped by a local resource
A multishot RECV_ZC can go idle with unread TCP data when a
receiver-local resource runs out. An empty copy-fallback niov freelist
returns -ENOMEM; a full CQ returns -ENOSPC. After partial progress the
stop reason is lost: io_zcrx_copy_chunk() and io_zcrx_recv_skb() report
the copied bytes, and tcp_read_sock() drops an error from a later call
once earlier data was consumed. The edge-triggered request is then not
requeued, so it cannot consume the remaining data until another socket
event arrives.
Record in io_zcrx_recv_skb() when a walk stops before consuming the
length it was offered, and requeue if the pass still returned data. The
failed chunk is first on the next pass. The resource is usually still
exhausted by then, so that pass fails at once and ends the request with
an error CQE, which the application must handle by re-arming. The
request does not spin, and the stall becomes a visible error. Keep the
existing skb limit and SOCK_DONE handling.
Fixes: 11ed914bbf94 ("io_uring/zcrx: add io_recvzc request")
Fixes: bc57c7d36c4c ("io_uring/zcrx: add copy fallback")
Cc: stable@vger.kernel.org
Assisted-by: Codex:gpt-6-sol
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Junyuan Feng <a@lollipopkit.com>
Reviewed-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://patch.msgid.link/010001a0cd914529-23df2f94-bbe0-49cd-ae5d-05922356fa12-000000@email.amazonses.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'tools/lib/python/kdoc/python_version.py')
0 files changed, 0 insertions, 0 deletions
