diff --git a/src/runtime-rs/crates/hypervisor/src/device/device_manager.rs b/src/runtime-rs/crates/hypervisor/src/device/device_manager.rs index fd07744e42..d597408a94 100644 --- a/src/runtime-rs/crates/hypervisor/src/device/device_manager.rs +++ b/src/runtime-rs/crates/hypervisor/src/device/device_manager.rs @@ -8,7 +8,7 @@ use std::{collections::HashMap, sync::Arc}; use anyhow::{anyhow, Context, Result}; use kata_sys_util::rand::RandomBytes; -use kata_types::config::hypervisor::{BlockDeviceInfo, TopologyConfigInfo, VIRTIO_SCSI}; +use kata_types::config::hypervisor::{BlockDeviceInfo, SharedFsInfo, TopologyConfigInfo, VIRTIO_SCSI}; use tokio::sync::{Mutex, RwLock}; use crate::{ @@ -121,6 +121,10 @@ impl DeviceManager { self.hypervisor.hypervisor_config().await.blockdev_info } + async fn get_shared_fs_info(&self) -> SharedFsInfo { + self.hypervisor.hypervisor_config().await.shared_fs + } + async fn try_add_device(&mut self, device_id: &str) -> Result<()> { // find the device let device = self @@ -623,6 +627,10 @@ pub async fn get_block_device_info(d: &RwLock) -> BlockDeviceInfo d.read().await.get_block_device_info().await } +pub async fn get_shared_fs_info(d: &RwLock) -> SharedFsInfo { + d.read().await.get_shared_fs_info().await +} + #[cfg(test)] mod tests { use super::DeviceManager; diff --git a/src/runtime-rs/crates/resource/src/share_fs/share_virtio_fs.rs b/src/runtime-rs/crates/resource/src/share_fs/share_virtio_fs.rs index 8328355ed5..b665846028 100644 --- a/src/runtime-rs/crates/resource/src/share_fs/share_virtio_fs.rs +++ b/src/runtime-rs/crates/resource/src/share_fs/share_virtio_fs.rs @@ -12,7 +12,7 @@ use tokio::sync::RwLock; use hypervisor::{ device::{ - device_manager::{do_handle_device, do_update_device, DeviceManager}, + device_manager::{do_handle_device, do_update_device, get_shared_fs_info, DeviceManager}, driver::{ShareFsMountConfig, ShareFsMountOperation, ShareFsMountType}, DeviceConfig, }, @@ -54,8 +54,12 @@ pub(crate) async fn prepare_virtiofs( sock_path: generate_sock_path(root), mount_tag: String::from(MOUNT_GUEST_TAG), fs_type: fs_type.to_string(), - queue_size: 0, - queue_num: 0, + // Pull virtio-fs queue size from the hypervisor config so the value + // configured via `virtio_fs_queue_size` in the toml actually reaches + // the VMM device line. There is currently no toml knob for the number + // of virtqueues, so we use a single queue (matching the prior default). + queue_size: get_shared_fs_info(d).await.virtio_fs_queue_size as u64, + queue_num: 1, options: vec![], mount_config: None, };