Ext2与Ext3文件系统深度解析
数据块释放
当进程删除文件或将其截断为0长度时,需要回收该文件占用的所有数据块。这一操作由 ext2_truncate() 函数完成,该函数以文件的inode对象地址作为参数。其主要工作是扫描磁盘inode的 i_block 数组,定位所有数据块以及用于间接寻址的块,然后通过多次调用 ext2_free_blocks() 来释放这些块。
ext2_free_blocks() 函数用于释放一个或多个相邻的数据块。除了在 ext2_truncate() 中被调用外,它主要在丢弃文件的预分配块时被调用。该函数有以下参数:
- inode :描述文件的inode对象的地址。
- block :要释放的第一个块的逻辑块号。
- count :要释放的相邻块的数量。
对于每个要释放的块,该函数会执行以下操作:
1. 获取包含要释放块的块组的块位图。
2. 清除块位图中对应于要释放块的位,并将包含该位图的缓冲区标记为脏缓冲区。
3. 增加块组描述符中的 bg_free_blocks_count 字段,并将相应的缓冲区标记为脏缓冲区。
4. 增加磁盘超级块的 s_free_blocks_count 字段,将相应的缓冲区标记为脏缓冲区,并设置超级块对象的 s_dirt
超级会员免费看
订阅专栏 解锁全文
10

被折叠的 条评论
为什么被折叠?



