mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-16 17:46:48 +00:00
Revise the pages() method in the page cache to only return a reference
This commit is contained in:
parent
770a123415
commit
f4ea23b72c
@ -235,7 +235,7 @@ impl ExfatInodeInner {
|
||||
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_dirs = 0;
|
||||
for dentry_result in iterator {
|
||||
@ -301,10 +301,8 @@ impl ExfatInodeInner {
|
||||
|
||||
// Need to read the latest dentry set from parent inode.
|
||||
|
||||
let mut dentry_set = ExfatDentrySet::read_from(
|
||||
page_cache.dup().unwrap(),
|
||||
self.dentry_entry as usize * DENTRY_SIZE,
|
||||
)?;
|
||||
let mut dentry_set =
|
||||
ExfatDentrySet::read_from(page_cache.dup(), self.dentry_entry as usize * DENTRY_SIZE)?;
|
||||
|
||||
let mut file_dentry = dentry_set.get_file_dentry();
|
||||
let mut stream_dentry = dentry_set.get_stream_dentry();
|
||||
@ -366,7 +364,7 @@ impl ExfatInodeInner {
|
||||
let fs = self.fs();
|
||||
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 current_off = offset;
|
||||
@ -809,7 +807,7 @@ impl ExfatInode {
|
||||
let inner = self.inner.upread();
|
||||
|
||||
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 entry_id = 0;
|
||||
@ -1197,7 +1195,7 @@ impl Inode for ExfatInode {
|
||||
}
|
||||
|
||||
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> {
|
||||
|
@ -67,7 +67,7 @@ impl Inode {
|
||||
}
|
||||
|
||||
pub fn page_cache(&self) -> Vmo<Full> {
|
||||
self.inner.read().page_cache.pages()
|
||||
self.inner.read().page_cache.pages().dup()
|
||||
}
|
||||
|
||||
pub fn create(
|
||||
|
@ -458,7 +458,7 @@ impl Inode for RamInode {
|
||||
.read()
|
||||
.inner
|
||||
.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> {
|
||||
|
@ -44,8 +44,8 @@ impl PageCache {
|
||||
/// Returns the Vmo object.
|
||||
// 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<Full> {
|
||||
self.pages.dup()
|
||||
pub fn pages(&self) -> &Vmo<Full> {
|
||||
&self.pages
|
||||
}
|
||||
|
||||
/// Evict the data within a specified range from the page cache and persist
|
||||
|
Loading…
x
Reference in New Issue
Block a user