@@ -10,6 +10,8 @@ use crate::{
1010
1111/// Virtual filesystem layer over easy-fs
1212pub struct Inode {
13+ inode_id : u32 ,
14+
1315 // indicate which `DiskInode` is mapping
1416 block_id : usize ,
1517 block_offset : usize ,
@@ -21,12 +23,14 @@ pub struct Inode {
2123impl Inode {
2224 /// Create a vfs inode
2325 pub fn new (
26+ inode_id : u32 ,
2427 block_id : u32 ,
2528 block_offset : usize ,
2629 fs : Arc < Mutex < EasyFileSystem > > ,
2730 block_device : Arc < dyn BlockDevice > ,
2831 ) -> Self {
2932 Self {
33+ inode_id,
3034 block_id : block_id as usize ,
3135 block_offset,
3236 fs,
@@ -73,6 +77,7 @@ impl Inode {
7377 self . find_inode_id ( name, disk_inode) . map ( |inode_id| {
7478 let ( block_id, block_offset) = fs. get_disk_inode_pos ( inode_id) ;
7579 Arc :: new ( Inode :: new (
80+ inode_id,
7681 block_id,
7782 block_offset,
7883 self . fs . clone ( ) ,
@@ -108,7 +113,7 @@ impl Inode {
108113 disk_inode : & mut DiskInode ,
109114 fs : & mut MutexGuard < EasyFileSystem > ,
110115 ) {
111- if new_size < disk_inode. size {
116+ if new_size <= disk_inode. size {
112117 return ;
113118 }
114119
@@ -160,6 +165,7 @@ impl Inode {
160165 // 4. return inode
161166 block_cache_sync_all ( ) ;
162167 Some ( Arc :: new ( Self :: new (
168+ new_inode_id,
163169 new_inode_block_id,
164170 new_inode_block_offset,
165171 self . fs . clone ( ) ,
@@ -199,4 +205,14 @@ impl Inode {
199205 disk_inode. write_at ( offset, buf, & self . block_device )
200206 } )
201207 }
208+
209+ /// Get inode id
210+ pub fn inode_id ( & self ) -> u32 {
211+ self . inode_id
212+ }
213+
214+ /// Get data size of inode
215+ pub fn get_size ( & self ) -> usize {
216+ self . read_disk_inode ( |disk_inode| disk_inode. size as usize )
217+ }
202218}
0 commit comments