From bb8dde3258d2f8453baabcd730ea84a30420af7c Mon Sep 17 00:00:00 2001 From: Ashwin Naren Date: Mon, 4 May 2026 12:33:45 -0700 Subject: [PATCH] address review --- libkernel/src/error.rs | 4 ++++ libkernel/src/error/syscall_error.rs | 4 ++++ src/drivers/fs/cgroup/mod.rs | 8 ++++---- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/libkernel/src/error.rs b/libkernel/src/error.rs index 1f959f4..1df0249 100644 --- a/libkernel/src/error.rs +++ b/libkernel/src/error.rs @@ -121,6 +121,10 @@ pub enum FsError { #[error("The directory is not empty.")] DirectoryNotEmpty, + /// The device or resource is busy. + #[error("The device or resource is busy.")] + Busy, + /// Invalid input parameters. #[error("Invalid input parameters.")] InvalidInput, diff --git a/libkernel/src/error/syscall_error.rs b/libkernel/src/error/syscall_error.rs index da68933..c4de29a 100644 --- a/libkernel/src/error/syscall_error.rs +++ b/libkernel/src/error/syscall_error.rs @@ -44,6 +44,7 @@ pub const ERANGE: isize = -34; pub const EWOULDBLOCK: isize = -EAGAIN; pub const ENAMETOOLONG: isize = -36; pub const ENOSYS: isize = -38; +pub const ENOTEMPTY: isize = -39; pub const ELOOP: isize = -40; pub const EAFNOSUPPORT: isize = -97; pub const EOPNOTSUPP: isize = -95; @@ -63,7 +64,10 @@ pub fn kern_err_to_syscall(err: KernelError) -> isize { KernelError::Fs(FsError::IsADirectory) => EISDIR, KernelError::Fs(FsError::NotADirectory) => ENOTDIR, KernelError::Fs(FsError::AlreadyExists) => EEXIST, + KernelError::Fs(FsError::DirectoryNotEmpty) => ENOTEMPTY, + KernelError::Fs(FsError::Busy) => EBUSY, KernelError::Fs(FsError::InvalidInput) => EINVAL, // TODO: Is this right? + KernelError::InUse => EBUSY, KernelError::Fs(FsError::PermissionDenied) => EACCES, KernelError::Fs(FsError::TooManyFiles) => EMFILE, KernelError::Fs(FsError::NoDevice) => ENODEV, diff --git a/src/drivers/fs/cgroup/mod.rs b/src/drivers/fs/cgroup/mod.rs index 86a4afe..a02059e 100644 --- a/src/drivers/fs/cgroup/mod.rs +++ b/src/drivers/fs/cgroup/mod.rs @@ -316,11 +316,11 @@ impl Inode for CgroupDirInode { let child = children.get(name).cloned().ok_or(FsError::NotFound)?; if !child.children.lock_save_irq().is_empty() { - return Err(FsError::DirectoryNotEmpty.into()); + return Err(FsError::Busy.into()); } if cgroupfs().has_live_processes_direct(&child) { - return Err(FsError::DirectoryNotEmpty.into()); + return Err(FsError::Busy.into()); } children.remove(name); @@ -612,7 +612,7 @@ impl CgroupFs { fn new() -> Arc { Arc::new(Self { root: CgroupDirInode::new_root(), - next_inode_id: AtomicU64::new(2), + next_inode_id: AtomicU64::new(2 << 8), memberships: SpinLock::new(BTreeMap::new()), }) } @@ -620,7 +620,7 @@ impl CgroupFs { fn alloc_inode_id(&self) -> InodeId { InodeId::from_fsid_and_inodeid( CGROUPFS_ID, - self.next_inode_id.fetch_add(1, Ordering::SeqCst), + self.next_inode_id.fetch_add(1 << 8, Ordering::Relaxed), ) }