Merge pull request #10938 from Apokleos/fix-iommugrp-symlink

runtime-rs: Simplify iommu group base name extraction from symlink
This commit is contained in:
Xuewei Niu 2025-04-09 19:23:48 +08:00 committed by GitHub
commit 5774f131ec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -5,6 +5,7 @@
//
use std::{
ffi::OsStr,
fs,
path::{Path, PathBuf},
process::Command,
@ -759,14 +760,21 @@ pub fn get_vfio_iommu_group(bdf: String) -> Result<String> {
let iommugrp_symlink = fs::read_link(&iommugrp_path)
.map_err(|e| anyhow!("read iommu group symlink failed {:?}", e))?;
// get base name from iommu group symlink: X
let iommu_group = get_base_name(iommugrp_symlink)?
.into_string()
.map_err(|e| anyhow!("failed to get iommu group {:?}", e))?;
// Just get base name from iommu group symlink is enough as it will be checked
// within the full path /sys/kernel/iommu_groups/$iommu_group in the subsequent step.
let iommu_group = iommugrp_symlink
.file_name()
.and_then(OsStr::to_str)
.ok_or_else(|| {
anyhow!(
"failed to get iommu group with symlink {:?}",
iommugrp_symlink
)
})?;
// we'd better verify the path to ensure it dose exist.
if !Path::new(SYS_KERN_IOMMU_GROUPS)
.join(&iommu_group)
.join(iommu_group)
.join("devices")
.join(dbdf.as_str())
.exists()