From 770a1234154c19ba75e00ae0e4c26496f854af3b Mon Sep 17 00:00:00 2001 From: LI Qing Date: Thu, 16 May 2024 14:59:09 +0800 Subject: [PATCH] Change the return value of dup() for Vmo --- kernel/aster-nix/src/fs/exfat/dentry.rs | 2 +- kernel/aster-nix/src/fs/utils/page_cache.rs | 2 +- .../process/program_loader/elf/load_elf.rs | 2 +- kernel/aster-nix/src/vm/vmo/options.rs | 4 ++-- kernel/aster-nix/src/vm/vmo/static_cap.rs | 19 ++++++++----------- 5 files changed, 13 insertions(+), 16 deletions(-) diff --git a/kernel/aster-nix/src/fs/exfat/dentry.rs b/kernel/aster-nix/src/fs/exfat/dentry.rs index 84119bfd9..63d7bbe8c 100644 --- a/kernel/aster-nix/src/fs/exfat/dentry.rs +++ b/kernel/aster-nix/src/fs/exfat/dentry.rs @@ -270,7 +270,7 @@ impl ExfatDentrySet { } pub(super) fn read_from(page_cache: Vmo, offset: usize) -> Result { - let mut iter = ExfatDentryIterator::new(page_cache.dup().unwrap(), offset, None)?; + let mut iter = ExfatDentryIterator::new(page_cache, offset, None)?; let primary_dentry_result = iter.next(); if primary_dentry_result.is_none() { diff --git a/kernel/aster-nix/src/fs/utils/page_cache.rs b/kernel/aster-nix/src/fs/utils/page_cache.rs index 31eda2d2a..4e8fef4c2 100644 --- a/kernel/aster-nix/src/fs/utils/page_cache.rs +++ b/kernel/aster-nix/src/fs/utils/page_cache.rs @@ -45,7 +45,7 @@ impl PageCache { // TODO: The capability is too high,restrict it to eliminate the possibility of misuse. // For example, the `resize` api should be forbidded. pub fn pages(&self) -> Vmo { - self.pages.dup().unwrap() + self.pages.dup() } /// Evict the data within a specified range from the page cache and persist diff --git a/kernel/aster-nix/src/process/program_loader/elf/load_elf.rs b/kernel/aster-nix/src/process/program_loader/elf/load_elf.rs index 0d32b21d5..f8ae19381 100644 --- a/kernel/aster-nix/src/process/program_loader/elf/load_elf.rs +++ b/kernel/aster-nix/src/process/program_loader/elf/load_elf.rs @@ -325,7 +325,7 @@ fn init_segment_vmo(program_header: &ProgramHeader64, elf_file: &Dentry) -> Resu start..end }; debug_assert!(vmo_size >= (program_header.file_size as usize).align_up(PAGE_SIZE)); - page_cache_vmo.new_cow_child(parent_range)?.alloc()? + page_cache_vmo.new_cow_child(parent_range).alloc()? }; let anonymous_map_size: usize = if vmo_size > segment_vmo.size() { diff --git a/kernel/aster-nix/src/vm/vmo/options.rs b/kernel/aster-nix/src/vm/vmo/options.rs index 5328baddf..2d2ae374c 100644 --- a/kernel/aster-nix/src/vm/vmo/options.rs +++ b/kernel/aster-nix/src/vm/vmo/options.rs @@ -513,7 +513,7 @@ mod test { #[ktest] fn slice_child() { let parent = VmoOptions::::new(2 * PAGE_SIZE).alloc().unwrap(); - let parent_dup = parent.dup().unwrap(); + let parent_dup = parent.dup(); let slice_child = VmoChildOptions::new_slice(parent_dup, 0..PAGE_SIZE) .alloc() .unwrap(); @@ -530,7 +530,7 @@ mod test { let parent = VmoOptions::::new(2 * PAGE_SIZE).alloc().unwrap(); parent.write_val(1, &42u8).unwrap(); parent.write_val(2, &16u8).unwrap(); - let parent_dup = parent.dup().unwrap(); + let parent_dup = parent.dup(); let cow_child = VmoChildOptions::new_cow(parent_dup, 0..10 * PAGE_SIZE) .alloc() .unwrap(); diff --git a/kernel/aster-nix/src/vm/vmo/static_cap.rs b/kernel/aster-nix/src/vm/vmo/static_cap.rs index ffa23f877..8b07f8eb6 100644 --- a/kernel/aster-nix/src/vm/vmo/static_cap.rs +++ b/kernel/aster-nix/src/vm/vmo/static_cap.rs @@ -36,9 +36,9 @@ impl Vmo> { pub fn new_slice_child( &self, range: Range, - ) -> Result, VmoSliceChild>> { - let dup_self = self.dup()?; - Ok(VmoChildOptions::new_slice(dup_self, range)) + ) -> VmoChildOptions, VmoSliceChild> { + let dup_self = self.dup(); + VmoChildOptions::new_slice(dup_self, range) } /// Creates a new COW VMO through a set of VMO child options. @@ -62,12 +62,9 @@ impl Vmo> { /// The child will be given the access rights of the parent /// plus the Write right. #[require(R > Dup)] - pub fn new_cow_child( - &self, - range: Range, - ) -> Result, VmoCowChild>> { - let dup_self = self.dup()?; - Ok(VmoChildOptions::new_cow(dup_self, range)) + pub fn new_cow_child(&self, range: Range) -> VmoChildOptions, VmoCowChild> { + let dup_self = self.dup(); + VmoChildOptions::new_cow(dup_self, range) } /// commit a page at specific offset @@ -135,8 +132,8 @@ impl Vmo> { /// /// The method requires the Dup right. #[require(R > Dup)] - pub fn dup(&self) -> Result { - Ok(Vmo(self.0.clone(), self.1)) + pub fn dup(&self) -> Self { + Vmo(self.0.clone(), self.1) } /// Strict the access rights.