Revise the pages() method in the page cache to only return a reference

This commit is contained in:
LI Qing 2024-05-16 15:04:42 +08:00 committed by Tate, Hongliang Tian
parent 770a123415
commit f4ea23b72c
4 changed files with 10 additions and 12 deletions

View File

@ -235,7 +235,7 @@ impl ExfatInodeInner {
return Ok((0, 0)); return Ok((0, 0));
} }
let iterator = ExfatDentryIterator::new(self.page_cache.pages(), 0, Some(self.size))?; let iterator = ExfatDentryIterator::new(self.page_cache.pages().dup(), 0, Some(self.size))?;
let mut sub_inodes = 0; let mut sub_inodes = 0;
let mut sub_dirs = 0; let mut sub_dirs = 0;
for dentry_result in iterator { for dentry_result in iterator {
@ -301,10 +301,8 @@ impl ExfatInodeInner {
// Need to read the latest dentry set from parent inode. // Need to read the latest dentry set from parent inode.
let mut dentry_set = ExfatDentrySet::read_from( let mut dentry_set =
page_cache.dup().unwrap(), ExfatDentrySet::read_from(page_cache.dup(), self.dentry_entry as usize * DENTRY_SIZE)?;
self.dentry_entry as usize * DENTRY_SIZE,
)?;
let mut file_dentry = dentry_set.get_file_dentry(); let mut file_dentry = dentry_set.get_file_dentry();
let mut stream_dentry = dentry_set.get_stream_dentry(); let mut stream_dentry = dentry_set.get_stream_dentry();
@ -366,7 +364,7 @@ impl ExfatInodeInner {
let fs = self.fs(); let fs = self.fs();
let cluster_size = fs.cluster_size(); let cluster_size = fs.cluster_size();
let mut iter = ExfatDentryIterator::new(self.page_cache.pages(), offset, None)?; let mut iter = ExfatDentryIterator::new(self.page_cache.pages().dup(), offset, None)?;
let mut dir_read = 0; let mut dir_read = 0;
let mut current_off = offset; let mut current_off = offset;
@ -809,7 +807,7 @@ impl ExfatInode {
let inner = self.inner.upread(); let inner = self.inner.upread();
let dentry_iterator = let dentry_iterator =
ExfatDentryIterator::new(inner.page_cache.pages(), 0, Some(inner.size))?; ExfatDentryIterator::new(inner.page_cache.pages().dup(), 0, Some(inner.size))?;
let mut contiguous_unused = 0; let mut contiguous_unused = 0;
let mut entry_id = 0; let mut entry_id = 0;
@ -1197,7 +1195,7 @@ impl Inode for ExfatInode {
} }
fn page_cache(&self) -> Option<Vmo<Full>> { fn page_cache(&self) -> Option<Vmo<Full>> {
Some(self.inner.read().page_cache.pages()) Some(self.inner.read().page_cache.pages().dup())
} }
fn read_at(&self, offset: usize, buf: &mut [u8]) -> Result<usize> { fn read_at(&self, offset: usize, buf: &mut [u8]) -> Result<usize> {

View File

@ -67,7 +67,7 @@ impl Inode {
} }
pub fn page_cache(&self) -> Vmo<Full> { pub fn page_cache(&self) -> Vmo<Full> {
self.inner.read().page_cache.pages() self.inner.read().page_cache.pages().dup()
} }
pub fn create( pub fn create(

View File

@ -458,7 +458,7 @@ impl Inode for RamInode {
.read() .read()
.inner .inner
.as_file() .as_file()
.map(|page_cache| page_cache.pages()) .map(|page_cache| page_cache.pages().dup())
} }
fn read_at(&self, offset: usize, buf: &mut [u8]) -> Result<usize> { fn read_at(&self, offset: usize, buf: &mut [u8]) -> Result<usize> {

View File

@ -44,8 +44,8 @@ impl PageCache {
/// Returns the Vmo object. /// Returns the Vmo object.
// TODO: The capability is too highrestrict it to eliminate the possibility of misuse. // TODO: The capability is too highrestrict it to eliminate the possibility of misuse.
// For example, the `resize` api should be forbidded. // For example, the `resize` api should be forbidded.
pub fn pages(&self) -> Vmo<Full> { pub fn pages(&self) -> &Vmo<Full> {
self.pages.dup() &self.pages
} }
/// Evict the data within a specified range from the page cache and persist /// Evict the data within a specified range from the page cache and persist