diff options
Diffstat (limited to 'ayafs-core/src/disk/block.rs')
-rw-r--r-- | ayafs-core/src/disk/block.rs | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/ayafs-core/src/disk/block.rs b/ayafs-core/src/disk/block.rs index 76769b9..e48385d 100644 --- a/ayafs-core/src/disk/block.rs +++ b/ayafs-core/src/disk/block.rs @@ -10,7 +10,10 @@ pub struct SuperBlock { pub(crate) inode_bitmap_block_number: u64, pub(crate) inode_block_number: u64, pub(crate) data_block_number: u64, - padding: [u8; 4064], + pub(crate) total_block_number: u64, + pub(crate) used_inode_number: u64, + pub(crate) used_block_number: u64, + padding: [u8; 4040], } impl SuperBlock { @@ -19,13 +22,19 @@ impl SuperBlock { inode_bitmap_block_number: usize, inode_block_number: usize, data_block_number: usize, + total_block_number: usize, + used_inode_number: u64, + used_block_number: u64, ) -> Self { Self { data_bitmap_block_number: data_bitmap_block_number as u64, inode_bitmap_block_number: inode_bitmap_block_number as u64, inode_block_number: inode_block_number as u64, data_block_number: data_block_number as u64, - padding: [0; 4064], + total_block_number: total_block_number as u64, + used_inode_number, + used_block_number, + padding: [0; 4040], } } } @@ -155,11 +164,6 @@ impl Default for DirectoryBlock { } impl DirectoryBlock { - #[allow(unused)] - pub(crate) fn is_full(&self) -> bool { - self.occupancy[0] == 0xFF && self.occupancy[1] == 0xFF - } - pub(crate) fn query(&self, mut index: usize) -> bool { if index < 7 { // 0-6, first u8 @@ -196,20 +200,12 @@ impl DirectoryBlock { } } - // pub(crate) fn allocate(&mut self) -> Option<usize> { - // if self.occupancy[0] != 0xFF { - // let leading_ones = self.occupancy[0].leading_ones(); - // self.occupancy[0] |= (1 << (7 - leading_ones)) as u8; - // Some(leading_ones as usize) - // } else if self.occupancy[1] != 0xFF { - // let leading_ones = self.occupancy[1].leading_ones(); - // self.occupancy[1] |= (1 << (7 - leading_ones)) as u8; - // Some(7 + leading_ones as usize) - // } else { - // None - // } - // } + pub(crate) fn reset(&mut self) { + self.occupancy[0] = 0x80; + self.occupancy[1] = 0x00; + } + #[allow(unused)] pub(crate) fn deallocate(&mut self, mut index: usize) { if index < 7 { index = index + 1; @@ -269,3 +265,11 @@ impl Default for TripleIndirectBlock { } impl Block for TripleIndirectBlock {} + +const_assert_eq!(std::mem::size_of::<SuperBlock>(), 4096); +const_assert_eq!(std::mem::size_of::<DataBlock>(), 4096); +const_assert_eq!(std::mem::size_of::<InodeBlock>(), 4096); +const_assert_eq!(std::mem::size_of::<DirectoryBlock>(), 4096); +const_assert_eq!(std::mem::size_of::<IndirectBlock>(), 4096); +const_assert_eq!(std::mem::size_of::<DoubleIndirectBlock>(), 4096); +const_assert_eq!(std::mem::size_of::<TripleIndirectBlock>(), 4096);
\ No newline at end of file |