Commit d6796b9
committed
fix(vfs): run io_uring submit+drain on the blocking pool
submit_and_wait parks the caller inside io_uring_enter while holding
the ring lock, so doing that on the executor stalls every other task
sharing the runtime. Move the full submit + drain cycle for read,
read_at_vectored, write_at, write_at_vectored, and fsync into
self-contained closures run on the blocking pool, each owning its own
Arc to the file/ring and a private buffer copy. That copy is what lets
a cancelled future's memory be dropped safely: the pool thread still
owns a buffer the kernel can write into until the operation completes,
independent of whether the caller's future was already dropped.1 parent 02414f9 commit d6796b9
2 files changed
Lines changed: 218 additions & 128 deletions
0 commit comments