From 7af0771f9a3031acc36a6990d07bdb92a61c0c75 Mon Sep 17 00:00:00 2001 From: Chuyan Zhang Date: Wed, 29 Nov 2023 03:29:34 -0800 Subject: symlink, probably not working --- src/disk/allocation.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/disk/allocation.rs') diff --git a/src/disk/allocation.rs b/src/disk/allocation.rs index a4bb3f7..d4ad397 100644 --- a/src/disk/allocation.rs +++ b/src/disk/allocation.rs @@ -5,6 +5,7 @@ use crate::disk::inode::{Inode, DIRECT_NUMBER}; use crate::memory::cached_block::{convert, CachedBlock}; use crate::{AyaFS, INODE_PER_BLOCK}; use libc::c_int; +use log::debug; impl AyaFS { /// 为 Inode 分配新 block, 返回 block 的编号和它在 inode 内的编号 @@ -403,12 +404,16 @@ impl AyaFS { inode: &Inode, mut block_index_within_inode: usize, ) -> Option { + debug!("get_block_index(block_index_within_inode: {})", block_index_within_inode); // direct block if block_index_within_inode < DIRECT_NUMBER { let block_index = inode.direct[block_index_within_inode] as usize; + debug!(" get_block_index -> direct"); return if self.data_bitmap.query(block_index) { + debug!(" get_block_index -> direct -> ✓"); Some(block_index) } else { + debug!(" get_block_index -> direct -> ×"); None }; } else { @@ -416,18 +421,22 @@ impl AyaFS { } // indirect block - let indirect_number = INODE_PER_BLOCK; + let indirect_number = 1024; if block_index_within_inode < indirect_number { return if let Some(indirect_block) = self.get_block::(inode.single_indirect as usize) { + debug!(" get_block_index -> indirect"); let block_index = indirect_block.block.entries[block_index_within_inode] as usize; if self.data_bitmap.query(block_index) { + debug!(" get_block_index -> indirect -> direct -> ✓"); Some(block_index) } else { + debug!(" get_block_index -> indirect -> direct -> ×"); None } } else { + debug!(" get_block_index -> indirect -> ×"); None }; } else { @@ -435,7 +444,7 @@ impl AyaFS { } // double indirect block - let double_indirect_number = INODE_PER_BLOCK * INODE_PER_BLOCK; + let double_indirect_number = 1024 * 1024; if block_index_within_inode < double_indirect_number { if let Some(double_indirect_block) = self.get_block::(inode.double_indirect as usize) @@ -516,6 +525,7 @@ impl AyaFS { ) -> Option<&mut CachedBlock> { self.get_block_index(inode, block_index_within_inode) .map(|block_index| { + debug!("access_block_mut(index: {}) found", block_index_within_inode); self.get_block_mut::(block_index).unwrap() // 可以 unwrap 吧这里 ?? }) } -- cgit v1.2.3-70-g09d2