summaryrefslogtreecommitdiff
path: root/init
diff options
context:
space:
mode:
authorBreno Leitao <leitao@debian.org>2026-07-20 03:39:33 -0700
committerChristian Brauner <brauner@kernel.org>2026-07-31 10:09:11 +0200
commitf7f4665dc520fd8bbc1db20e59945773e03744a0 (patch)
tree36d1ae97d73cd03160b30209444200ebeecf0956 /init
parentc610d2d0787961cdd6fc1de69d9be1ff3687e1a6 (diff)
fs/pipe: unify the page pools into a single per-pipe pool
Pipes keep two separate page caches: a) The per-pipe, lock-protected tmp_page[2] b) An on-stack anon_pipe_prealloc burst pool of up to eight pages filled before the lock Converge them into a single per-pipe pool (struct anon_pipe_prealloc embedded in pipe_inode_info) with the same budget as before: up to PIPE_PREALLOC_MAX (8) pages, trimmed back to PIPE_PREALLOC_KEEP (2) after each operation. tmp_page[2] is removed. Pages are still allocated and freed outside pipe->mutex; only the assignment into the pool is done under it. The pool count is also read locklessly in the prefill path, so it is annotated __data_racy. anon_pipe_prefill_and_lock() tops the pool up to the write's page count -- and returns with pipe->mutex held, so a write acquires the lock only once. anon_pipe_trim_and_unlock() trims the pool under that same lock before dropping it, then frees the excess. Signed-off-by: Breno Leitao <leitao@debian.org> Link: https://patch.msgid.link/20260720-b4-pipe-unification-v5-1-9002a3fe5e6d@debian.org Reviewed-by: Mateusz Guzik <mjguzik@gmail.com> Reviewed-by: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
Diffstat (limited to 'init')
0 files changed, 0 insertions, 0 deletions