diff --git a/core/io/linux.rs b/core/io/linux.rs index 959b9014a..8e21131e3 100644 --- a/core/io/linux.rs +++ b/core/io/linux.rs @@ -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(()) } }