From bde5702970f1190531e46ceeda93c97d9937d9c9 Mon Sep 17 00:00:00 2001 From: Alex Lyn Date: Tue, 31 Mar 2026 17:18:10 +0800 Subject: [PATCH] runtime-rs: Change Rootfs::get_storage return type Change Rootfs::get_storage to return Option> to support multi-layer rootfs with multiple storages. Signed-off-by: Alex Lyn --- src/runtime-rs/crates/resource/src/rootfs/block_rootfs.rs | 4 ++-- src/runtime-rs/crates/resource/src/rootfs/mod.rs | 2 +- src/runtime-rs/crates/resource/src/rootfs/nydus_rootfs.rs | 4 ++-- src/runtime-rs/crates/resource/src/rootfs/share_fs_rootfs.rs | 2 +- src/runtime-rs/crates/resource/src/rootfs/virtual_volume.rs | 5 +++-- .../virt_container/src/container_manager/container.rs | 4 ++-- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/runtime-rs/crates/resource/src/rootfs/block_rootfs.rs b/src/runtime-rs/crates/resource/src/rootfs/block_rootfs.rs index 6c2b061b59..519f5663bc 100644 --- a/src/runtime-rs/crates/resource/src/rootfs/block_rootfs.rs +++ b/src/runtime-rs/crates/resource/src/rootfs/block_rootfs.rs @@ -137,8 +137,8 @@ impl Rootfs for BlockRootfs { Ok(vec![self.mount.clone()]) } - async fn get_storage(&self) -> Option { - self.storage.clone() + async fn get_storage(&self) -> Option> { + self.storage.clone().map(|s| vec![s]) } async fn get_device_id(&self) -> Result> { diff --git a/src/runtime-rs/crates/resource/src/rootfs/mod.rs b/src/runtime-rs/crates/resource/src/rootfs/mod.rs index 334771f860..38081d1d89 100644 --- a/src/runtime-rs/crates/resource/src/rootfs/mod.rs +++ b/src/runtime-rs/crates/resource/src/rootfs/mod.rs @@ -31,7 +31,7 @@ const TYPE_OVERLAY_FS: &str = "overlay"; pub trait Rootfs: Send + Sync { async fn get_guest_rootfs_path(&self) -> Result; async fn get_rootfs_mount(&self) -> Result>; - async fn get_storage(&self) -> Option; + async fn get_storage(&self) -> Option>; async fn cleanup(&self, device_manager: &RwLock) -> Result<()>; async fn get_device_id(&self) -> Result>; } diff --git a/src/runtime-rs/crates/resource/src/rootfs/nydus_rootfs.rs b/src/runtime-rs/crates/resource/src/rootfs/nydus_rootfs.rs index dc5064b4fc..db6bbbe59f 100644 --- a/src/runtime-rs/crates/resource/src/rootfs/nydus_rootfs.rs +++ b/src/runtime-rs/crates/resource/src/rootfs/nydus_rootfs.rs @@ -149,8 +149,8 @@ impl Rootfs for NydusRootfs { Ok(vec![]) } - async fn get_storage(&self) -> Option { - Some(self.rootfs.clone()) + async fn get_storage(&self) -> Option> { + Some(vec![self.rootfs.clone()]) } async fn get_device_id(&self) -> Result> { diff --git a/src/runtime-rs/crates/resource/src/rootfs/share_fs_rootfs.rs b/src/runtime-rs/crates/resource/src/rootfs/share_fs_rootfs.rs index 3745f46506..5f8f2eab01 100644 --- a/src/runtime-rs/crates/resource/src/rootfs/share_fs_rootfs.rs +++ b/src/runtime-rs/crates/resource/src/rootfs/share_fs_rootfs.rs @@ -73,7 +73,7 @@ impl Rootfs for ShareFsRootfs { todo!() } - async fn get_storage(&self) -> Option { + async fn get_storage(&self) -> Option> { None } diff --git a/src/runtime-rs/crates/resource/src/rootfs/virtual_volume.rs b/src/runtime-rs/crates/resource/src/rootfs/virtual_volume.rs index 3d311912d7..029ea2aecb 100644 --- a/src/runtime-rs/crates/resource/src/rootfs/virtual_volume.rs +++ b/src/runtime-rs/crates/resource/src/rootfs/virtual_volume.rs @@ -15,6 +15,7 @@ use oci_spec::runtime as oci; use serde_json; use tokio::sync::RwLock; +use agent::Storage; use hypervisor::device::device_manager::DeviceManager; use kata_types::{ annotations, @@ -184,8 +185,8 @@ impl super::Rootfs for VirtualVolume { Ok(vec![]) } - async fn get_storage(&self) -> Option { - Some(self.storages[0].clone()) + async fn get_storage(&self) -> Option> { + Some(self.storages.clone()) } async fn get_device_id(&self) -> Result> { diff --git a/src/runtime-rs/crates/runtimes/virt_container/src/container_manager/container.rs b/src/runtime-rs/crates/runtimes/virt_container/src/container_manager/container.rs index 8787b22365..47c46a1f5e 100644 --- a/src/runtime-rs/crates/runtimes/virt_container/src/container_manager/container.rs +++ b/src/runtime-rs/crates/runtimes/virt_container/src/container_manager/container.rs @@ -167,8 +167,8 @@ impl Container { ); let mut storages = vec![]; - if let Some(storage) = rootfs.get_storage().await { - storages.push(storage); + if let Some(mut storage_list) = rootfs.get_storage().await { + storages.append(&mut storage_list); } inner.rootfs.push(rootfs);