io_uring/kbuf: flag request if buffer pool is empty after buffer pick
authorJens Axboe <axboe@kernel.dk>
Tue, 20 Feb 2024 04:38:59 +0000 (21:38 -0700)
committerJens Axboe <axboe@kernel.dk>
Tue, 27 Feb 2024 18:52:45 +0000 (11:52 -0700)
commitc3f9109dbc9e2cd0b2c3ba0536431eef282783e9
treee7af3ead4af50beb71f1c57d9d0241c66c2c7a74
parent792060de8b3e9ca11fab4afc0c3c5927186152a2
io_uring/kbuf: flag request if buffer pool is empty after buffer pick

Normally we do an extra roundtrip for retries even if the buffer pool has
depleted, as we don't check that upfront. Rather than add this check, have
the buffer selection methods mark the request with REQ_F_BL_EMPTY if the
used buffer group is out of buffers after this selection. This is very
cheap to do once we're all the way inside there anyway, and it gives the
caller a chance to make better decisions on how to proceed.

For example, recv/recvmsg multishot could check this flag when it
decides whether to keep receiving or not.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
include/linux/io_uring_types.h
io_uring/kbuf.c