Merge pull request #11689 from Caspian443/fix-devmapper-selinux-mount-issue

runtime-rs: Empty block-rootfs Storage.options and align with Go runtime
This commit is contained in:
Xuewei Niu
2025-08-29 15:29:46 +08:00
committed by GitHub
5 changed files with 34 additions and 10 deletions

View File

@@ -0,0 +1,15 @@
// Copyright 2025 Kata Contributors
//
// SPDX-License-Identifier: Apache-2.0
//
//! Filesystem-related constants shared across Kata components.
/// Root filesystem type: ext4
pub const VM_ROOTFS_FILESYSTEM_EXT4: &str = "ext4";
/// Root filesystem type: xfs
pub const VM_ROOTFS_FILESYSTEM_XFS: &str = "xfs";
/// Root filesystem type: erofs
pub const VM_ROOTFS_FILESYSTEM_EROFS: &str = "erofs";

View File

@@ -40,6 +40,9 @@ pub(crate) mod utils;
/// hypervisor capabilities /// hypervisor capabilities
pub mod capabilities; pub mod capabilities;
/// Filesystem-related constants
pub mod fs;
/// The Initdata specification defines the key data structures and algorithms for injecting /// The Initdata specification defines the key data structures and algorithms for injecting
/// any well-defined data from an untrusted host into a TEE (Trusted Execution Environment). /// any well-defined data from an untrusted host into a TEE (Trusted Execution Environment).
pub mod initdata; pub mod initdata;

View File

@@ -8,10 +8,12 @@ use anyhow::{anyhow, Result};
use crate::{ use crate::{
VM_ROOTFS_DRIVER_BLK, VM_ROOTFS_DRIVER_BLK_CCW, VM_ROOTFS_DRIVER_MMIO, VM_ROOTFS_DRIVER_PMEM, VM_ROOTFS_DRIVER_BLK, VM_ROOTFS_DRIVER_BLK_CCW, VM_ROOTFS_DRIVER_MMIO, VM_ROOTFS_DRIVER_PMEM,
VM_ROOTFS_FILESYSTEM_EROFS, VM_ROOTFS_FILESYSTEM_EXT4, VM_ROOTFS_FILESYSTEM_XFS,
VM_ROOTFS_ROOT_BLK, VM_ROOTFS_ROOT_PMEM, VM_ROOTFS_ROOT_BLK, VM_ROOTFS_ROOT_PMEM,
}; };
use kata_types::config::LOG_VPORT_OPTION; use kata_types::config::LOG_VPORT_OPTION;
use kata_types::fs::{
VM_ROOTFS_FILESYSTEM_EROFS, VM_ROOTFS_FILESYSTEM_EXT4, VM_ROOTFS_FILESYSTEM_XFS,
};
// Port where the agent will send the logs. Logs are sent through the vsock in cases // Port where the agent will send the logs. Logs are sent through the vsock in cases
// where the hypervisor has no console.sock, i.e dragonball // where the hypervisor has no console.sock, i.e dragonball
@@ -179,9 +181,10 @@ mod tests {
use super::*; use super::*;
use crate::{ use crate::{
VM_ROOTFS_DRIVER_BLK, VM_ROOTFS_DRIVER_PMEM, VM_ROOTFS_FILESYSTEM_EROFS, VM_ROOTFS_DRIVER_BLK, VM_ROOTFS_DRIVER_PMEM, VM_ROOTFS_ROOT_BLK, VM_ROOTFS_ROOT_PMEM,
VM_ROOTFS_FILESYSTEM_EXT4, VM_ROOTFS_FILESYSTEM_XFS, VM_ROOTFS_ROOT_BLK, };
VM_ROOTFS_ROOT_PMEM, use kata_types::fs::{
VM_ROOTFS_FILESYSTEM_EROFS, VM_ROOTFS_FILESYSTEM_EXT4, VM_ROOTFS_FILESYSTEM_XFS,
}; };
#[test] #[test]

View File

@@ -47,11 +47,6 @@ const VM_ROOTFS_DRIVER_MMIO: &str = "virtio-blk-mmio";
const VM_ROOTFS_ROOT_BLK: &str = "/dev/vda1"; const VM_ROOTFS_ROOT_BLK: &str = "/dev/vda1";
const VM_ROOTFS_ROOT_PMEM: &str = "/dev/pmem0p1"; const VM_ROOTFS_ROOT_PMEM: &str = "/dev/pmem0p1";
// Config which filesystem to use as rootfs type
const VM_ROOTFS_FILESYSTEM_EXT4: &str = "ext4";
const VM_ROOTFS_FILESYSTEM_XFS: &str = "xfs";
const VM_ROOTFS_FILESYSTEM_EROFS: &str = "erofs";
// before using hugepages for VM, we need to mount hugetlbfs // before using hugepages for VM, we need to mount hugetlbfs
// /dev/hugepages will be the mount point // /dev/hugepages will be the mount point
// mkdir -p /dev/hugepages // mkdir -p /dev/hugepages

View File

@@ -19,6 +19,7 @@ use hypervisor::{
use kata_types::config::hypervisor::{ use kata_types::config::hypervisor::{
VIRTIO_BLK_CCW, VIRTIO_BLK_MMIO, VIRTIO_BLK_PCI, VIRTIO_PMEM, VIRTIO_SCSI, VIRTIO_BLK_CCW, VIRTIO_BLK_MMIO, VIRTIO_BLK_PCI, VIRTIO_PMEM, VIRTIO_SCSI,
}; };
use kata_types::fs::VM_ROOTFS_FILESYSTEM_XFS;
use kata_types::mount::Mount; use kata_types::mount::Mount;
use nix::sys::stat::{self, SFlag}; use nix::sys::stat::{self, SFlag};
use oci_spec::runtime as oci; use oci_spec::runtime as oci;
@@ -67,10 +68,17 @@ impl BlockRootfs {
let mut storage = Storage { let mut storage = Storage {
fs_type: rootfs.fs_type.clone(), fs_type: rootfs.fs_type.clone(),
mount_point: container_path.clone(), mount_point: container_path.clone(),
options: rootfs.options.clone(), options: vec![],
..Default::default() ..Default::default()
}; };
// XFS rootfs: add 'nouuid' to avoid UUID conflicts when the same
// disk image is mounted across multiple VMs/containers.
// This allows mounting XFS volumes that share the same UUID.
if rootfs.fs_type == VM_ROOTFS_FILESYSTEM_XFS {
storage.options.push("nouuid".to_string());
}
let mut device_id: String = "".to_owned(); let mut device_id: String = "".to_owned();
if let DeviceType::Block(device) = device_info { if let DeviceType::Block(device) = device_info {
storage.driver = device.config.driver_option; storage.driver = device.config.driver_option;