mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-11-01 09:13:37 +00:00
io_uring/net: only consider msg_inq if larger than 1
Currently retry and general validity of msg_inq is gated on it being
larger than zero, but it's entirely possible for this to be slightly
inaccurate. In particular, if FIN is received, it'll return 1.
Just use larger than 1 as the check. This covers both the FIN case, and
at the same time, it doesn't make much sense to retry a recv immediately
if there's even just a single 1 byte of valid data in the socket.
Leave the SOCK_NONEMPTY flagging when larger than 0 still, as an app may
use that for the final receive.
Cc: stable@vger.kernel.org
Reported-by: Christian Mazakas <christian.mazakas@gmail.com>
Fixes: 7c71a0af81 ("io_uring/net: improve recv bundles")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
0ec33c81d9
commit
2c7f023219
1 changed files with 2 additions and 2 deletions
|
|
@ -832,7 +832,7 @@ static inline bool io_recv_finish(struct io_kiocb *req, int *ret,
|
|||
* If more is available AND it was a full transfer, retry and
|
||||
* append to this one
|
||||
*/
|
||||
if (!sr->retry && kmsg->msg.msg_inq > 0 && this_ret > 0 &&
|
||||
if (!sr->retry && kmsg->msg.msg_inq > 1 && this_ret > 0 &&
|
||||
!iov_iter_count(&kmsg->msg.msg_iter)) {
|
||||
req->cqe.flags = cflags & ~CQE_F_MASK;
|
||||
sr->len = kmsg->msg.msg_inq;
|
||||
|
|
@ -1070,7 +1070,7 @@ static int io_recv_buf_select(struct io_kiocb *req, struct io_async_msghdr *kmsg
|
|||
arg.mode |= KBUF_MODE_FREE;
|
||||
}
|
||||
|
||||
if (kmsg->msg.msg_inq > 0)
|
||||
if (kmsg->msg.msg_inq > 1)
|
||||
arg.max_len = min_not_zero(sr->len, kmsg->msg.msg_inq);
|
||||
|
||||
ret = io_buffers_peek(req, &arg);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue