diff --git a/devices/src/virtio/block_async.rs b/devices/src/virtio/block_async.rs index d1e1e5d6d3..0ea2e02653 100644 --- a/devices/src/virtio/block_async.rs +++ b/devices/src/virtio/block_async.rs @@ -485,7 +485,6 @@ fn run_worker( let queue_handlers = queues .into_iter() - .filter(|q| q.ready) .map(|q| Rc::new(RefCell::new(q))) .zip(queue_evts.into_iter().map(|e| { EventAsync::new(e.0, &ex).expect("Failed to create async event for queue") diff --git a/devices/src/virtio/virtio_pci_device.rs b/devices/src/virtio/virtio_pci_device.rs index a826e4c748..9ba9f2fbd3 100644 --- a/devices/src/virtio/virtio_pci_device.rs +++ b/devices/src/virtio/virtio_pci_device.rs @@ -698,12 +698,16 @@ impl PciDevice for VirtioPciDevice { match self.clone_queue_evts() { Ok(queue_evts) => { - self.device.activate( - mem, - interrupt, - self.queues.clone(), - queue_evts, - ); + // Use ready queues and their events. + let (queues, queue_evts) = self + .queues + .clone() + .into_iter() + .zip(queue_evts.into_iter()) + .filter(|(q, _)| q.ready) + .unzip(); + + self.device.activate(mem, interrupt, queues, queue_evts); self.device_activated = true; } Err(e) => {