From 5eb05cf0bf79fbd0ee8bba222df43222cc21338b Mon Sep 17 00:00:00 2001 From: Patrick Roy Date: Tue, 15 Jul 2025 13:11:48 +0100 Subject: [PATCH] example(uffd): dont panic if read(2) from uffd returns -EAGAIN Started seeing the below failure in test_population_latency: thread 'main' panicked at .../uffd/fault_all_handler.rs:41:18: uffd_msg not ready note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace I am not entierly sure how this can happen, because the read from the uffd is supposed to be blocking, but maybe it's a weird interaction with the fault-all behavior (e.g. there was a uffd event queues, but because we faulted everything it got cancelled again?), so let's just try going back to read(2) if we dont read anything. Signed-off-by: Patrick Roy --- src/firecracker/examples/uffd/fault_all_handler.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/firecracker/examples/uffd/fault_all_handler.rs b/src/firecracker/examples/uffd/fault_all_handler.rs index c167333eb96..3bea58f0df7 100644 --- a/src/firecracker/examples/uffd/fault_all_handler.rs +++ b/src/firecracker/examples/uffd/fault_all_handler.rs @@ -35,10 +35,9 @@ fn main() { runtime.run( |uffd_handler: &mut UffdHandler| { // Read an event from the userfaultfd. - let event = uffd_handler - .read_event() - .expect("Failed to read uffd_msg") - .expect("uffd_msg not ready"); + let Some(event) = uffd_handler.read_event().expect("Failed to read uffd_msg") else { + return; + }; if let userfaultfd::Event::Pagefault { addr, .. } = event { let bit =