From f0957d2f5491d5ae1807f9a1454b14285087974a Mon Sep 17 00:00:00 2001 From: jiangjianfeng Date: Fri, 6 Jun 2025 07:06:30 +0000 Subject: [PATCH] Fix clippy warnings in kernel crate --- kernel/src/context.rs | 2 +- kernel/src/events/events.rs | 2 +- kernel/src/fs/device.rs | 6 ++-- kernel/src/fs/epoll/entry.rs | 2 +- kernel/src/fs/exfat/dentry.rs | 2 ++ kernel/src/fs/exfat/mod.rs | 2 +- kernel/src/fs/exfat/utils.rs | 2 +- kernel/src/fs/ext2/inode.rs | 6 ++-- kernel/src/fs/ext2/xattr.rs | 3 +- kernel/src/fs/fs_resolver.rs | 2 +- kernel/src/fs/overlayfs/fs.rs | 13 ++++----- kernel/src/fs/sysfs/inode.rs | 14 ++++----- kernel/src/fs/sysfs/mod.rs | 2 +- kernel/src/fs/sysfs/test.rs | 6 ++-- .../src/net/socket/netlink/common/unbound.rs | 2 +- .../socket/netlink/kobject_uevent/bound.rs | 2 +- .../kobject_uevent/message/syn_uevent.rs | 9 +++--- .../netlink/kobject_uevent/message/uevent.rs | 9 +++--- .../net/socket/netlink/message/segment/mod.rs | 1 + .../net/socket/netlink/route/kernel/util.rs | 2 +- .../socket/netlink/route/message/attr/addr.rs | 1 + .../socket/netlink/route/message/attr/link.rs | 3 +- .../netlink/route/message/segment/addr.rs | 1 + .../netlink/route/message/segment/mod.rs | 16 +++++----- kernel/src/net/socket/netlink/table/mod.rs | 4 +-- kernel/src/process/clone.rs | 1 + kernel/src/process/exit.rs | 2 +- kernel/src/process/posix_thread/name.rs | 2 +- kernel/src/process/process/terminal.rs | 4 +-- kernel/src/process/process_vm/mod.rs | 2 +- kernel/src/process/signal/pause.rs | 6 ++-- kernel/src/sched/sched_class/policy.rs | 2 +- kernel/src/syscall/getdents64.rs | 4 +-- kernel/src/syscall/sched_getattr.rs | 4 +-- kernel/src/syscall/setxattr.rs | 29 +++++++++---------- kernel/src/syscall/statx.rs | 2 +- kernel/src/time/core/timer.rs | 2 +- kernel/src/time/softirq.rs | 3 +- kernel/src/util/net/addr/family.rs | 4 +-- kernel/src/vm/vmar/mod.rs | 2 +- kernel/src/vm/vmo/mod.rs | 1 - kernel/src/vm/vmo/options.rs | 1 - 42 files changed, 91 insertions(+), 94 deletions(-) diff --git a/kernel/src/context.rs b/kernel/src/context.rs index 5b82ce8a2..5b616044e 100644 --- a/kernel/src/context.rs +++ b/kernel/src/context.rs @@ -50,7 +50,7 @@ pub struct CurrentUserSpace<'a>(Ref<'a, Option>>); #[macro_export] macro_rules! current_userspace { () => {{ - use crate::context::CurrentUserSpace; + use $crate::context::CurrentUserSpace; CurrentUserSpace::new(&ostd::task::Task::current().unwrap()) }}; } diff --git a/kernel/src/events/events.rs b/kernel/src/events/events.rs index 0ca220e33..acfa96156 100644 --- a/kernel/src/events/events.rs +++ b/kernel/src/events/events.rs @@ -39,6 +39,6 @@ impl EventsFilter for () { impl> EventsFilter for Option { fn filter(&self, events: &E) -> bool { - self.as_ref().map_or(true, |f| f.filter(events)) + self.as_ref().is_none_or(|f| f.filter(events)) } } diff --git a/kernel/src/fs/device.rs b/kernel/src/fs/device.rs index 6a6a7bdc6..a6b0dcc95 100644 --- a/kernel/src/fs/device.rs +++ b/kernel/src/fs/device.rs @@ -50,9 +50,9 @@ impl DeviceId { let major = major as u64; let minor = minor as u64; Self( - (major & 0xffff_f000) << 32 - | (major & 0x0000_0fff) << 8 - | (minor & 0xffff_ff00) << 12 + ((major & 0xffff_f000) << 32) + | ((major & 0x0000_0fff) << 8) + | ((minor & 0xffff_ff00) << 12) | (minor & 0x0000_00ff), ) } diff --git a/kernel/src/fs/epoll/entry.rs b/kernel/src/fs/epoll/entry.rs index cacdd02f7..15e56b682 100644 --- a/kernel/src/fs/epoll/entry.rs +++ b/kernel/src/fs/epoll/entry.rs @@ -368,7 +368,7 @@ impl Iterator for ReadySetPopIter<'_> { let weak_entry = entries.pop_front().unwrap(); // Clear the epoll file's events if there are no ready entries. - if entries.len() == 0 { + if entries.is_empty() { self.ready_set.pollee.invalidate(); } diff --git a/kernel/src/fs/exfat/dentry.rs b/kernel/src/fs/exfat/dentry.rs index 02f9f61e2..fc1d4f846 100644 --- a/kernel/src/fs/exfat/dentry.rs +++ b/kernel/src/fs/exfat/dentry.rs @@ -89,6 +89,8 @@ impl TryFrom for ExfatDentry { type Error = crate::error::Error; fn try_from(dentry: RawExfatDentry) -> Result { let dentry_bytes = dentry.as_bytes(); + #[expect(clippy::match_overlapping_arm)] + // FIXME: `EXFAT_STREAM` and `0xC0..=0xFF` overlap. Is the overlapping case expected? match dentry.dentry_type { EXFAT_FILE => Ok(ExfatDentry::File(ExfatFileDentry::from_bytes(dentry_bytes))), EXFAT_STREAM => Ok(ExfatDentry::Stream(ExfatStreamDentry::from_bytes( diff --git a/kernel/src/fs/exfat/mod.rs b/kernel/src/fs/exfat/mod.rs index 0457eb49f..1f347e808 100644 --- a/kernel/src/fs/exfat/mod.rs +++ b/kernel/src/fs/exfat/mod.rs @@ -85,7 +85,7 @@ mod test { BioType::Read => seg .inner_segment() .writer() - .write(&mut self.queue.0.reader().skip(cur_device_ofs)), + .write(self.queue.0.reader().skip(cur_device_ofs)), BioType::Write => self .queue .0 diff --git a/kernel/src/fs/exfat/utils.rs b/kernel/src/fs/exfat/utils.rs index 0f7b7419e..913988947 100644 --- a/kernel/src/fs/exfat/utils.rs +++ b/kernel/src/fs/exfat/utils.rs @@ -8,7 +8,7 @@ use super::fat::ClusterID; use crate::prelude::*; pub fn make_hash_index(cluster: ClusterID, offset: u32) -> usize { - (cluster as usize) << 32usize | (offset as usize & 0xffffffffusize) + ((cluster as usize) << 32usize) | (offset as usize & 0xffffffffusize) } pub fn calc_checksum_32(data: &[u8]) -> u32 { diff --git a/kernel/src/fs/ext2/inode.rs b/kernel/src/fs/ext2/inode.rs index aebcabba8..ce635124d 100644 --- a/kernel/src/fs/ext2/inode.rs +++ b/kernel/src/fs/ext2/inode.rs @@ -2133,10 +2133,10 @@ impl TryFrom for InodeDesc { Ok(Self { type_: inode_type, perm: FilePerm::from_raw_mode(inode.mode)?, - uid: (inode.os_dependent_2.uid_high as u32) << 16 | inode.uid as u32, - gid: (inode.os_dependent_2.gid_high as u32) << 16 | inode.gid as u32, + uid: ((inode.os_dependent_2.uid_high as u32) << 16) | inode.uid as u32, + gid: ((inode.os_dependent_2.gid_high as u32) << 16) | inode.gid as u32, size: if inode_type == InodeType::File { - (inode.size_high as usize) << 32 | inode.size_low as usize + ((inode.size_high as usize) << 32) | inode.size_low as usize } else { inode.size_low as usize }, diff --git a/kernel/src/fs/ext2/xattr.rs b/kernel/src/fs/ext2/xattr.rs index c17e75a2b..8fbbda728 100644 --- a/kernel/src/fs/ext2/xattr.rs +++ b/kernel/src/fs/ext2/xattr.rs @@ -247,8 +247,7 @@ impl Xattr { } value_writer.write_fallible( - &mut self - .blocks_buf + self.blocks_buf .reader() .to_fallible() .skip(entry.value_offset as usize) diff --git a/kernel/src/fs/fs_resolver.rs b/kernel/src/fs/fs_resolver.rs index 3d3bae055..7934c8ad3 100644 --- a/kernel/src/fs/fs_resolver.rs +++ b/kernel/src/fs/fs_resolver.rs @@ -510,7 +510,7 @@ pub fn split_path(path: &str) -> (&str, &str) { let file_name = path .split_inclusive('/') .filter(|&x| x != "/") - .last() + .next_back() .unwrap_or("."); let mut split = path.trim_end_matches('/').rsplitn(2, '/'); diff --git a/kernel/src/fs/overlayfs/fs.rs b/kernel/src/fs/overlayfs/fs.rs index aff6aea19..483358fd1 100644 --- a/kernel/src/fs/overlayfs/fs.rs +++ b/kernel/src/fs/overlayfs/fs.rs @@ -516,9 +516,7 @@ impl OverlayInode { return upper; } - self.get_top_valid_lower_inode() - .map(|lower| lower.clone()) - .unwrap() + self.get_top_valid_lower_inode().cloned().unwrap() } /// Returns the top valid lower inode. @@ -725,7 +723,7 @@ impl OverlayInode { return Ok(upper.clone()); } - debug_assert!(!self.parent.is_none()); + debug_assert!(self.parent.is_some()); // FIXME: Should we hold every upper locks from lower to upper // for such a long period? let parent_upper = self @@ -859,17 +857,16 @@ fn is_opaque_dir(inode: &Arc) -> Result { let name = XattrName::try_from_full_name(OPAQUE_DIR_XATTR_NAME).unwrap(); let mut value = [0u8]; - match inode.get_xattr( + if let Err(e) = inode.get_xattr( name, &mut VmWriter::from(value.as_mut_slice()).to_fallible(), ) { - Err(e) => match e.error() { + match e.error() { Errno::E2BIG | Errno::ENODATA | Errno::EOPNOTSUPP | Errno::ERANGE => { return Ok(false); } _ => return Err(e), - }, - Ok(_) => {} + } }; Ok(value == WHITEOUT_AND_OPAQUE_XATTR_VALUE) } diff --git a/kernel/src/fs/sysfs/inode.rs b/kernel/src/fs/sysfs/inode.rs index 890012a35..c17bcdeed 100644 --- a/kernel/src/fs/sysfs/inode.rs +++ b/kernel/src/fs/sysfs/inode.rs @@ -198,7 +198,7 @@ impl SysFsInode { InnerNode::Branch(child_branch), Arc::downgrade(&self.this()), ); - return Ok(inode); + Ok(inode) } SysNodeType::Leaf => { let child_leaf_node = @@ -208,7 +208,7 @@ impl SysFsInode { InnerNode::Leaf(child_leaf_node), Arc::downgrade(&self.this()), ); - return Ok(inode); + Ok(inode) } SysNodeType::Symlink => { let child_symlink = child_sysnode @@ -219,7 +219,7 @@ impl SysFsInode { child_symlink, Arc::downgrade(&self.this()), ); - return Ok(inode); + Ok(inode) } } } else { @@ -245,7 +245,7 @@ impl SysFsInode { parent_node_arc, Arc::downgrade(&self.this()), ); - return Ok(inode); + Ok(inode) } } @@ -481,9 +481,9 @@ impl Inode for SysFsInode { let mut count = 0; let mut last_ino = start_ino; - let mut iter = self.new_dentry_iter(start_ino + 1); + let iter = self.new_dentry_iter(start_ino + 1); - while let Some(dentry) = iter.next() { + for dentry in iter { // The offset reported back to the caller should be the absolute position let next_offset = (dentry.ino + 1) as usize; let res = visitor.visit(&dentry.name, dentry.ino, dentry.type_, next_offset); @@ -657,7 +657,7 @@ impl<'a> ThisAndParentDentryIter<'a> { } } -impl<'a> Iterator for ThisAndParentDentryIter<'a> { +impl Iterator for ThisAndParentDentryIter<'_> { type Item = Dentry; fn next(&mut self) -> Option { diff --git a/kernel/src/fs/sysfs/mod.rs b/kernel/src/fs/sysfs/mod.rs index 2c7d32baf..699d09b96 100644 --- a/kernel/src/fs/sysfs/mod.rs +++ b/kernel/src/fs/sysfs/mod.rs @@ -23,5 +23,5 @@ pub fn singleton() -> &'static Arc { /// Should be called during kernel filesystem initialization, *after* aster_systree::init(). pub fn init() { // Ensure systree is initialized first. This should be handled by the kernel's init order. - SYSFS_SINGLETON.call_once(|| SysFs::new()); + SYSFS_SINGLETON.call_once(SysFs::new); } diff --git a/kernel/src/fs/sysfs/test.rs b/kernel/src/fs/sysfs/test.rs index 6528b6124..b0c2e40b3 100644 --- a/kernel/src/fs/sysfs/test.rs +++ b/kernel/src/fs/sysfs/test.rs @@ -110,7 +110,7 @@ impl SysNode for MockLeafNode { let value = data.get(name).ok_or(SysTreeError::AttributeError)?; // Should exist if in attrs let bytes = value.as_bytes(); writer - .write_fallible(&mut (&bytes[..]).into()) + .write_fallible(&mut bytes.into()) .map_err(|_| SysTreeError::AttributeError) } @@ -214,7 +214,7 @@ impl SysNode for MockBranchNode { }; let bytes = value.as_bytes(); writer - .write_fallible(&mut (&bytes[..]).into()) + .write_fallible(&mut bytes.into()) .map_err(|_| SysTreeError::AttributeError) } @@ -329,7 +329,7 @@ fn create_mock_systree_instance() -> &'static Arc { let symlink1 = MockSymlinkNode::new("link1", "../branch1/leaf1"); // Build hierarchy - ignore Result since this is test setup - let _ = branch1.add_child(leaf1.clone() as Arc); + branch1.add_child(leaf1.clone() as Arc); let _ = root.add_child(branch1.clone() as Arc); let _ = root.add_child(leaf2.clone() as Arc); let _ = root.add_child(symlink1.clone() as Arc); diff --git a/kernel/src/net/socket/netlink/common/unbound.rs b/kernel/src/net/socket/netlink/common/unbound.rs index 8656bf98a..8a11a3184 100644 --- a/kernel/src/net/socket/netlink/common/unbound.rs +++ b/kernel/src/net/socket/netlink/common/unbound.rs @@ -59,7 +59,7 @@ impl datagram_common::Unbound for UnboundNetlink

let bound_handle = { let endpoint = { - let mut endpoint = endpoint.clone(); + let mut endpoint = *endpoint; endpoint.add_groups(self.groups); endpoint }; diff --git a/kernel/src/net/socket/netlink/kobject_uevent/bound.rs b/kernel/src/net/socket/netlink/kobject_uevent/bound.rs index 0cd2df9bf..0cf9edd4d 100644 --- a/kernel/src/net/socket/netlink/kobject_uevent/bound.rs +++ b/kernel/src/net/socket/netlink/kobject_uevent/bound.rs @@ -81,7 +81,7 @@ impl datagram_common::Bound for BoundNetlinkUevent { response.write_to(writer)?; - let remote = response.src_addr().clone(); + let remote = *response.src_addr(); if !flags.contains(SendRecvFlags::MSG_PEEK) { receive_queue.pop_front().unwrap(); diff --git a/kernel/src/net/socket/netlink/kobject_uevent/message/syn_uevent.rs b/kernel/src/net/socket/netlink/kobject_uevent/message/syn_uevent.rs index 516f84748..96fa072c3 100644 --- a/kernel/src/net/socket/netlink/kobject_uevent/message/syn_uevent.rs +++ b/kernel/src/net/socket/netlink/kobject_uevent/message/syn_uevent.rs @@ -40,7 +40,7 @@ impl FromStr for SyntheticUevent { }; let mut envs = Vec::new(); - for env_str in split.into_iter() { + for env_str in split { let (key, value) = { // Each string should be in the `KEY=VALUE` format. match env_str.split_once('=') { @@ -87,10 +87,9 @@ impl FromStr for Uuid { return_errno_with_message!(Errno::EINVAL, "the UUID length is invalid"); } - for (byte, pattern) in bytes.into_iter().zip(UUID_PATTERN.as_bytes()) { - if *pattern == b'x' && byte.is_ascii_hexdigit() { - continue; - } else if *pattern == b'-' && *byte == b'-' { + for (byte, pattern) in bytes.iter().zip(UUID_PATTERN.as_bytes()) { + if (*pattern == b'x' && byte.is_ascii_hexdigit()) || (*pattern == b'-' && *byte == b'-') + { continue; } else { return_errno_with_message!(Errno::EINVAL, "the UUID content is invalid"); diff --git a/kernel/src/net/socket/netlink/kobject_uevent/message/uevent.rs b/kernel/src/net/socket/netlink/kobject_uevent/message/uevent.rs index 1bd8e0799..071fb4696 100644 --- a/kernel/src/net/socket/netlink/kobject_uevent/message/uevent.rs +++ b/kernel/src/net/socket/netlink/kobject_uevent/message/uevent.rs @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 -use alloc::format; use core::{ + fmt::Display, str::FromStr, sync::atomic::{AtomicU64, Ordering}, }; @@ -142,8 +142,8 @@ impl Uevent { } } -impl ToString for Uevent { - fn to_string(&self) -> String { +impl Display for Uevent { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { let mut env_string = { let len = self .envs @@ -160,7 +160,8 @@ impl ToString for Uevent { env_string.push('\0'); } - format!( + write!( + f, "{}@{}\0ACTION={}\0DEVPATH={}\0SUBSYSTEM={}\0{}SEQNUM={}\0", self.action.as_str(), self.devpath, diff --git a/kernel/src/net/socket/netlink/message/segment/mod.rs b/kernel/src/net/socket/netlink/message/segment/mod.rs index e787ab62d..293136afe 100644 --- a/kernel/src/net/socket/netlink/message/segment/mod.rs +++ b/kernel/src/net/socket/netlink/message/segment/mod.rs @@ -89,6 +89,7 @@ pub trait SegmentBody: Sized + Clone + Copy { #[repr(u16)] #[derive(Debug, Clone, Copy, TryFromInt, PartialEq, Eq, PartialOrd, Ord)] +#[expect(clippy::upper_case_acronyms)] pub enum CSegmentType { // Standard netlink message types NOOP = 1, diff --git a/kernel/src/net/socket/netlink/route/kernel/util.rs b/kernel/src/net/socket/netlink/route/kernel/util.rs index 596aa6d93..ce10a2557 100644 --- a/kernel/src/net/socket/netlink/route/kernel/util.rs +++ b/kernel/src/net/socket/netlink/route/kernel/util.rs @@ -29,7 +29,7 @@ fn append_done_segment(request_header: &CMsgSegHdr, response_segments: &mut Vec< } /// Adds the `MULTI` flag to all segments in `segments`. -fn add_multi_flag(response_segments: &mut Vec) { +fn add_multi_flag(response_segments: &mut [RtnlSegment]) { for segment in response_segments.iter_mut() { let header = segment.header_mut(); let mut flags = SegHdrCommonFlags::from_bits_truncate(header.flags); diff --git a/kernel/src/net/socket/netlink/route/message/attr/addr.rs b/kernel/src/net/socket/netlink/route/message/attr/addr.rs index a6abe5049..d3916c352 100644 --- a/kernel/src/net/socket/netlink/route/message/attr/addr.rs +++ b/kernel/src/net/socket/netlink/route/message/attr/addr.rs @@ -13,6 +13,7 @@ use crate::{ #[derive(Debug, Clone, Copy, TryFromInt)] #[repr(u16)] #[expect(non_camel_case_types)] +#[expect(clippy::upper_case_acronyms)] enum AddrAttrClass { UNSPEC = 0, ADDRESS = 1, diff --git a/kernel/src/net/socket/netlink/route/message/attr/link.rs b/kernel/src/net/socket/netlink/route/message/attr/link.rs index 0a4d0e8a8..2c6e095e9 100644 --- a/kernel/src/net/socket/netlink/route/message/attr/link.rs +++ b/kernel/src/net/socket/netlink/route/message/attr/link.rs @@ -12,7 +12,8 @@ use crate::{ /// Reference: . #[derive(Debug, Clone, Copy, TryFromInt)] #[repr(u16)] -#[allow(non_camel_case_types)] +#[expect(non_camel_case_types)] +#[expect(clippy::upper_case_acronyms)] enum LinkAttrClass { UNSPEC = 0, ADDRESS = 1, diff --git a/kernel/src/net/socket/netlink/route/message/segment/addr.rs b/kernel/src/net/socket/netlink/route/message/segment/addr.rs index cdad13674..26923f38c 100644 --- a/kernel/src/net/socket/netlink/route/message/segment/addr.rs +++ b/kernel/src/net/socket/netlink/route/message/segment/addr.rs @@ -105,6 +105,7 @@ bitflags! { /// Reference: . #[repr(u8)] #[derive(Debug, Clone, Copy, TryFromInt)] +#[expect(clippy::upper_case_acronyms)] pub enum RtScope { UNIVERSE = 0, // User defined values diff --git a/kernel/src/net/socket/netlink/route/message/segment/mod.rs b/kernel/src/net/socket/netlink/route/message/segment/mod.rs index 40ad20267..0a64b0366 100644 --- a/kernel/src/net/socket/netlink/route/message/segment/mod.rs +++ b/kernel/src/net/socket/netlink/route/message/segment/mod.rs @@ -5,18 +5,18 @@ //! //! Typically, a segment will consist of three parts: //! -//! 1. Header: The headers of all segments are of type [`CMessageSegmentHeader`], -//! which indicate the type and total length of the segment. +//! 1. Header: The headers of all segments are of type [`CMegSegHdr`], +//! which indicate the type and total length of the segment. //! //! 2. Body: The body is the main component of a segment. -//! Each segment will have one and only one body. -//! The body type is defined by the `type_` field of the header. +//! Each segment will have one and only one body. +//! The body type is defined by the `type_` field of the header. //! //! 3. Attributes: Attributes are optional. -//! A segment can have zero or multiple attributes. -//! Attributes belong to different classes, -//! with the class defined by the `type_` field of the header. -//! The total number of attributes is controlled by the `len` field of the header. +//! A segment can have zero or multiple attributes. +//! Attributes belong to different classes, +//! with the class defined by the `type_` field of the header. +//! The total number of attributes is controlled by the `len` field of the header. //! //! Note that all headers, bodies, and attributes require //! their starting address in memory to be aligned to [`super::NLMSG_ALIGN`] diff --git a/kernel/src/net/socket/netlink/table/mod.rs b/kernel/src/net/socket/netlink/table/mod.rs index fe0588194..e2dd25e4e 100644 --- a/kernel/src/net/socket/netlink/table/mod.rs +++ b/kernel/src/net/socket/netlink/table/mod.rs @@ -259,7 +259,7 @@ impl Drop for BoundHandle { } pub(super) fn init() { - NETLINK_SOCKET_TABLE.call_once(|| NetlinkSocketTable::new()); + NETLINK_SOCKET_TABLE.call_once(NetlinkSocketTable::new); } /// Returns whether the `protocol` is valid. @@ -270,7 +270,7 @@ pub fn is_valid_protocol(protocol: NetlinkProtocolId) -> bool { /// Netlink protocols that are assigned for specific usage. /// /// Reference: . -#[allow(non_camel_case_types)] +#[expect(non_camel_case_types)] #[repr(u32)] #[derive(Debug, Clone, Copy, TryFromInt)] pub enum StandardNetlinkProtocol { diff --git a/kernel/src/process/clone.rs b/kernel/src/process/clone.rs index f4f4c4e2c..de61e6b2f 100644 --- a/kernel/src/process/clone.rs +++ b/kernel/src/process/clone.rs @@ -515,6 +515,7 @@ fn clone_sysvsem(clone_flags: CloneFlags) -> Result<()> { Ok(()) } +#[expect(clippy::too_many_arguments)] fn create_child_process( pid: Pid, parent: Weak, diff --git a/kernel/src/process/exit.rs b/kernel/src/process/exit.rs index 480905260..a003cc942 100644 --- a/kernel/src/process/exit.rs +++ b/kernel/src/process/exit.rs @@ -80,7 +80,7 @@ fn move_process_children( // Take the lock first to avoid the race when the `reaper_process` is exiting concurrently. let mut reaper_process_children = reaper_process.children().lock(); - let is_init = is_init_process(&reaper_process); + let is_init = is_init_process(reaper_process); let is_zombie = reaper_process.status().is_zombie(); if !is_init && is_zombie { return Err(()); diff --git a/kernel/src/process/posix_thread/name.rs b/kernel/src/process/posix_thread/name.rs index fa5005e03..8d8c3e53d 100644 --- a/kernel/src/process/posix_thread/name.rs +++ b/kernel/src/process/posix_thread/name.rs @@ -28,7 +28,7 @@ impl ThreadName { let mut thread_name = ThreadName::new(); let executable_file_name = executable_path .split('/') - .last() + .next_back() .ok_or(Error::with_message(Errno::EINVAL, "invalid elf path"))?; let name = CString::new(executable_file_name)?; thread_name.set_name(&name)?; diff --git a/kernel/src/process/process/terminal.rs b/kernel/src/process/process/terminal.rs index d58747381..b9c411aed 100644 --- a/kernel/src/process/process/terminal.rs +++ b/kernel/src/process/process/terminal.rs @@ -108,7 +108,7 @@ impl dyn Terminal { let mut session_inner = session.lock(); if let Some(session_terminal) = session_inner.terminal() { - if Arc::ptr_eq(&session_terminal, &self) { + if Arc::ptr_eq(session_terminal, &self) { return Ok(()); } return_errno_with_message!( @@ -195,7 +195,7 @@ impl dyn Terminal { if !session_inner .terminal() - .is_some_and(|session_terminal| Arc::ptr_eq(session_terminal, &self)) + .is_some_and(|session_terminal| Arc::ptr_eq(session_terminal, self)) { return_errno_with_message!( Errno::ENOTTY, diff --git a/kernel/src/process/process_vm/mod.rs b/kernel/src/process/process_vm/mod.rs index 05495e338..600e442ae 100644 --- a/kernel/src/process/process_vm/mod.rs +++ b/kernel/src/process/process_vm/mod.rs @@ -171,7 +171,7 @@ impl ProcessVm { pub fn clear_and_map(&self) { let root_vmar = self.lock_root_vmar(); root_vmar.unwrap().clear().unwrap(); - self.heap.alloc_and_map_vm(&root_vmar.unwrap()).unwrap(); + self.heap.alloc_and_map_vm(root_vmar.unwrap()).unwrap(); } } diff --git a/kernel/src/process/signal/pause.rs b/kernel/src/process/signal/pause.rs index c51faede4..cdc1cabff 100644 --- a/kernel/src/process/signal/pause.rs +++ b/kernel/src/process/signal/pause.rs @@ -96,7 +96,7 @@ pub trait Pause: WaitTimeout { /// [`ETIME`]: crate::error::Errno::ETIME /// [`EINTR`]: crate::error::Errno::EINTR #[track_caller] - fn pause_timeout<'a>(&self, timeout: &TimeoutExt<'a>) -> Result<()>; + fn pause_timeout(&self, timeout: &TimeoutExt<'_>) -> Result<()>; } impl Pause for Waiter { @@ -136,7 +136,7 @@ impl Pause for Waiter { res } - fn pause_timeout<'a>(&self, timeout: &TimeoutExt<'a>) -> Result<()> { + fn pause_timeout(&self, timeout: &TimeoutExt<'_>) -> Result<()> { let timer = timeout.check_expired()?.map(|timeout| { let waker = self.waker(); timeout.create_timer(move || { @@ -201,7 +201,7 @@ impl Pause for WaitQueue { waiter.pause_until_or_timeout_impl(cond, timeout) } - fn pause_timeout<'a>(&self, _timeout: &TimeoutExt<'a>) -> Result<()> { + fn pause_timeout(&self, _timeout: &TimeoutExt<'_>) -> Result<()> { panic!("`pause_timeout` can only be used on `Waiter`"); } } diff --git a/kernel/src/sched/sched_class/policy.rs b/kernel/src/sched/sched_class/policy.rs index 3e04db3c2..6e5d62d19 100644 --- a/kernel/src/sched/sched_class/policy.rs +++ b/kernel/src/sched/sched_class/policy.rs @@ -103,6 +103,6 @@ impl SchedPolicyState { } pub fn update(&self, update: impl FnOnce(&mut SchedPolicy) -> T) -> T { - update(&mut *self.policy.disable_irq().lock()) + update(&mut self.policy.disable_irq().lock()) } } diff --git a/kernel/src/syscall/getdents64.rs b/kernel/src/syscall/getdents64.rs index 06b98b78e..fb6b96fc8 100644 --- a/kernel/src/syscall/getdents64.rs +++ b/kernel/src/syscall/getdents64.rs @@ -113,7 +113,7 @@ struct Dirent { name: CString, } -#[repr(packed)] +#[repr(C, packed)] #[derive(Debug, Clone, Copy)] struct DirentInner { d_ino: u64, @@ -172,7 +172,7 @@ struct Dirent64 { name: CString, } -#[repr(packed)] +#[repr(C, packed)] #[derive(Debug, Clone, Copy)] struct Dirent64Inner { d_ino: u64, diff --git a/kernel/src/syscall/sched_getattr.rs b/kernel/src/syscall/sched_getattr.rs index 1e0c8bff3..ad53e041c 100644 --- a/kernel/src/syscall/sched_getattr.rs +++ b/kernel/src/syscall/sched_getattr.rs @@ -183,9 +183,9 @@ pub(super) fn access_sched_attr_with( f: impl FnOnce(&SchedAttr) -> Result, ) -> Result { match tid { - 0 => f(&ctx.thread.sched_attr()), + 0 => f(ctx.thread.sched_attr()), _ if tid > (i32::MAX as u32) => Err(Error::with_message(Errno::EINVAL, "invalid tid")), - _ => f(&thread_table::get_thread(tid) + _ => f(thread_table::get_thread(tid) .ok_or_else(|| Error::with_message(Errno::ESRCH, "thread does not exist"))? .sched_attr()), } diff --git a/kernel/src/syscall/setxattr.rs b/kernel/src/syscall/setxattr.rs index efd5377ca..fd953c583 100644 --- a/kernel/src/syscall/setxattr.rs +++ b/kernel/src/syscall/setxattr.rs @@ -151,7 +151,7 @@ pub(super) fn lookup_dentry_for_xattr<'a>( } } -pub(super) fn read_xattr_name_cstr_from_user<'a>( +pub(super) fn read_xattr_name_cstr_from_user( name_ptr: Vaddr, user_space: &CurrentUserSpace, ) -> Result { @@ -170,9 +170,10 @@ pub(super) fn parse_xattr_name(name_str: &str) -> Result { return_errno_with_message!(Errno::ERANGE, "xattr name empty or too long"); } - let xattr_name = XattrName::try_from_full_name(name_str.as_ref()).ok_or( - Error::with_message(Errno::EOPNOTSUPP, "invalid xattr namespace"), - )?; + let xattr_name = XattrName::try_from_full_name(name_str).ok_or(Error::with_message( + Errno::EOPNOTSUPP, + "invalid xattr namespace", + ))?; Ok(xattr_name) } @@ -181,18 +182,14 @@ pub(super) fn check_xattr_namespace(namespace: XattrNamespace, ctx: &Context) -> let permitted_capset = credentials.permitted_capset(); let effective_capset = credentials.effective_capset(); - match namespace { - XattrNamespace::Trusted => { - if !permitted_capset.contains(CapSet::SYS_ADMIN) - || !effective_capset.contains(CapSet::SYS_ADMIN) - { - return_errno_with_message!( - Errno::EPERM, - "try to access trusted xattr without CAP_SYS_ADMIN" - ); - } - } - _ => {} + if namespace == XattrNamespace::Trusted + && (!permitted_capset.contains(CapSet::SYS_ADMIN) + || !effective_capset.contains(CapSet::SYS_ADMIN)) + { + return_errno_with_message!( + Errno::EPERM, + "try to access trusted xattr without CAP_SYS_ADMIN" + ); } Ok(()) } diff --git a/kernel/src/syscall/statx.rs b/kernel/src/syscall/statx.rs index cd3d34157..4c1d01d99 100644 --- a/kernel/src/syscall/statx.rs +++ b/kernel/src/syscall/statx.rs @@ -184,7 +184,7 @@ impl From for StatxTimestamp { fn from(duration: Duration) -> Self { Self { tv_sec: duration.as_secs() as i64, - tv_nsec: duration.subsec_nanos() as u32, + tv_nsec: duration.subsec_nanos(), __reserved: 0, } } diff --git a/kernel/src/time/core/timer.rs b/kernel/src/time/core/timer.rs index 13d2f978e..f5c4a2cc7 100644 --- a/kernel/src/time/core/timer.rs +++ b/kernel/src/time/core/timer.rs @@ -188,7 +188,7 @@ impl TimerManager { pub fn process_expired_timers(&self) { let callbacks = { let mut timeout_list = self.timer_callbacks.disable_irq().lock(); - if timeout_list.len() == 0 { + if timeout_list.is_empty() { return; } diff --git a/kernel/src/time/softirq.rs b/kernel/src/time/softirq.rs index 91e63a4ec..8dcd5251c 100644 --- a/kernel/src/time/softirq.rs +++ b/kernel/src/time/softirq.rs @@ -5,8 +5,7 @@ use alloc::{boxed::Box, vec, vec::Vec}; use aster_softirq::{softirq_id::TIMER_SOFTIRQ_ID, SoftIrqLine}; use ostd::{sync::RcuOption, timer}; -#[allow(clippy::type_complexity)] -#[allow(clippy::box_collection)] +#[expect(clippy::type_complexity)] static TIMER_SOFTIRQ_CALLBACKS: RcuOption>> = RcuOption::new_none(); pub(super) fn init() { diff --git a/kernel/src/util/net/addr/family.rs b/kernel/src/util/net/addr/family.rs index 14a4d0119..9901ac737 100644 --- a/kernel/src/util/net/addr/family.rs +++ b/kernel/src/util/net/addr/family.rs @@ -268,13 +268,13 @@ pub fn write_socket_addr_with_max_len( } // Utility function to write a C socket address to user space. -fn write_c_socket_address_util( +fn write_c_socket_address_util( addr: TSockAddr, dest: Vaddr, max_len: usize, ) -> Result where - TCSockAddr: From, + TCSockAddr: Pod + From, { let c_socket_addr = TCSockAddr::from(addr); let actual_len = size_of::(); diff --git a/kernel/src/vm/vmar/mod.rs b/kernel/src/vm/vmar/mod.rs index 712ecdc21..31c1296c0 100644 --- a/kernel/src/vm/vmar/mod.rs +++ b/kernel/src/vm/vmar/mod.rs @@ -673,7 +673,7 @@ impl<'a, R1, R2> VmarMapOptions<'a, R1, R2> { } } -impl<'a, R1, R2> VmarMapOptions<'a, R1, R2> +impl VmarMapOptions<'_, R1, R2> where Vmo: VmoRightsOp, { diff --git a/kernel/src/vm/vmo/mod.rs b/kernel/src/vm/vmo/mod.rs index 3ff249d58..77e084bc2 100644 --- a/kernel/src/vm/vmo/mod.rs +++ b/kernel/src/vm/vmo/mod.rs @@ -459,7 +459,6 @@ impl Vmo_ { cursor.next(); } - drop(cursor); drop(locked_pages); for page_idx in removed_page_idx { diff --git a/kernel/src/vm/vmo/options.rs b/kernel/src/vm/vmo/options.rs index c3d7121bc..fa98b78ef 100644 --- a/kernel/src/vm/vmo/options.rs +++ b/kernel/src/vm/vmo/options.rs @@ -143,7 +143,6 @@ fn committed_pages_if_continuous(flags: VmoFlags, size: usize) -> Result