mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-09-14 13:29:31 +00:00
Merge pull request #9282 from gkurz/runtime-rs-fds-for-qemu
runtime-rs: Consolidate the handling of fds passed to QEMU
This commit is contained in:
1
src/runtime-rs/Cargo.lock
generated
1
src/runtime-rs/Cargo.lock
generated
@@ -3690,6 +3690,7 @@ dependencies = [
|
||||
"hyperlocal",
|
||||
"kata-sys-util",
|
||||
"kata-types",
|
||||
"nix 0.24.3",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
|
@@ -66,13 +66,11 @@ impl QemuInner {
|
||||
|
||||
let mut cmdline = QemuCmdLine::new(&self.id, &self.config)?;
|
||||
|
||||
// If there's a Vsock Device in `self.devices` the vhost-vsock file
|
||||
// descriptor needs to stay open until the qemu process launches.
|
||||
// This is why we need to store it in a variable at this scope.
|
||||
let mut _vhost_fd = None;
|
||||
// We need to keep the vhost-net/tuntap file descriptor open until the QEMU process launches.
|
||||
// However, we're likely not interested in the specific type of file descriptor itself. We just
|
||||
// want to ensure any fds associated with network devices remain open within the current scope.
|
||||
// CAUTION: File descriptors that are passed to QEMU must stay open until the QEMU process
|
||||
// is started and closed afterwards. This is achieved by collecting them in _fds_for_qemu.
|
||||
// It is mandatory for _fds_for_qemu to last until the QEMU process is forked. Leave it
|
||||
// in the outer scope of this function for this to happen. The files in _fds_for_qemu
|
||||
// should not be used in any way.
|
||||
let mut _fds_for_qemu: Vec<std::fs::File> = Vec::new();
|
||||
|
||||
for device in &mut self.devices {
|
||||
@@ -89,7 +87,7 @@ impl QemuInner {
|
||||
DeviceType::Vsock(vsock_dev) => {
|
||||
let fd = vsock_dev.init_config().await?;
|
||||
cmdline.add_vsock(fd.as_raw_fd(), vsock_dev.config.guest_cid)?;
|
||||
_vhost_fd = Some(fd);
|
||||
_fds_for_qemu.push(fd.into_std().await);
|
||||
}
|
||||
DeviceType::Block(block_dev) => {
|
||||
if block_dev.config.path_on_host == self.config.boot_info.initrd {
|
||||
@@ -114,7 +112,8 @@ impl QemuInner {
|
||||
// we need ensure add_network_device happens in netns.
|
||||
let _netns_guard = NetnsGuard::new(&netns).context("new netns guard")?;
|
||||
|
||||
_fds_for_qemu = cmdline.add_network_device(&network.config, network_info)?;
|
||||
_fds_for_qemu
|
||||
.append(&mut cmdline.add_network_device(&network.config, network_info)?);
|
||||
}
|
||||
_ => info!(sl!(), "qemu cmdline: unsupported device: {:?}", device),
|
||||
}
|
||||
|
Reference in New Issue
Block a user