diff --git a/Cargo.lock b/Cargo.lock index 7903362..d6bff6c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -307,9 +307,9 @@ dependencies = [ [[package]] name = "ext4plus" -version = "0.1.0-alpha.7" +version = "0.1.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dc277b4b40b9c396d5519685fa08c9feada784011646ce7f40fa8ec68baf8e5" +checksum = "a25bd6af4472ec54e136bc5bf6e3f9556d35df5c5e554cc4092d40a57372530b" dependencies = [ "async-lock", "async-trait", diff --git a/libkernel/Cargo.toml b/libkernel/Cargo.toml index 3c27571..64cbf1c 100644 --- a/libkernel/Cargo.toml +++ b/libkernel/Cargo.toml @@ -35,7 +35,7 @@ tock-registers = { version = "0.10.1", optional = true } # fs async-trait = { workspace = true, optional = true } -ext4plus = { version = "0.1.0-alpha.7", optional = true } +ext4plus = { version = "0.1.0-beta.1", optional = true } # proc_vm object = { version = "0.38.0", default-features = false, features = ["core", "elf", "read_core"], optional = true } diff --git a/libkernel/src/fs/filesystems/ext4/mod.rs b/libkernel/src/fs/filesystems/ext4/mod.rs index 45d40ab..0a7604b 100644 --- a/libkernel/src/fs/filesystems/ext4/mod.rs +++ b/libkernel/src/fs/filesystems/ext4/mod.rs @@ -371,8 +371,8 @@ where } async fn link(&self, name: &str, inode: Arc) -> Result<()> { - let inner = self.inner.lock().await; - let inner_dir = match &*inner { + let mut inner = self.inner.lock().await; + let inner_dir = match &mut *inner { InodeInner::Directory(d) => d, _ => return Err(KernelError::NotSupported), }; @@ -400,8 +400,8 @@ where } async fn unlink(&self, name: &str) -> Result<()> { - let inner = self.inner.lock().await; - let inner_dir = match &*inner { + let mut inner = self.inner.lock().await; + let inner_dir = match &mut *inner { InodeInner::Directory(d) => d, _ => return Err(KernelError::NotSupported), }; @@ -462,10 +462,10 @@ where .lock() .await .clone(); - let old_parent_dir = Dir::open_inode(&fs.inner, old_parent_inode)?; + let mut old_parent_dir = Dir::open_inode(&fs.inner, old_parent_inode)?; - let inner = self.inner.lock().await; - let inner_dir = match &*inner { + let mut inner = self.inner.lock().await; + let inner_dir = match &mut *inner { InodeInner::Directory(d) => d, _ => return Err(KernelError::NotSupported), }; @@ -554,14 +554,11 @@ where } async fn symlink(&self, name: &str, target: &Path) -> Result<()> { - let inner = self.inner.lock().await; - let inner_dir = match &*inner { + let mut inner = self.inner.lock().await; + let inner_dir = match &mut *inner { InodeInner::Directory(d) => d, _ => return Err(KernelError::NotSupported), }; - if inner.file_type() != ext4plus::FileType::Directory { - return Err(KernelError::NotSupported); - } let fs = self.fs_ref.upgrade().unwrap(); fs.inner .symlink(