Fix `if let` chains that can be collapsed

This commit is contained in:
Zhang Junyang 2025-12-08 23:28:59 +08:00 committed by Tate, Hongliang Tian
parent 127290f70d
commit 6d2679852f
19 changed files with 143 additions and 140 deletions

View File

@ -62,13 +62,12 @@ impl BioRequestSingleQueue {
} }
let mut queue = self.queue.lock(); let mut queue = self.queue.lock();
if let Some(request) = queue.front_mut() { if let Some(request) = queue.front_mut()
if request.can_merge(&bio) && request.can_merge(&bio)
&& request.num_segments() + bio.segments().len() <= self.max_nr_segments_per_bio && request.num_segments() + bio.segments().len() <= self.max_nr_segments_per_bio
{ {
request.merge_bio(bio); request.merge_bio(bio);
return Ok(()); return Ok(());
}
} }
let new_request = BioRequest::from(bio); let new_request = BioRequest::from(bio);

View File

@ -225,10 +225,10 @@ impl FbConsoleHandler {
return; return;
} }
if let Some(bytes) = self.keycode_to_ascii(keycode) { if let Some(bytes) = self.keycode_to_ascii(keycode)
if let Some(console) = FRAMEBUFFER_CONSOLE.get() { && let Some(console) = FRAMEBUFFER_CONSOLE.get()
console.trigger_input_callbacks(bytes); {
} console.trigger_input_callbacks(bytes);
} }
} }
} }

View File

@ -225,10 +225,10 @@ fn handle_mouse_input(_trap_frame: &TrapFrame) {
}; };
let mut packet_state = PACKET_STATE.lock(); let mut packet_state = PACKET_STATE.lock();
if let Some(events) = packet_state.process_byte(data) { if let Some(events) = packet_state.process_byte(data)
if let Some(registered_device) = REGISTERED_DEVICE.get() { && let Some(registered_device) = REGISTERED_DEVICE.get()
registered_device.submit_events(&events); {
} registered_device.submit_events(&events);
} }
} }

View File

@ -485,10 +485,10 @@ impl InputDevice {
// Set key capabilities. // Set key capabilities.
if let Some(key_bits) = &ev_key { if let Some(key_bits) = &ev_key {
for bit in 0..key_bits.len() * 8 { for bit in 0..key_bits.len() * 8 {
if key_bits[bit / 8] & (1 << (bit % 8)) != 0 { if key_bits[bit / 8] & (1 << (bit % 8)) != 0
if let Some(key_code) = map_to_key_code(bit as u16) { && let Some(key_code) = map_to_key_code(bit as u16)
capability.set_supported_key(key_code); {
} capability.set_supported_key(key_code);
} }
} }
} }
@ -496,10 +496,10 @@ impl InputDevice {
// Set relative axis capabilities. // Set relative axis capabilities.
if let Some(rel_bits) = &ev_rel { if let Some(rel_bits) = &ev_rel {
for bit in 0..rel_bits.len() * 8 { for bit in 0..rel_bits.len() * 8 {
if rel_bits[bit / 8] & (1 << (bit % 8)) != 0 { if rel_bits[bit / 8] & (1 << (bit % 8)) != 0
if let Some(rel_code) = map_to_rel_code(bit as u16) { && let Some(rel_code) = map_to_rel_code(bit as u16)
capability.set_supported_relative_axis(rel_code); {
} capability.set_supported_relative_axis(rel_code);
} }
} }
} }

View File

@ -538,14 +538,14 @@ impl<E: Ext> PollContext<'_, E> {
})); }));
}); });
if let Some((ip_repr, ip_payload)) = deferred { if let Some((ip_repr, ip_payload)) = deferred
if let Some(reply) = self.parse_and_process_udp( && let Some(reply) = self.parse_and_process_udp(
&ip_repr, &ip_repr,
&ip_payload, &ip_payload,
&ChecksumCapabilities::ignored(), &ChecksumCapabilities::ignored(),
) { )
dispatch_phy(&reply, self.iface.context_mut(), tx_token.take().unwrap()); {
} dispatch_phy(&reply, self.iface.context_mut(), tx_token.take().unwrap());
} }
if tx_token.is_none() { if tx_token.is_none() {

View File

@ -249,14 +249,14 @@ impl InotifyFile {
{ {
let mut event_queue = self.event_queue.lock(); let mut event_queue = self.event_queue.lock();
if let Some(last_event) = event_queue.back() { if let Some(last_event) = event_queue.back()
if can_merge_events(last_event, &new_event) { && can_merge_events(last_event, &new_event)
event_queue.pop_back(); {
event_queue.push_back(new_event); event_queue.pop_back();
// New or merged event makes the file readable event_queue.push_back(new_event);
self.pollee.notify(IoEvents::IN); // New or merged event makes the file readable
return; self.pollee.notify(IoEvents::IN);
} return;
} }
// If the queue is full, drop the event. // If the queue is full, drop the event.

View File

@ -519,11 +519,12 @@ impl DentryChildren {
/// Checks whether the dentry is a mount point. Returns an error if it is. /// Checks whether the dentry is a mount point. Returns an error if it is.
fn check_mountpoint(&self, name: &str) -> Result<()> { fn check_mountpoint(&self, name: &str) -> Result<()> {
if let Some(Some(dentry)) = self.dentries.get(name) { if let Some(Some(dentry)) = self.dentries.get(name)
if dentry.is_mountpoint() { && dentry.is_mountpoint()
return_errno_with_message!(Errno::EBUSY, "dentry is mountpint"); {
} return_errno_with_message!(Errno::EBUSY, "dentry is mountpint");
} }
Ok(()) Ok(())
} }

View File

@ -118,15 +118,15 @@ impl PipeWriter {
}; };
let res = self.state.write_with(write); let res = self.state.write_with(write);
if res.is_err_and(|e| e.error() == Errno::EPIPE) { if res.is_err_and(|e| e.error() == Errno::EPIPE)
if let Some(posix_thread) = current_thread!().as_posix_thread() { && let Some(posix_thread) = current_thread!().as_posix_thread()
posix_thread.enqueue_signal(Box::new(UserSignal::new( {
SIGPIPE, posix_thread.enqueue_signal(Box::new(UserSignal::new(
UserSignalKind::Kill, SIGPIPE,
posix_thread.process().pid(), UserSignalKind::Kill,
posix_thread.credentials().ruid(), posix_thread.process().pid(),
))); posix_thread.credentials().ruid(),
} )));
} }
res res

View File

@ -206,11 +206,12 @@ impl OptionalBuilder {
// The volatile property is inherited from parent. // The volatile property is inherited from parent.
let is_volatile = { let is_volatile = {
let mut is_volatile = self.is_volatile; let mut is_volatile = self.is_volatile;
if let Some(parent) = self.parent.as_ref() { if let Some(parent) = self.parent.as_ref()
if !parent.upgrade().unwrap().is_dentry_cacheable() { && !parent.upgrade().unwrap().is_dentry_cacheable()
is_volatile = true; {
} is_volatile = true;
} }
is_volatile is_volatile
}; };

View File

@ -359,11 +359,12 @@ impl PageCacheManager {
let backend = self.backend(); let backend = self.backend();
let backend_npages = backend.npages(); let backend_npages = backend.npages();
for idx in page_idx_range.start..page_idx_range.end { for idx in page_idx_range.start..page_idx_range.end {
if let Some(page) = pages.peek(&idx) { if let Some(page) = pages.peek(&idx)
if page.load_state() == PageState::Dirty && idx < backend_npages { && page.load_state() == PageState::Dirty
let waiter = backend.write_page_async(idx, page)?; && idx < backend_npages
bio_waiter.concat(waiter); {
} let waiter = backend.write_page_async(idx, page)?;
bio_waiter.concat(waiter);
} }
} }
@ -455,14 +456,14 @@ impl Pager for PageCacheManager {
fn decommit_page(&self, idx: usize) -> Result<()> { fn decommit_page(&self, idx: usize) -> Result<()> {
let page_result = self.pages.lock().pop(&idx); let page_result = self.pages.lock().pop(&idx);
if let Some(page) = page_result { if let Some(page) = page_result
if let PageState::Dirty = page.load_state() { && let PageState::Dirty = page.load_state()
let Some(backend) = self.backend.upgrade() else { {
return Ok(()); let Some(backend) = self.backend.upgrade() else {
}; return Ok(());
if idx < backend.npages() { };
backend.write_page(idx, &page)?; if idx < backend.npages() {
} backend.write_page(idx, &page)?;
} }
} }

View File

@ -108,11 +108,12 @@ impl VsockStreamSocket {
let peer_addr = self.peer_addr()?; let peer_addr = self.peer_addr()?;
// If buffer is now empty and the peer requested shutdown, finish shutting down the // If buffer is now empty and the peer requested shutdown, finish shutting down the
// connection. // connection.
if connected.should_close() { if connected.should_close()
if let Err(e) = self.shutdown(SockShutdownCmd::SHUT_RDWR) { && let Err(e) = self.shutdown(SockShutdownCmd::SHUT_RDWR)
debug!("The error is {:?}", e); {
} debug!("The error is {:?}", e);
} }
Ok((read_size, peer_addr)) Ok((read_size, peer_addr))
} }
} }
@ -186,13 +187,12 @@ impl Socket for VsockStreamSocket {
if !connecting if !connecting
.poll(IoEvents::IN, Some(poller.as_handle_mut())) .poll(IoEvents::IN, Some(poller.as_handle_mut()))
.contains(IoEvents::IN) .contains(IoEvents::IN)
&& let Err(e) = poller.wait()
{ {
if let Err(e) = poller.wait() { vsockspace
vsockspace .remove_connecting_socket(&connecting.local_addr())
.remove_connecting_socket(&connecting.local_addr()) .unwrap();
.unwrap(); return Err(e);
return Err(e);
}
} }
vsockspace vsockspace

View File

@ -147,16 +147,16 @@ impl StopStatus {
pub(super) fn wait(&self, options: WaitOptions) -> Option<StopWaitStatus> { pub(super) fn wait(&self, options: WaitOptions) -> Option<StopWaitStatus> {
let mut wait_status = self.wait_status.lock(); let mut wait_status = self.wait_status.lock();
if options.contains(WaitOptions::WSTOPPED) { if options.contains(WaitOptions::WSTOPPED)
if let Some(StopWaitStatus::Stopped(_)) = wait_status.as_ref() { && let Some(StopWaitStatus::Stopped(_)) = wait_status.as_ref()
return wait_status.take(); {
} return wait_status.take();
} }
if options.contains(WaitOptions::WCONTINUED) { if options.contains(WaitOptions::WCONTINUED)
if let Some(StopWaitStatus::Continue) = wait_status.as_ref() { && let Some(StopWaitStatus::Continue) = wait_status.as_ref()
return wait_status.take(); {
} return wait_status.take();
} }
None None

View File

@ -124,11 +124,12 @@ where
if v.range().end > *point { if v.range().end > *point {
return Some(cursor.remove_prev().unwrap().1); return Some(cursor.remove_prev().unwrap().1);
} }
} else if let Some((_, v)) = cursor.peek_next() { } else if let Some((_, v)) = cursor.peek_next()
if v.range().start <= *point { && v.range().start <= *point
return Some(cursor.remove_next().unwrap().1); {
} return Some(cursor.remove_next().unwrap().1);
} }
None None
} }
@ -177,10 +178,10 @@ where
// There's one previous element that may intersect with the range. // There's one previous element that may intersect with the range.
if !self.peeked_prev { if !self.peeked_prev {
self.peeked_prev = true; self.peeked_prev = true;
if let Some((_, v)) = self.cursor.peek_prev() { if let Some((_, v)) = self.cursor.peek_prev()
if v.range().end > self.range.start { && v.range().end > self.range.start
return Some(v); {
} return Some(v);
} }
} }
@ -219,10 +220,10 @@ where
// There's one previous element that may intersect with the range. // There's one previous element that may intersect with the range.
if !self.drained_prev { if !self.drained_prev {
self.drained_prev = true; self.drained_prev = true;
if let Some((_, v)) = self.cursor.peek_prev() { if let Some((_, v)) = self.cursor.peek_prev()
if v.range().end > self.range.start { && v.range().end > self.range.start
return Some(self.cursor.remove_prev().unwrap().1); {
} return Some(self.cursor.remove_prev().unwrap().1);
} }
} }

View File

@ -816,10 +816,10 @@ impl VmarInner {
.map_or(VMAR_LOWEST_ADDR, |vm_mapping| vm_mapping.range().end); .map_or(VMAR_LOWEST_ADDR, |vm_mapping| vm_mapping.range().end);
// FIXME: The up-align may overflow. // FIXME: The up-align may overflow.
let last_occupied_aligned = highest_occupied.align_up(align); let last_occupied_aligned = highest_occupied.align_up(align);
if let Some(last) = last_occupied_aligned.checked_add(size) { if let Some(last) = last_occupied_aligned.checked_add(size)
if last <= VMAR_CAP_ADDR { && last <= VMAR_CAP_ADDR
return Ok(last_occupied_aligned..last); {
} return Ok(last_occupied_aligned..last);
} }
// Slow path that we need to search for a free region. // Slow path that we need to search for a free region.

View File

@ -77,14 +77,14 @@ pub(super) fn alloc(guard: &DisabledLocalIrqGuard, layout: Layout) -> Option<Pad
// If the alignment order is larger than the size order, we need to split // If the alignment order is larger than the size order, we need to split
// the chunk and return the rest part back to the free lists. // the chunk and return the rest part back to the free lists.
let allocated_size = size_of_order(order); let allocated_size = size_of_order(order);
if allocated_size > layout.size() { if allocated_size > layout.size()
if let Some(chunk_addr) = chunk_addr { && let Some(chunk_addr) = chunk_addr
do_dealloc( {
&mut local_pool, do_dealloc(
&mut global_pool, &mut local_pool,
[(chunk_addr + layout.size(), allocated_size - layout.size())].into_iter(), &mut global_pool,
); [(chunk_addr + layout.size(), allocated_size - layout.size())].into_iter(),
} );
} }
balancing::balance(local_pool.deref_mut(), &mut global_pool); balancing::balance(local_pool.deref_mut(), &mut global_pool);

View File

@ -105,11 +105,11 @@ where
let crate_set = let crate_set =
crate_whitelist.map(|crates| crates.iter().copied().collect::<BTreeSet<&str>>()); crate_whitelist.map(|crates| crates.iter().copied().collect::<BTreeSet<&str>>());
for crate_ in tree.iter() { for crate_ in tree.iter() {
if let Some(crate_set) = &crate_set { if let Some(crate_set) = &crate_set
if !crate_set.contains(crate_.name()) { && !crate_set.contains(crate_.name())
early_print!("\n[ktest runner] skipping crate \"{}\".\n", crate_.name()); {
continue; early_print!("\n[ktest runner] skipping crate \"{}\".\n", crate_.name());
} continue;
} }
match run_crate_ktests(crate_, &whitelist_trie) { match run_crate_ktests(crate_, &whitelist_trie) {
KtestResult::Ok => {} KtestResult::Ok => {}
@ -149,7 +149,7 @@ fn run_crate_ktests(crate_: &KtestCrate, whitelist: &Option<SuffixTrie>) -> Ktes
debug_assert_eq!(test.info().package, crate_name); debug_assert_eq!(test.info().package, crate_name);
match test.run( match test.run(
&(ostd::panic::catch_unwind::<(), fn()> &(ostd::panic::catch_unwind::<(), fn()>
as fn(fn()) -> Result<(), Box<(dyn Any + Send + 'static)>>), as fn(fn()) -> Result<(), Box<dyn Any + Send + 'static>>),
) { ) {
Ok(()) => { Ok(()) => {
early_print!(" {}\n", "ok".green()); early_print!(" {}\n", "ok".green());

View File

@ -73,10 +73,11 @@ fn for_each_hart_id(mut f: impl FnMut(u32)) {
// FIXME: We should find a robust method to identify the management // FIXME: We should find a robust method to identify the management
// harts. Here we simply skip those harts without MMU, which is // harts. Here we simply skip those harts without MMU, which is
// supposed to work in most cases. // supposed to work in most cases.
if device_type.as_str() == Some("cpu") && cpu_node.property("mmu-type").is_some() { if device_type.as_str() == Some("cpu")
if let Some(reg) = cpu_node.property("reg") { && cpu_node.property("mmu-type").is_some()
f(reg.as_usize().unwrap() as u32); && let Some(reg) = cpu_node.property("reg")
} {
f(reg.as_usize().unwrap() as u32);
} }
} }
}) })

View File

@ -96,10 +96,10 @@ fn parse_isa_extensions_list(isa_extensions: &fdt::node::NodeProperty) -> IsaExt
if str.is_empty() { if str.is_empty() {
continue; continue;
} }
if let Ok(ext_name) = core::str::from_utf8(str) { if let Ok(ext_name) = core::str::from_utf8(str)
if let Some(ext_data) = EXTENSION_TABLE.iter().find(|e| e.name == ext_name) { && let Some(ext_data) = EXTENSION_TABLE.iter().find(|e| e.name == ext_name)
extensions |= ext_data.flag; {
} extensions |= ext_data.flag;
} }
} }

View File

@ -86,13 +86,13 @@ impl RangeAllocator {
} }
} }
if let Some(key) = to_remove { if let Some(key) = to_remove
if let Some(freenode) = freelist.get_mut(&key) { && let Some(freenode) = freelist.get_mut(&key)
if freenode.block.end - size == freenode.block.start { {
freelist.remove(&key); if freenode.block.end - size == freenode.block.start {
} else { freelist.remove(&key);
freenode.block.end -= size; } else {
} freenode.block.end -= size;
} }
} }
@ -117,26 +117,25 @@ impl RangeAllocator {
if let Some((prev_va, prev_node)) = freelist if let Some((prev_va, prev_node)) = freelist
.upper_bound_mut(core::ops::Bound::Excluded(&free_range.start)) .upper_bound_mut(core::ops::Bound::Excluded(&free_range.start))
.peek_prev() .peek_prev()
&& prev_node.block.end == free_range.start
{ {
if prev_node.block.end == free_range.start { let prev_va = *prev_va;
let prev_va = *prev_va; free_range.start = prev_node.block.start;
free_range.start = prev_node.block.start; freelist.remove(&prev_va);
freelist.remove(&prev_va);
}
} }
freelist.insert(free_range.start, FreeRange::new(free_range.clone())); freelist.insert(free_range.start, FreeRange::new(free_range.clone()));
// 2. check if we can merge the current block with the next block, if we can, do so. // 2. check if we can merge the current block with the next block, if we can, do so.
if let Some((next_va, next_node)) = freelist if let Some((next_va, next_node)) = freelist
.lower_bound_mut(core::ops::Bound::Excluded(&free_range.start)) .lower_bound_mut(core::ops::Bound::Excluded(&free_range.start))
.peek_next() .peek_next()
&& free_range.end == next_node.block.start
{ {
if free_range.end == next_node.block.start { let next_va = *next_va;
let next_va = *next_va; free_range.end = next_node.block.end;
free_range.end = next_node.block.end; freelist.remove(&next_va);
freelist.remove(&next_va); freelist.get_mut(&free_range.start).unwrap().block.end = free_range.end;
freelist.get_mut(&free_range.start).unwrap().block.end = free_range.end;
}
} }
} }