From a2dcc9cb71d8a341d5f437edcbe1a9c19a69e1a7 Mon Sep 17 00:00:00 2001 From: Ming Yang Date: Fri, 27 Aug 2021 16:51:29 +0800 Subject: [PATCH 07/10] machine_manager: move argument "serial" from -drive to -device virtio-blk-pci/device. 1. When interconnect with libvirt, the "serial" argument is given followed by -device virtio-blk-pci. Thus it is moved in this commit. Signed-off-by: Ming Yang --- docs/config_guidebook.md | 8 ++++---- machine_manager/src/config/drive.rs | 25 +++++++++++++------------ 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/docs/config_guidebook.md b/docs/config_guidebook.md index e1279e1..b1f7b08 100644 --- a/docs/config_guidebook.md +++ b/docs/config_guidebook.md @@ -171,11 +171,11 @@ If you want to boot VM with a virtio block device as rootfs, you should add `roo ```shell # virtio mmio block device. --drive id=drive_id,file=path_on_host[,serial=serial_num,readonly=off,direct=off,throttling.iops-total=200] --device virtio-blk-device,drive=drive_id[,iothread=iothread1] +-drive id=drive_id,file=path_on_host[,readonly=off][,direct=off][,throttling.iops-total=200] +-device virtio-blk-device,drive=drive_id[,iothread=iothread1][,serial=serial_num] # virtio pci block device. --drive id=drive_id,file=path_on_host[,serial=serial_num,readonly=off,direct=off,throttling.iops-total=200] --device virtio-blk-pci,drive=drive_id,bus=pcie.0,addr=0x3.0x0[,iothread=iothread1] +-drive id=drive_id,file=path_on_host[,readonly=off][,direct=off][,throttling.iops-total=200] +-device virtio-blk-pci,drive=drive_id,bus=pcie.0,addr=0x3.0x0[,iothread=iothread1,][serial=serial_num] ``` diff --git a/machine_manager/src/config/drive.rs b/machine_manager/src/config/drive.rs index 4d05eb8..3aaef75 100644 --- a/machine_manager/src/config/drive.rs +++ b/machine_manager/src/config/drive.rs @@ -62,7 +62,6 @@ pub struct DriveConfig { pub path_on_host: String, pub read_only: bool, pub direct: bool, - pub serial_num: Option, pub iops: Option, } @@ -73,7 +72,6 @@ impl Default for DriveConfig { path_on_host: "".to_string(), read_only: false, direct: true, - serial_num: None, iops: None, } } @@ -155,9 +153,6 @@ pub fn parse_drive(cmd_parser: CmdParser) -> Result { if let Some(direct) = cmd_parser.get_value::("direct")? { drive.direct = direct.into(); } - if let Some(serial) = cmd_parser.get_value::("serial")? { - drive.serial_num = Some(serial); - } drive.iops = cmd_parser.get_value::("throttling.iops-total")?; Ok(drive) } @@ -171,6 +166,7 @@ pub fn parse_blk(vm_config: &mut VmConfig, drive_config: &str) -> Result Result("serial")? { + blkdevcfg.serial_num = Some(serial); + } + if let Some(drive_arg) = &vm_config.drives.remove(&blkdrive) { blkdevcfg.id = drive_arg.id.clone(); blkdevcfg.path_on_host = drive_arg.path_on_host.clone(); blkdevcfg.read_only = drive_arg.read_only; blkdevcfg.direct = drive_arg.direct; - blkdevcfg.serial_num = drive_arg.serial_num.clone(); blkdevcfg.iops = drive_arg.iops; } else { bail!("No drive configured matched for blk device"); @@ -361,11 +360,13 @@ mod tests { fn test_drive_config_cmdline_parser() { let mut vm_config = VmConfig::default(); assert!(vm_config - .add_drive("id=rootfs,file=/path/to/rootfs,serial=111111,readonly=off,direct=on,throttling.iops-total=200") + .add_drive( + "id=rootfs,file=/path/to/rootfs,readonly=off,direct=on,throttling.iops-total=200" + ) .is_ok()); let blk_cfg_res = parse_blk( &mut vm_config, - "virtio-blk-device,drive=rootfs,iothread=iothread1", + "virtio-blk-device,drive=rootfs,iothread=iothread1,serial=111111", ); assert!(blk_cfg_res.is_ok()); let blk_device_config = blk_cfg_res.unwrap(); @@ -377,11 +378,11 @@ mod tests { let mut vm_config = VmConfig::default(); assert!(vm_config - .add_drive("id=rootfs,file=/path/to/rootfs,serial=111111,readonly=off,direct=on") + .add_drive("id=rootfs,file=/path/to/rootfs,readonly=off,direct=on") .is_ok()); let blk_cfg_res = parse_blk( &mut vm_config, - "virtio-blk-device,drive=rootfs1,iothread=iothread1,iops=200", + "virtio-blk-device,drive=rootfs1,iothread=iothread1,iops=200,serial=111111", ); assert!(blk_cfg_res.is_err()); // Can not find drive named "rootfs1". } @@ -390,9 +391,9 @@ mod tests { fn test_pci_block_config_cmdline_parser() { let mut vm_config = VmConfig::default(); assert!(vm_config - .add_drive("id=rootfs,file=/path/to/rootfs,serial=111111,readonly=off,direct=on") + .add_drive("id=rootfs,file=/path/to/rootfs,readonly=off,direct=on") .is_ok()); - let blk_cfg = "virtio-blk-pci,id=blk1,bus=pcie.0,addr=0x1.0x2,drive=rootfs"; + let blk_cfg = "virtio-blk-pci,id=blk1,bus=pcie.0,addr=0x1.0x2,drive=rootfs,serial=111111"; let blk_cfg_res = parse_blk(&mut vm_config, blk_cfg); assert!(blk_cfg_res.is_ok()); let drive_configs = blk_cfg_res.unwrap(); -- 2.25.1