Changeset fe27eb4 in mainline for uspace/lib/ext4/libext4_block_group.c
- Timestamp:
- 2011-11-20T12:07:50Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 343ccfd
- Parents:
- ae3d4f8
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ext4/libext4_block_group.c
rae3d4f8 rfe27eb4 39 39 #include "libext4.h" 40 40 41 uint64_t ext4_block_group_get_block_bitmap(ext4_block_group_t *bg) 42 { 43 return ((uint64_t)uint32_t_le2host(bg->block_bitmap_hi) << 32) | 44 uint32_t_le2host(bg->block_bitmap_lo); 45 } 46 47 uint64_t ext4_block_group_get_inode_bitmap(ext4_block_group_t *bg) 48 { 49 return ((uint64_t)uint32_t_le2host(bg->inode_bitmap_hi) << 32) | 50 uint32_t_le2host(bg->inode_bitmap_lo); 51 } 52 53 uint64_t ext4_block_group_get_inode_table_first_block(ext4_block_group_t *bg) 54 { 55 return ((uint64_t)uint32_t_le2host(bg->inode_table_first_block_hi) << 32) | 56 uint32_t_le2host(bg->inode_table_first_block_lo); 57 } 58 59 uint32_t ext4_block_group_get_free_blocks_count(ext4_block_group_t *bg) 60 { 61 return ((uint32_t)uint16_t_le2host(bg->free_blocks_count_hi) << 16) | 62 uint16_t_le2host(bg->free_blocks_count_lo); 63 } 64 65 void ext4_block_group_set_free_blocks_count(ext4_block_group_t *bg, uint32_t value) { 41 uint64_t ext4_block_group_get_block_bitmap(ext4_block_group_t *bg, 42 ext4_superblock_t *sb) 43 { 44 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 45 return ((uint64_t)uint32_t_le2host(bg->block_bitmap_hi) << 32) | 46 uint32_t_le2host(bg->block_bitmap_lo); 47 } else { 48 return uint32_t_le2host(bg->block_bitmap_lo); 49 } 50 } 51 52 void ext4_block_group_set_block_bitmap(ext4_block_group_t *bg, 53 ext4_superblock_t *sb, uint64_t block_bitmap) 54 { 55 bg->block_bitmap_lo = host2uint32_t_le((block_bitmap << 32) >> 32); 56 57 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 58 bg->block_bitmap_hi = host2uint32_t_le(block_bitmap >> 32); 59 } 60 } 61 62 uint64_t ext4_block_group_get_inode_bitmap(ext4_block_group_t *bg, 63 ext4_superblock_t *sb) 64 { 65 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 66 return ((uint64_t)uint32_t_le2host(bg->inode_bitmap_hi) << 32) | 67 uint32_t_le2host(bg->inode_bitmap_lo); 68 } else { 69 return uint32_t_le2host(bg->inode_bitmap_lo); 70 } 71 72 } 73 74 void ext4_block_group_set_inode_bitmap(ext4_block_group_t *bg, 75 ext4_superblock_t *sb, uint64_t inode_bitmap) 76 { 77 bg->inode_bitmap_lo = host2uint32_t_le((inode_bitmap << 32) >> 32); 78 79 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 80 bg->inode_bitmap_hi = host2uint32_t_le(inode_bitmap >> 32); 81 } 82 } 83 84 uint64_t ext4_block_group_get_inode_table_first_block(ext4_block_group_t *bg, 85 ext4_superblock_t *sb) 86 { 87 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 88 return ((uint64_t)uint32_t_le2host(bg->inode_table_first_block_hi) << 32) | 89 uint32_t_le2host(bg->inode_table_first_block_lo); 90 } else { 91 return uint32_t_le2host(bg->inode_table_first_block_lo); 92 } 93 } 94 95 void ext4_block_group_set_inode_table_first_block(ext4_block_group_t *bg, 96 ext4_superblock_t *sb, uint64_t ino_tbl_first) 97 { 98 bg->inode_table_first_block_lo = host2uint32_t_le((ino_tbl_first << 32) >> 32); 99 100 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 101 bg->inode_table_first_block_hi = host2uint32_t_le(ino_tbl_first >> 32); 102 } 103 } 104 105 uint32_t ext4_block_group_get_free_blocks_count(ext4_block_group_t *bg, 106 ext4_superblock_t *sb) 107 { 108 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 109 return ((uint32_t)uint16_t_le2host(bg->free_blocks_count_hi) << 16) | 110 uint16_t_le2host(bg->free_blocks_count_lo); 111 } else { 112 return uint16_t_le2host(bg->free_blocks_count_lo); 113 } 114 } 115 116 void ext4_block_group_set_free_blocks_count(ext4_block_group_t *bg, 117 ext4_superblock_t *sb, uint32_t value) 118 { 66 119 bg->free_blocks_count_lo = host2uint16_t_le((value << 16) >> 16); 67 bg->free_blocks_count_hi = host2uint16_t_le(value >> 16); 68 } 69 70 uint32_t ext4_block_group_get_free_inodes_count(ext4_block_group_t *bg) 71 { 72 return ((uint32_t)uint16_t_le2host(bg->free_inodes_count_hi) << 16) | 73 uint16_t_le2host(bg->free_inodes_count_lo); 74 } 75 76 uint32_t ext4_block_group_get_used_dirs_count(ext4_block_group_t *bg) 77 { 78 return ((uint32_t)uint16_t_le2host(bg->used_dirs_count_hi) << 16) | 79 uint16_t_le2host(bg->used_dirs_count_lo); 120 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 121 bg->free_blocks_count_hi = host2uint16_t_le(value >> 16); 122 } 123 } 124 125 uint32_t ext4_block_group_get_free_inodes_count(ext4_block_group_t *bg, 126 ext4_superblock_t *sb) 127 { 128 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 129 return ((uint32_t)uint16_t_le2host(bg->free_inodes_count_hi) << 16) | 130 uint16_t_le2host(bg->free_inodes_count_lo); 131 } else { 132 return uint16_t_le2host(bg->free_inodes_count_lo); 133 } 134 } 135 136 void ext4_block_group_set_free_inodes_count(ext4_block_group_t *bg, 137 ext4_superblock_t *sb, uint32_t value) 138 { 139 bg->free_inodes_count_lo = host2uint16_t_le((value << 16) >> 16); 140 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 141 bg->free_inodes_count_hi = host2uint16_t_le(value >> 16); 142 } 143 } 144 145 146 uint32_t ext4_block_group_get_used_dirs_count(ext4_block_group_t *bg, 147 ext4_superblock_t *sb) 148 { 149 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 150 return ((uint32_t)uint16_t_le2host(bg->used_dirs_count_hi) << 16) | 151 uint16_t_le2host(bg->used_dirs_count_lo); 152 } else { 153 return uint16_t_le2host(bg->used_dirs_count_lo); 154 } 155 } 156 157 void ext4_block_group_set_used_dirs_count(ext4_block_group_t *bg, 158 ext4_superblock_t *sb, uint32_t count) 159 { 160 bg->used_dirs_count_lo = host2uint16_t_le((count << 16) >> 16); 161 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 162 bg->used_dirs_count_hi = host2uint16_t_le(count >> 16); 163 } 80 164 } 81 165 … … 85 169 } 86 170 87 uint32_t ext4_block_group_get_itable_unused(ext4_block_group_t *bg) 88 { 89 return ((uint32_t)uint16_t_le2host(bg->itable_unused_hi) << 16) | 90 uint16_t_le2host(bg->itable_unused_lo); 171 uint32_t ext4_block_group_get_itable_unused(ext4_block_group_t *bg, 172 ext4_superblock_t *sb) 173 { 174 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 175 return ((uint32_t)uint16_t_le2host(bg->itable_unused_hi) << 16) | 176 uint16_t_le2host(bg->itable_unused_lo); 177 } else { 178 return uint16_t_le2host(bg->itable_unused_lo); 179 } 180 } 181 182 void ext4_block_group_set_itable_unused(ext4_block_group_t *bg, 183 ext4_superblock_t *sb, uint32_t value) 184 { 185 bg->itable_unused_lo = host2uint16_t_le((value << 16) >> 16); 186 if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) { 187 bg->itable_unused_hi = host2uint16_t_le(value >> 16); 188 } 189 91 190 } 92 191 … … 94 193 { 95 194 return uint16_t_le2host(bg->checksum); 195 } 196 197 void ext4_block_group_set_checksum(ext4_block_group_t *bg, uint16_t checksum) 198 { 199 bg->checksum = host2uint16_t_le(checksum); 96 200 } 97 201
Note:
See TracChangeset
for help on using the changeset viewer.