HelenOS sources
This source file includes following definitions.
- ext4_block_group_get_block_bitmap
- ext4_block_group_set_block_bitmap
- ext4_block_group_get_inode_bitmap
- ext4_block_group_set_inode_bitmap
- ext4_block_group_get_inode_table_first_block
- ext4_block_group_set_inode_table_first_block
- ext4_block_group_get_free_blocks_count
- ext4_block_group_set_free_blocks_count
- ext4_block_group_get_free_inodes_count
- ext4_block_group_set_free_inodes_count
- ext4_block_group_get_used_dirs_count
- ext4_block_group_set_used_dirs_count
- ext4_block_group_get_flags
- ext4_block_group_set_flags
- ext4_block_group_get_itable_unused
- ext4_block_group_set_itable_unused
- ext4_block_group_get_checksum
- ext4_block_group_set_checksum
- ext4_block_group_has_flag
- ext4_block_group_set_flag
- ext4_block_group_clear_flag
#include <byteorder.h>
#include "ext4/block_group.h"
#include "ext4/superblock.h"
uint64_t ext4_block_group_get_block_bitmap(ext4_block_group_t *bg,
ext4_superblock_t *sb)
{
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
return ((uint64_t) uint32_t_le2host(bg->block_bitmap_hi) << 32) |
uint32_t_le2host(bg->block_bitmap_lo);
else
return uint32_t_le2host(bg->block_bitmap_lo);
}
void ext4_block_group_set_block_bitmap(ext4_block_group_t *bg,
ext4_superblock_t *sb, uint64_t block_bitmap)
{
bg->block_bitmap_lo = host2uint32_t_le((block_bitmap << 32) >> 32);
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
bg->block_bitmap_hi = host2uint32_t_le(block_bitmap >> 32);
}
uint64_t ext4_block_group_get_inode_bitmap(ext4_block_group_t *bg,
ext4_superblock_t *sb)
{
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
return ((uint64_t) uint32_t_le2host(bg->inode_bitmap_hi) << 32) |
uint32_t_le2host(bg->inode_bitmap_lo);
else
return uint32_t_le2host(bg->inode_bitmap_lo);
}
void ext4_block_group_set_inode_bitmap(ext4_block_group_t *bg,
ext4_superblock_t *sb, uint64_t inode_bitmap)
{
bg->inode_bitmap_lo = host2uint32_t_le((inode_bitmap << 32) >> 32);
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
bg->inode_bitmap_hi = host2uint32_t_le(inode_bitmap >> 32);
}
uint64_t ext4_block_group_get_inode_table_first_block(ext4_block_group_t *bg,
ext4_superblock_t *sb)
{
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
return ((uint64_t)
uint32_t_le2host(bg->inode_table_first_block_hi) << 32) |
uint32_t_le2host(bg->inode_table_first_block_lo);
else
return uint32_t_le2host(bg->inode_table_first_block_lo);
}
void ext4_block_group_set_inode_table_first_block(ext4_block_group_t *bg,
ext4_superblock_t *sb, uint64_t inode_table_first)
{
bg->inode_table_first_block_lo =
host2uint32_t_le((inode_table_first << 32) >> 32);
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
bg->inode_table_first_block_hi =
host2uint32_t_le(inode_table_first >> 32);
}
uint32_t ext4_block_group_get_free_blocks_count(ext4_block_group_t *bg,
ext4_superblock_t *sb)
{
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
return ((uint32_t)
uint16_t_le2host(bg->free_blocks_count_hi) << 16) |
uint16_t_le2host(bg->free_blocks_count_lo);
else
return uint16_t_le2host(bg->free_blocks_count_lo);
}
void ext4_block_group_set_free_blocks_count(ext4_block_group_t *bg,
ext4_superblock_t *sb, uint32_t value)
{
bg->free_blocks_count_lo = host2uint16_t_le((value << 16) >> 16);
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
bg->free_blocks_count_hi = host2uint16_t_le(value >> 16);
}
uint32_t ext4_block_group_get_free_inodes_count(ext4_block_group_t *bg,
ext4_superblock_t *sb)
{
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
return ((uint32_t)
uint16_t_le2host(bg->free_inodes_count_hi) << 16) |
uint16_t_le2host(bg->free_inodes_count_lo);
else
return uint16_t_le2host(bg->free_inodes_count_lo);
}
void ext4_block_group_set_free_inodes_count(ext4_block_group_t *bg,
ext4_superblock_t *sb, uint32_t value)
{
bg->free_inodes_count_lo = host2uint16_t_le((value << 16) >> 16);
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
bg->free_inodes_count_hi = host2uint16_t_le(value >> 16);
}
uint32_t ext4_block_group_get_used_dirs_count(ext4_block_group_t *bg,
ext4_superblock_t *sb)
{
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
return ((uint32_t)
uint16_t_le2host(bg->used_dirs_count_hi) << 16) |
uint16_t_le2host(bg->used_dirs_count_lo);
else
return uint16_t_le2host(bg->used_dirs_count_lo);
}
void ext4_block_group_set_used_dirs_count(ext4_block_group_t *bg,
ext4_superblock_t *sb, uint32_t count)
{
bg->used_dirs_count_lo = host2uint16_t_le((count << 16) >> 16);
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
bg->used_dirs_count_hi = host2uint16_t_le(count >> 16);
}
uint16_t ext4_block_group_get_flags(ext4_block_group_t *bg)
{
return uint16_t_le2host(bg->flags);
}
void ext4_block_group_set_flags(ext4_block_group_t *bg, uint16_t flags)
{
bg->flags = host2uint16_t_le(flags);
}
uint32_t ext4_block_group_get_itable_unused(ext4_block_group_t *bg,
ext4_superblock_t *sb)
{
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
return ((uint32_t)
uint16_t_le2host(bg->itable_unused_hi) << 16) |
uint16_t_le2host(bg->itable_unused_lo);
else
return uint16_t_le2host(bg->itable_unused_lo);
}
void ext4_block_group_set_itable_unused(ext4_block_group_t *bg,
ext4_superblock_t *sb, uint32_t value)
{
bg->itable_unused_lo = host2uint16_t_le((value << 16) >> 16);
if (ext4_superblock_get_desc_size(sb) >
EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE)
bg->itable_unused_hi = host2uint16_t_le(value >> 16);
}
uint16_t ext4_block_group_get_checksum(ext4_block_group_t *bg)
{
return uint16_t_le2host(bg->checksum);
}
void ext4_block_group_set_checksum(ext4_block_group_t *bg, uint16_t checksum)
{
bg->checksum = host2uint16_t_le(checksum);
}
bool ext4_block_group_has_flag(ext4_block_group_t *bg, uint32_t flag)
{
if (ext4_block_group_get_flags(bg) & flag)
return true;
return false;
}
void ext4_block_group_set_flag(ext4_block_group_t *bg, uint32_t set_flag)
{
uint32_t flags = ext4_block_group_get_flags(bg);
flags = flags | set_flag;
ext4_block_group_set_flags(bg, flags);
}
void ext4_block_group_clear_flag(ext4_block_group_t *bg, uint32_t clear_flag)
{
uint32_t flags = ext4_block_group_get_flags(bg);
flags = flags & (~clear_flag);
ext4_block_group_set_flags(bg, flags);
}
HelenOS homepage, sources at GitHub