virtio-devices: block: Refactor 'handle_event' for readability

Signed-off-by: Bo Chen <chen.bo@intel.com>
This commit is contained in:
Bo Chen 2022-08-18 12:03:04 -07:00 committed by Sebastien Boeuf
parent 0b15e378c7
commit b4fe41ad0c

View File

@ -295,24 +295,21 @@ impl EpollHelperHandler for BlockEpollHandler {
// Process the queue only when the rate limit is not reached // Process the queue only when the rate limit is not reached
if !rate_limit_reached { if !rate_limit_reached {
match self.process_queue_submit() { let needs_notification = self.process_queue_submit().map_err(|e| {
Ok(needs_notification) => { EpollHelperError::HandleEvent(anyhow!(
if needs_notification {
if let Err(e) = self.signal_used_queue() {
return Err(EpollHelperError::HandleEvent(anyhow!(
"Failed to signal used queue: {:?}",
e
)));
}
}
}
Err(e) => {
return Err(EpollHelperError::HandleEvent(anyhow!(
"Failed to process queue (submit): {:?}", "Failed to process queue (submit): {:?}",
e e
))); ))
} })?;
}
if needs_notification {
self.signal_used_queue().map_err(|e| {
EpollHelperError::HandleEvent(anyhow!(
"Failed to signal used queue: {:?}",
e
))
})?
};
} }
} }
COMPLETION_EVENT => { COMPLETION_EVENT => {
@ -320,49 +317,48 @@ impl EpollHelperHandler for BlockEpollHandler {
EpollHelperError::HandleEvent(anyhow!("Failed to get queue event: {:?}", e)) EpollHelperError::HandleEvent(anyhow!("Failed to get queue event: {:?}", e))
})?; })?;
match self.process_queue_complete() { let needs_notification = self.process_queue_complete().map_err(|e| {
Ok(needs_notification) => { EpollHelperError::HandleEvent(anyhow!(
if needs_notification {
if let Err(e) = self.signal_used_queue() {
return Err(EpollHelperError::HandleEvent(anyhow!(
"Failed to signal used queue: {:?}",
e
)));
}
}
}
Err(e) => {
return Err(EpollHelperError::HandleEvent(anyhow!(
"Failed to process queue (complete): {:?}", "Failed to process queue (complete): {:?}",
e e
))); ))
} })?;
if needs_notification {
self.signal_used_queue().map_err(|e| {
EpollHelperError::HandleEvent(anyhow!(
"Failed to signal used queue: {:?}",
e
))
})?;
} }
} }
RATE_LIMITER_EVENT => { RATE_LIMITER_EVENT => {
if let Some(rate_limiter) = &mut self.rate_limiter { if let Some(rate_limiter) = &mut self.rate_limiter {
// Upon rate limiter event, call the rate limiter handler // Upon rate limiter event, call the rate limiter handler
// and restart processing the queue. // and restart processing the queue.
if rate_limiter.event_handler().is_ok() { rate_limiter.event_handler().map_err(|e| {
match self.process_queue_submit() { EpollHelperError::HandleEvent(anyhow!(
Ok(needs_notification) => { "Failed to process rate limiter event: {:?}",
if needs_notification {
if let Err(e) = self.signal_used_queue() {
return Err(EpollHelperError::HandleEvent(anyhow!(
"Failed to signal used queue: {:?}",
e e
))); ))
} })?;
}
} let needs_notification = self.process_queue_submit().map_err(|e| {
Err(e) => { EpollHelperError::HandleEvent(anyhow!(
return Err(EpollHelperError::HandleEvent(anyhow!(
"Failed to process queue (submit): {:?}", "Failed to process queue (submit): {:?}",
e e
))); ))
} })?;
}
} if needs_notification {
self.signal_used_queue().map_err(|e| {
EpollHelperError::HandleEvent(anyhow!(
"Failed to signal used queue: {:?}",
e
))
})?
};
} else { } else {
return Err(EpollHelperError::HandleEvent(anyhow!( return Err(EpollHelperError::HandleEvent(anyhow!(
"Unexpected 'RATE_LIMITER_EVENT' when rate_limiter is not enabled." "Unexpected 'RATE_LIMITER_EVENT' when rate_limiter is not enabled."