use super::desc::Ext4GroupDesc;
use crate::bmalloc::BGIndex;
#[derive(Debug, Clone, Copy)]
pub struct BlockGroupStats {
pub group_idx: BGIndex,
pub free_blocks: u32,
pub free_inodes: u32,
pub used_dirs: u32,
pub itable_unused: u32,
pub flags: u16,
}
impl BlockGroupStats {
pub fn from_desc(group_idx: BGIndex, desc: &Ext4GroupDesc) -> Self {
Self {
group_idx,
free_blocks: desc.free_blocks_count(),
free_inodes: desc.free_inodes_count(),
used_dirs: desc.used_dirs_count(),
itable_unused: desc.itable_unused(),
flags: desc.bg_flags,
}
}
pub fn used_inodes(&self, inodes_per_group: u32) -> u32 {
inodes_per_group.saturating_sub(self.free_inodes)
}
pub fn used_blocks(&self, blocks_per_group: u32) -> u32 {
blocks_per_group.saturating_sub(self.free_blocks)
}
pub fn block_usage_percent(&self, blocks_per_group: u32) -> f32 {
if blocks_per_group == 0 {
return 0.0;
}
let used = self.used_blocks(blocks_per_group);
(used as f32 / blocks_per_group as f32) * 100.0
}
pub fn inode_usage_percent(&self, inodes_per_group: u32) -> f32 {
if inodes_per_group == 0 {
return 0.0;
}
let used = self.used_inodes(inodes_per_group);
(used as f32 / inodes_per_group as f32) * 100.0
}
}