@@ -5,22 +5,18 @@ use super::{
55use crate :: BLOCK_SZ ;
66use alloc:: sync:: Arc ;
77use spin:: Mutex ;
8- ///An easy file system on block
8+
99pub struct EasyFileSystem {
10- ///Real device
1110 pub block_device : Arc < dyn BlockDevice > ,
12- ///Inode bitmap
1311 pub inode_bitmap : Bitmap ,
14- ///Data bitmap
1512 pub data_bitmap : Bitmap ,
1613 inode_area_start_block : u32 ,
1714 data_area_start_block : u32 ,
1815}
1916
2017type DataBlock = [ u8 ; BLOCK_SZ ] ;
21- /// An easy fs over a block device
18+
2219impl EasyFileSystem {
23- /// A data block of block size
2420 pub fn create (
2521 block_device : Arc < dyn BlockDevice > ,
2622 total_blocks : u32 ,
@@ -81,7 +77,7 @@ impl EasyFileSystem {
8177 block_cache_sync_all ( ) ;
8278 Arc :: new ( Mutex :: new ( efs) )
8379 }
84- /// Open a block device as a filesystem
80+
8581 pub fn open ( block_device : Arc < dyn BlockDevice > ) -> Arc < Mutex < Self > > {
8682 // read SuperBlock
8783 get_block_cache ( 0 , Arc :: clone ( & block_device) )
@@ -103,15 +99,15 @@ impl EasyFileSystem {
10399 Arc :: new ( Mutex :: new ( efs) )
104100 } )
105101 }
106- /// Get the root inode of the filesystem
102+
107103 pub fn root_inode ( efs : & Arc < Mutex < Self > > ) -> Inode {
108104 let block_device = Arc :: clone ( & efs. lock ( ) . block_device ) ;
109105 // acquire efs lock temporarily
110106 let ( block_id, block_offset) = efs. lock ( ) . get_disk_inode_pos ( 0 ) ;
111107 // release efs lock
112108 Inode :: new ( block_id, block_offset, Arc :: clone ( efs) , block_device)
113109 }
114- /// Get inode by id
110+
115111 pub fn get_disk_inode_pos ( & self , inode_id : u32 ) -> ( u32 , usize ) {
116112 let inode_size = core:: mem:: size_of :: < DiskInode > ( ) ;
117113 let inodes_per_block = ( BLOCK_SZ / inode_size) as u32 ;
@@ -121,20 +117,20 @@ impl EasyFileSystem {
121117 ( inode_id % inodes_per_block) as usize * inode_size,
122118 )
123119 }
124- /// Get data block by id
120+
125121 pub fn get_data_block_id ( & self , data_block_id : u32 ) -> u32 {
126122 self . data_area_start_block + data_block_id
127123 }
128- /// Allocate a new inode
124+
129125 pub fn alloc_inode ( & mut self ) -> u32 {
130126 self . inode_bitmap . alloc ( & self . block_device ) . unwrap ( ) as u32
131127 }
132128
133- /// Allocate a data block
129+ /// Return a block ID not ID in the data area.
134130 pub fn alloc_data ( & mut self ) -> u32 {
135131 self . data_bitmap . alloc ( & self . block_device ) . unwrap ( ) as u32 + self . data_area_start_block
136132 }
137- /// Deallocate a data block
133+
138134 pub fn dealloc_data ( & mut self , block_id : u32 ) {
139135 get_block_cache ( block_id as usize , Arc :: clone ( & self . block_device ) )
140136 . lock ( )
0 commit comments