mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-05 21:15:45 +00:00
vhost_user_block: Split launching backend into its own function
Split the basic launching functionality into its own function in the newly added vhost_user_block crate. Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
parent
9fd187c9fe
commit
7f73eebbdb
@ -10,16 +10,10 @@
|
|||||||
|
|
||||||
#[macro_use(crate_version, crate_authors)]
|
#[macro_use(crate_version, crate_authors)]
|
||||||
extern crate clap;
|
extern crate clap;
|
||||||
extern crate log;
|
|
||||||
extern crate vhost_user_backend;
|
|
||||||
extern crate vhost_user_block;
|
extern crate vhost_user_block;
|
||||||
|
|
||||||
use clap::{App, Arg};
|
use clap::{App, Arg};
|
||||||
use log::*;
|
use vhost_user_block::start_block_backend;
|
||||||
use std::process;
|
|
||||||
use std::sync::{Arc, RwLock};
|
|
||||||
use vhost_user_backend::VhostUserDaemon;
|
|
||||||
use vhost_user_block::{VhostUserBlkBackend, VhostUserBlkBackendConfig};
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let cmd_arguments = App::new("vhost-user-blk backend")
|
let cmd_arguments = App::new("vhost-user-blk backend")
|
||||||
@ -39,50 +33,6 @@ fn main() {
|
|||||||
)
|
)
|
||||||
.get_matches();
|
.get_matches();
|
||||||
|
|
||||||
let vhost_user_blk_backend = cmd_arguments.value_of("block-backend").unwrap();
|
let backend_command = cmd_arguments.value_of("block-backend").unwrap();
|
||||||
|
start_block_backend(backend_command);
|
||||||
let backend_config = match VhostUserBlkBackendConfig::parse(vhost_user_blk_backend) {
|
|
||||||
Ok(config) => config,
|
|
||||||
Err(e) => {
|
|
||||||
println!("Failed parsing parameters {:?}", e);
|
|
||||||
process::exit(1);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let blk_backend = Arc::new(RwLock::new(
|
|
||||||
VhostUserBlkBackend::new(
|
|
||||||
backend_config.image.to_string(),
|
|
||||||
backend_config.readonly,
|
|
||||||
backend_config.direct,
|
|
||||||
)
|
|
||||||
.unwrap(),
|
|
||||||
));
|
|
||||||
|
|
||||||
debug!("blk_backend is created!\n");
|
|
||||||
|
|
||||||
let name = "vhost-user-blk-backend";
|
|
||||||
let mut blk_daemon = VhostUserDaemon::new(
|
|
||||||
name.to_string(),
|
|
||||||
backend_config.sock.to_string(),
|
|
||||||
blk_backend.clone(),
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
debug!("blk_daemon is created!\n");
|
|
||||||
|
|
||||||
let vring_worker = blk_daemon.get_vring_worker();
|
|
||||||
|
|
||||||
blk_backend
|
|
||||||
.write()
|
|
||||||
.unwrap()
|
|
||||||
.set_vring_worker(Some(vring_worker));
|
|
||||||
|
|
||||||
if let Err(e) = blk_daemon.start() {
|
|
||||||
println!(
|
|
||||||
"failed to start daemon for vhost-user-blk with error: {:?}\n",
|
|
||||||
e
|
|
||||||
);
|
|
||||||
process::exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
blk_daemon.wait().unwrap();
|
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,12 @@ use std::io::{Seek, SeekFrom, Write};
|
|||||||
use std::mem;
|
use std::mem;
|
||||||
use std::os::unix::fs::OpenOptionsExt;
|
use std::os::unix::fs::OpenOptionsExt;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
use std::process;
|
||||||
use std::slice;
|
use std::slice;
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
use std::vec::Vec;
|
use std::vec::Vec;
|
||||||
use vhost_rs::vhost_user::message::*;
|
use vhost_rs::vhost_user::message::*;
|
||||||
use vhost_user_backend::{VhostUserBackend, Vring, VringWorker};
|
use vhost_user_backend::{VhostUserBackend, VhostUserDaemon, Vring, VringWorker};
|
||||||
use virtio_bindings::bindings::virtio_blk::*;
|
use virtio_bindings::bindings::virtio_blk::*;
|
||||||
use vm_memory::{Bytes, GuestMemoryError, GuestMemoryMmap};
|
use vm_memory::{Bytes, GuestMemoryError, GuestMemoryMmap};
|
||||||
use vm_virtio::block::{build_disk_image_id, Request};
|
use vm_virtio::block::{build_disk_image_id, Request};
|
||||||
@ -274,3 +275,50 @@ impl<'a> VhostUserBlkBackendConfig<'a> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn start_block_backend(backend_command: &str) {
|
||||||
|
let backend_config = match VhostUserBlkBackendConfig::parse(backend_command) {
|
||||||
|
Ok(config) => config,
|
||||||
|
Err(e) => {
|
||||||
|
println!("Failed parsing parameters {:?}", e);
|
||||||
|
process::exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let blk_backend = Arc::new(RwLock::new(
|
||||||
|
VhostUserBlkBackend::new(
|
||||||
|
backend_config.image.to_string(),
|
||||||
|
backend_config.readonly,
|
||||||
|
backend_config.direct,
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
));
|
||||||
|
|
||||||
|
debug!("blk_backend is created!\n");
|
||||||
|
|
||||||
|
let name = "vhost-user-blk-backend";
|
||||||
|
let mut blk_daemon = VhostUserDaemon::new(
|
||||||
|
name.to_string(),
|
||||||
|
backend_config.sock.to_string(),
|
||||||
|
blk_backend.clone(),
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
debug!("blk_daemon is created!\n");
|
||||||
|
|
||||||
|
let vring_worker = blk_daemon.get_vring_worker();
|
||||||
|
|
||||||
|
blk_backend
|
||||||
|
.write()
|
||||||
|
.unwrap()
|
||||||
|
.set_vring_worker(Some(vring_worker));
|
||||||
|
|
||||||
|
if let Err(e) = blk_daemon.start() {
|
||||||
|
println!(
|
||||||
|
"failed to start daemon for vhost-user-blk with error: {:?}\n",
|
||||||
|
e
|
||||||
|
);
|
||||||
|
process::exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
blk_daemon.wait().unwrap();
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user