mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-03 20:15:45 +00:00
virtio-mem: Return reize error in MemEpollHandler.run
Return resize error in MemEpollHandler.run. Fixes: #1081 Signed-off-by: Hui Zhu <teawater@antfin.com>
This commit is contained in:
parent
bc318b64e9
commit
327d67fadf
@ -187,4 +187,5 @@ pub enum Error {
|
|||||||
VhostUserUpdateMemory(vhost_user::Error),
|
VhostUserUpdateMemory(vhost_user::Error),
|
||||||
EventfdError(io::Error),
|
EventfdError(io::Error),
|
||||||
SetShmRegionsNotSupported,
|
SetShmRegionsNotSupported,
|
||||||
|
EpollHander(String),
|
||||||
}
|
}
|
||||||
|
@ -263,8 +263,8 @@ impl Resize {
|
|||||||
self.size.load(Ordering::SeqCst)
|
self.size.load(Ordering::SeqCst)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send(&self, r: Result<(), Error>) {
|
fn send(&self, r: Result<(), Error>) -> Result<(), mpsc::SendError<Result<(), Error>>> {
|
||||||
self.tx.send(r).unwrap();
|
self.tx.send(r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -657,12 +657,14 @@ impl MemEpollHandler {
|
|||||||
match ev_type {
|
match ev_type {
|
||||||
RESIZE_EVENT => {
|
RESIZE_EVENT => {
|
||||||
if let Err(e) = self.resize.evt.read() {
|
if let Err(e) = self.resize.evt.read() {
|
||||||
error!("Failed to get resize event: {:?}", e);
|
return Err(DeviceError::EpollHander(format!(
|
||||||
break 'epoll;
|
"Failed to get resize event: {:?}",
|
||||||
|
e
|
||||||
|
)));
|
||||||
} else {
|
} else {
|
||||||
let size = self.resize.get_size();
|
let size = self.resize.get_size();
|
||||||
let mut config = self.config.lock().unwrap();
|
let mut config = self.config.lock().unwrap();
|
||||||
let mut need_break = false;
|
let mut signal_error = false;
|
||||||
let r = if config.requested_size == size {
|
let r = if config.requested_size == size {
|
||||||
Err(Error::ResizeInval(format!("Virtio-mem resize {} is same with current config.requested_size", size)))
|
Err(Error::ResizeInval(format!("Virtio-mem resize {} is same with current config.requested_size", size)))
|
||||||
} else if size > config.region_size {
|
} else if size > config.region_size {
|
||||||
@ -686,29 +688,41 @@ impl MemEpollHandler {
|
|||||||
config.usable_region_size =
|
config.usable_region_size =
|
||||||
cmp::max(config.usable_region_size, tmp_size);
|
cmp::max(config.usable_region_size, tmp_size);
|
||||||
if let Err(e) = self.signal(&VirtioInterruptType::Config) {
|
if let Err(e) = self.signal(&VirtioInterruptType::Config) {
|
||||||
need_break = true;
|
signal_error = true;
|
||||||
Err(Error::ResizeTriggerFail(e))
|
Err(Error::ResizeTriggerFail(e))
|
||||||
} else {
|
} else {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if let Err(e) = &r {
|
if let Err(e) = &r {
|
||||||
error!("{:?}", e);
|
// This error will send back to resize caller.
|
||||||
|
error!("Handle resize event get error: {:?}", e);
|
||||||
}
|
}
|
||||||
self.resize.send(r);
|
if let Err(e) = self.resize.send(r) {
|
||||||
if need_break {
|
return Err(DeviceError::EpollHander(format!(
|
||||||
break 'epoll;
|
"Sending \"resize\" generated error: {:?}",
|
||||||
|
e
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
if signal_error {
|
||||||
|
return Err(DeviceError::EpollHander(String::from(
|
||||||
|
"Signal get error",
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QUEUE_AVAIL_EVENT => {
|
QUEUE_AVAIL_EVENT => {
|
||||||
if let Err(e) = self.queue_evt.read() {
|
if let Err(e) = self.queue_evt.read() {
|
||||||
error!("Failed to get queue event: {:?}", e);
|
return Err(DeviceError::EpollHander(format!(
|
||||||
break 'epoll;
|
"Failed to get queue event: {:?}",
|
||||||
|
e
|
||||||
|
)));
|
||||||
} else if self.process_queue() {
|
} else if self.process_queue() {
|
||||||
if let Err(e) = self.signal(&VirtioInterruptType::Queue) {
|
if let Err(e) = self.signal(&VirtioInterruptType::Queue) {
|
||||||
error!("Failed to signal used queue: {:?}", e);
|
return Err(DeviceError::EpollHander(format!(
|
||||||
break 'epoll;
|
"Failed to signal used queue: {:?}",
|
||||||
|
e
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -726,7 +740,9 @@ impl MemEpollHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
error!("Unknown event for virtio-mem");
|
return Err(DeviceError::EpollHander(String::from(
|
||||||
|
"Unknown event for virtio-mem",
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user