diff --git a/block_util/src/lib.rs b/block_util/src/lib.rs index a301672c2..ea19cf59f 100644 --- a/block_util/src/lib.rs +++ b/block_util/src/lib.rs @@ -14,13 +14,15 @@ extern crate log; extern crate serde_derive; #[cfg(feature = "io_uring")] -use io_uring::{opcode, squeue, IoUring, Probe}; +use io_uring::Probe; +use io_uring::{opcode, squeue, IoUring}; use serde::ser::{Serialize, SerializeStruct, Serializer}; use std::cmp; use std::io::{self, Read, Seek, SeekFrom, Write}; use std::os::linux::fs::MetadataExt; #[cfg(feature = "io_uring")] -use std::os::unix::io::{AsRawFd, RawFd}; +use std::os::unix::io::AsRawFd; +use std::os::unix::io::RawFd; use std::path::PathBuf; use std::result; use virtio_bindings::bindings::virtio_blk::*; @@ -266,7 +268,6 @@ impl Request { Ok(len) } - #[cfg(feature = "io_uring")] pub fn execute_io_uring( &self, mem: &GuestMemoryMmap, @@ -565,3 +566,8 @@ pub fn block_io_uring_is_supported() -> bool { true } + +#[cfg(not(feature = "io_uring"))] +pub fn block_io_uring_is_supported() -> bool { + false +} diff --git a/virtio-devices/src/lib.rs b/virtio-devices/src/lib.rs index 3ba0305f6..2da589286 100644 --- a/virtio-devices/src/lib.rs +++ b/virtio-devices/src/lib.rs @@ -31,7 +31,6 @@ use std::io; mod device; pub mod balloon; pub mod block; -#[cfg(feature = "io_uring")] pub mod block_io_uring; mod console; pub mod epoll_helper; @@ -48,7 +47,6 @@ pub mod vsock; pub use self::balloon::*; pub use self::block::*; -#[cfg(feature = "io_uring")] pub use self::block_io_uring::*; pub use self::console::*; pub use self::device::*; diff --git a/vmm/src/device_manager.rs b/vmm/src/device_manager.rs index 247a6e1d3..87862f086 100644 --- a/vmm/src/device_manager.rs +++ b/vmm/src/device_manager.rs @@ -36,7 +36,6 @@ use arch::layout; use arch::layout::{APIC_START, IOAPIC_SIZE, IOAPIC_START}; #[cfg(target_arch = "aarch64")] use arch::DeviceType; -#[cfg(feature = "io_uring")] use block_util::block_io_uring_is_supported; #[cfg(target_arch = "aarch64")] use devices::gic; @@ -1754,61 +1753,32 @@ impl DeviceManager { .map_err(DeviceManagerError::DetectImageType)?; let (virtio_device, migratable_device) = match image_type { ImageType::Raw => { - #[cfg(feature = "io_uring")] - { - // Use asynchronous backend relying on io_uring if the - // syscalls are supported. - if block_io_uring_is_supported() { - let dev = Arc::new(Mutex::new( - virtio_devices::BlockIoUring::new( - id.clone(), - image, - disk_cfg - .path - .as_ref() - .ok_or(DeviceManagerError::NoDiskPath)? - .clone(), - disk_cfg.readonly, - disk_cfg.iommu, - disk_cfg.num_queues, - disk_cfg.queue_size, - self.seccomp_action.clone(), - ) - .map_err(DeviceManagerError::CreateVirtioBlock)?, - )); - - ( - Arc::clone(&dev) as VirtioDeviceArc, - dev as Arc>, + // Use asynchronous backend relying on io_uring if the + // syscalls are supported. + if block_io_uring_is_supported() { + let dev = Arc::new(Mutex::new( + virtio_devices::BlockIoUring::new( + id.clone(), + image, + disk_cfg + .path + .as_ref() + .ok_or(DeviceManagerError::NoDiskPath)? + .clone(), + disk_cfg.readonly, + disk_cfg.iommu, + disk_cfg.num_queues, + disk_cfg.queue_size, + self.seccomp_action.clone(), ) - } else { - let dev = Arc::new(Mutex::new( - virtio_devices::Block::new( - id.clone(), - raw_img, - disk_cfg - .path - .as_ref() - .ok_or(DeviceManagerError::NoDiskPath)? - .clone(), - disk_cfg.readonly, - disk_cfg.iommu, - disk_cfg.num_queues, - disk_cfg.queue_size, - self.seccomp_action.clone(), - ) - .map_err(DeviceManagerError::CreateVirtioBlock)?, - )); + .map_err(DeviceManagerError::CreateVirtioBlock)?, + )); - ( - Arc::clone(&dev) as VirtioDeviceArc, - dev as Arc>, - ) - } - } - - #[cfg(not(feature = "io_uring"))] - { + ( + Arc::clone(&dev) as VirtioDeviceArc, + dev as Arc>, + ) + } else { let dev = Arc::new(Mutex::new( virtio_devices::Block::new( id.clone(),