core/linux: Don't block in run_once()

This commit is contained in:
Pekka Enberg
2024-01-24 17:25:19 +02:00
parent 5c88141a4f
commit d2a925698d

View File

@@ -32,10 +32,16 @@ impl IO for LinuxIO {
fn run_once(&self) -> Result<()> {
trace!("run_once()");
let mut ring = self.ring.borrow_mut();
ring.submit_and_wait(1)?;
let cqe = ring.completion().next().expect("completion queue is empty");
let c = unsafe { Arc::from_raw(cqe.user_data() as *const Completion) };
c.complete();
ring.submit_and_wait(0)?;
loop {
match ring.completion().next() {
Some(cqe) => {
let c = unsafe { Arc::from_raw(cqe.user_data() as *const Completion) };
c.complete();
}
None => break,
}
}
Ok(())
}
}