bio: don't rob starving biosets of bios
authorPavel Begunkov <asml.silence@gmail.com>
Wed, 2 Nov 2022 15:18:20 +0000 (15:18 +0000)
committerJens Axboe <axboe@kernel.dk>
Wed, 16 Nov 2022 16:44:26 +0000 (09:44 -0700)
commit759aa12f19155fe4e4fb4740450b4aa4233b7d9f
treef88d17edd9dfb7e74e988208e0c366093b71753f
parent6e4068a11413b96687a03c39814539e202de294b
bio: don't rob starving biosets of bios

Biosets keep a mempool, so as long as requests complete we can always
can allocate and have forward progress. Percpu bio caches break that
assumptions as we may complete into the cache of one CPU and after try
and fail to allocate with another CPU. We also can't grab from another
CPU's cache without tricky sync.

If we're allocating with a bio while the mempool is undersaturated,
remove REQ_ALLOC_CACHE flag, so on put it will go straight to mempool.
It might try to free into mempool more requests than required, but
assuming than there is no memory starvation in the system it'll
stabilise and never hit that path.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/aa150caf9c263fa92269e86d7826cc8fa65f38de.1667384020.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/bio.c