Skip to content

Commit 905b093

Browse files
fogtimkroening
authored andcommitted
refactor(fs/mem): move RomFileInner's RwLock into it
1 parent 32f7428 commit 905b093

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

src/fs/mem.rs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,26 +33,29 @@ use crate::{arch, io};
3333
#[derive(Debug)]
3434
pub(crate) struct RomFileInner {
3535
pub data: &'static [u8],
36-
pub attr: FileAttr,
36+
pub attr: RwLock<FileAttr>,
3737
}
3838

3939
impl RomFileInner {
4040
pub fn new(data: &'static [u8], attr: FileAttr) -> Self {
41-
Self { data, attr }
41+
Self {
42+
data,
43+
attr: RwLock::new(attr),
44+
}
4245
}
4346
}
4447

4548
struct RomFileInterface {
4649
/// Position within the file
4750
pos: Mutex<usize>,
4851
/// File content
49-
inner: Arc<RwLock<RomFileInner>>,
52+
inner: Arc<RomFileInner>,
5053
}
5154

5255
#[async_trait]
5356
impl ObjectInterface for RomFileInterface {
5457
async fn poll(&self, event: PollEvent) -> io::Result<PollEvent> {
55-
let len = self.inner.read().await.data.len();
58+
let len = self.inner.data.len();
5659
let pos = *self.pos.lock().await;
5760

5861
let ret = if pos < len {
@@ -68,11 +71,10 @@ impl ObjectInterface for RomFileInterface {
6871
{
6972
let microseconds = arch::kernel::systemtime::now_micros();
7073
let t = timespec::from_usec(microseconds as i64);
71-
let mut guard = self.inner.write().await;
72-
guard.attr.st_atim = t;
74+
self.inner.attr.write().await.st_atim = t;
7375
}
7476

75-
let vec = self.inner.read().await.data;
77+
let vec = self.inner.data;
7678
let mut pos_guard = self.pos.lock().await;
7779
let pos = *pos_guard;
7880

@@ -88,11 +90,10 @@ impl ObjectInterface for RomFileInterface {
8890
}
8991

9092
async fn lseek(&self, offset: isize, whence: SeekWhence) -> io::Result<isize> {
91-
let guard = self.inner.read().await;
92-
let mut pos_guard = self.pos.lock().await;
93-
9493
// NOTE: Allocations can never be larger than `isize::MAX` bytes.
95-
let data_len = guard.data.len() as isize;
94+
let data_len = self.inner.data.len() as isize;
95+
96+
let mut pos_guard = self.pos.lock().await;
9697

9798
let new_pos = match whence {
9899
SeekWhence::Set => offset,
@@ -112,21 +113,20 @@ impl ObjectInterface for RomFileInterface {
112113
}
113114

114115
async fn fstat(&self) -> io::Result<FileAttr> {
115-
let guard = self.inner.read().await;
116-
Ok(guard.attr)
116+
Ok(*self.inner.attr.read().await)
117117
}
118118
}
119119

120120
impl RomFileInterface {
121-
pub fn new(inner: Arc<RwLock<RomFileInner>>) -> Self {
121+
pub fn new(inner: Arc<RomFileInner>) -> Self {
122122
Self {
123123
pos: Mutex::new(0),
124124
inner,
125125
}
126126
}
127127

128128
pub fn len(&self) -> usize {
129-
block_on(async { Ok(self.inner.read().await.data.len()) }, None).unwrap()
129+
self.inner.data.len()
130130
}
131131
}
132132

@@ -280,7 +280,7 @@ impl RamFileInterface {
280280

281281
#[derive(Debug)]
282282
pub(crate) struct RomFile {
283-
data: Arc<RwLock<RomFileInner>>,
283+
data: Arc<RomFileInner>,
284284
}
285285

286286
impl VfsNode for RomFile {
@@ -295,7 +295,7 @@ impl VfsNode for RomFile {
295295
}
296296

297297
fn get_file_attributes(&self) -> io::Result<FileAttr> {
298-
block_on(async { Ok(self.data.read().await.attr) }, None)
298+
block_on(async { Ok(*self.data.attr.read().await) }, None)
299299
}
300300

301301
fn traverse_lstat(&self, components: &mut Vec<&str>) -> io::Result<FileAttr> {
@@ -329,7 +329,7 @@ impl RomFile {
329329
};
330330

331331
Self {
332-
data: Arc::new(RwLock::new(RomFileInner::new(data, attr))),
332+
data: Arc::new(RomFileInner::new(data, attr)),
333333
}
334334
}
335335
}

0 commit comments

Comments
 (0)