Changeset beb9336 in mainline for uspace/lib/ext4/libext4_block_group.c
- Timestamp:
- 2012-08-24T14:07:52Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 041ab64
- Parents:
- bd29f9c9 (diff), db81577 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ext4/libext4_block_group.c
rbd29f9c9 rbeb9336 29 29 /** @addtogroup libext4 30 30 * @{ 31 */ 32 31 */ 33 32 /** 34 * @file 35 * @brief 33 * @file libext4_block_group.c 34 * @brief Ext4 block group structure operations. 36 35 */ 37 36 … … 41 40 /** Get address of block with data block bitmap. 42 41 * 43 * @param bg pointer to block group 44 * @param sb pointer to superblock 45 * @return address of block with block bitmap 42 * @param bg Pointer to block group 43 * @param sb Pointer to superblock 44 * 45 * @return Address of block with block bitmap 46 * 46 47 */ 47 48 uint64_t ext4_block_group_get_block_bitmap(ext4_block_group_t *bg, 48 ext4_superblock_t *sb) 49 { 50 if (ext4_superblock_get_desc_size(sb) > EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) { 51 return ((uint64_t)uint32_t_le2host(bg->block_bitmap_hi) << 32) | 52 uint32_t_le2host(bg->block_bitmap_lo); 53 } else { 49 ext4_superblock_t *sb) 50 { 51 if (ext4_superblock_get_desc_size(sb) > 52 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 53 return ((uint64_t) uint32_t_le2host(bg->block_bitmap_hi) << 32) | 54 uint32_t_le2host(bg->block_bitmap_lo); 55 else 54 56 return uint32_t_le2host(bg->block_bitmap_lo); 55 }56 57 } 57 58 58 59 /** Set address of block with data block bitmap. 59 60 * 60 * @param bg pointer to block group 61 * @param sb pointer to superblock 62 * @param block_bitmap address of block with block bitmap 61 * @param bg Pointer to block group 62 * @param sb Pointer to superblock 63 * @param block_bitmap Address of block with block bitmap 64 * 63 65 */ 64 66 void ext4_block_group_set_block_bitmap(ext4_block_group_t *bg, 65 67 ext4_superblock_t *sb, uint64_t block_bitmap) 66 68 { 67 69 bg->block_bitmap_lo = host2uint32_t_le((block_bitmap << 32) >> 32); 68 69 if (ext4_superblock_get_desc_size(sb) > EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) { 70 71 if (ext4_superblock_get_desc_size(sb) > 72 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 70 73 bg->block_bitmap_hi = host2uint32_t_le(block_bitmap >> 32); 71 }72 74 } 73 75 74 76 /** Get address of block with i-node bitmap. 75 77 * 76 * @param bg pointer to block group 77 * @param sb pointer to superblock 78 * @return address of block with i-node bitmap 78 * @param bg Pointer to block group 79 * @param sb Pointer to superblock 80 * 81 * @return Address of block with i-node bitmap 82 * 79 83 */ 80 84 uint64_t ext4_block_group_get_inode_bitmap(ext4_block_group_t *bg, 81 ext4_superblock_t *sb) 82 { 83 if (ext4_superblock_get_desc_size(sb) > EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) { 84 return ((uint64_t)uint32_t_le2host(bg->inode_bitmap_hi) << 32) | 85 uint32_t_le2host(bg->inode_bitmap_lo); 86 } else { 85 ext4_superblock_t *sb) 86 { 87 if (ext4_superblock_get_desc_size(sb) > 88 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 89 return ((uint64_t) uint32_t_le2host(bg->inode_bitmap_hi) << 32) | 90 uint32_t_le2host(bg->inode_bitmap_lo); 91 else 87 92 return uint32_t_le2host(bg->inode_bitmap_lo); 88 }89 90 93 } 91 94 92 95 /** Set address of block with i-node bitmap. 93 96 * 94 * @param bg pointer to block group 95 * @param sb pointer to superblock 96 * @param inode_bitmap address of block with i-node bitmap 97 * @param bg Pointer to block group 98 * @param sb Pointer to superblock 99 * @param inode_bitmap Address of block with i-node bitmap 100 * 97 101 */ 98 102 void ext4_block_group_set_inode_bitmap(ext4_block_group_t *bg, 99 103 ext4_superblock_t *sb, uint64_t inode_bitmap) 100 104 { 101 105 bg->inode_bitmap_lo = host2uint32_t_le((inode_bitmap << 32) >> 32); 102 103 if (ext4_superblock_get_desc_size(sb) > EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) { 106 107 if (ext4_superblock_get_desc_size(sb) > 108 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 104 109 bg->inode_bitmap_hi = host2uint32_t_le(inode_bitmap >> 32); 105 }106 110 } 107 111 108 112 /** Get address of the first block of the i-node table. 109 113 * 110 * @param bg pointer to block group 111 * @param sb pointer to superblock 112 * @return address of first block of i-node table 114 * @param bg Pointer to block group 115 * @param sb Pointer to superblock 116 * 117 * @return Address of first block of i-node table 118 * 113 119 */ 114 120 uint64_t ext4_block_group_get_inode_table_first_block(ext4_block_group_t *bg, 115 ext4_superblock_t *sb) 116 { 117 if (ext4_superblock_get_desc_size(sb) > EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) { 118 return ((uint64_t)uint32_t_le2host(bg->inode_table_first_block_hi) << 32) | 119 uint32_t_le2host(bg->inode_table_first_block_lo); 120 } else { 121 ext4_superblock_t *sb) 122 { 123 if (ext4_superblock_get_desc_size(sb) > 124 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 125 return ((uint64_t) 126 uint32_t_le2host(bg->inode_table_first_block_hi) << 32) | 127 uint32_t_le2host(bg->inode_table_first_block_lo); 128 else 121 129 return uint32_t_le2host(bg->inode_table_first_block_lo); 122 }123 130 } 124 131 125 132 /** Set address of the first block of the i-node table. 126 133 * 127 * @param bg pointer to block group 128 * @param sb pointer to superblock 129 * @param inode_table_first address of first block of i-node table 134 * @param bg Pointer to block group 135 * @param sb Pointer to superblock 136 * @param inode_table_first Address of first block of i-node table 137 * 130 138 */ 131 139 void ext4_block_group_set_inode_table_first_block(ext4_block_group_t *bg, 132 140 ext4_superblock_t *sb, uint64_t inode_table_first) 133 141 { 134 142 bg->inode_table_first_block_lo = 135 host2uint32_t_le((inode_table_first << 32) >> 32); 136 137 if (ext4_superblock_get_desc_size(sb) > 138 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) { 139 143 host2uint32_t_le((inode_table_first << 32) >> 32); 144 145 if (ext4_superblock_get_desc_size(sb) > 146 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 140 147 bg->inode_table_first_block_hi = 141 host2uint32_t_le(inode_table_first >> 32); 142 } 148 host2uint32_t_le(inode_table_first >> 32); 143 149 } 144 150 145 151 /** Get number of free blocks in block group. 146 152 * 147 * @param bg pointer to block group 148 * @param sb pointer to superblock 149 * @return number of free blocks in block group 153 * @param bg Pointer to block group 154 * @param sb Pointer to superblock 155 * 156 * @return Number of free blocks in block group 157 * 150 158 */ 151 159 uint32_t ext4_block_group_get_free_blocks_count(ext4_block_group_t *bg, 152 153 { 154 if (ext4_superblock_get_desc_size(sb) > 155 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) {156 157 return ((uint32_t)uint16_t_le2host(bg->free_blocks_count_hi) << 16) |158 159 } else {160 ext4_superblock_t *sb) 161 { 162 if (ext4_superblock_get_desc_size(sb) > 163 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 164 return ((uint32_t) 165 uint16_t_le2host(bg->free_blocks_count_hi) << 16) | 166 uint16_t_le2host(bg->free_blocks_count_lo); 167 else 160 168 return uint16_t_le2host(bg->free_blocks_count_lo); 161 }162 169 } 163 170 164 171 /** Set number of free blocks in block group. 165 172 * 166 * @param bg pointer to block group 167 * @param sb pointer to superblock 168 * @param value number of free blocks in block group 173 * @param bg Pointer to block group 174 * @param sb Pointer to superblock 175 * @param value Number of free blocks in block group 176 * 169 177 */ 170 178 void ext4_block_group_set_free_blocks_count(ext4_block_group_t *bg, 171 179 ext4_superblock_t *sb, uint32_t value) 172 180 { 173 181 bg->free_blocks_count_lo = host2uint16_t_le((value << 16) >> 16); 174 if (ext4_superblock_get_desc_size(sb) > EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) { 182 if (ext4_superblock_get_desc_size(sb) > 183 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 175 184 bg->free_blocks_count_hi = host2uint16_t_le(value >> 16); 176 }177 185 } 178 186 179 187 /** Get number of free i-nodes in block group. 180 188 * 181 * @param bg pointer to block group 182 * @param sb pointer to superblock 183 * @return number of free i-nodes in block group 189 * @param bg Pointer to block group 190 * @param sb Pointer to superblock 191 * 192 * @return Number of free i-nodes in block group 193 * 184 194 */ 185 195 uint32_t ext4_block_group_get_free_inodes_count(ext4_block_group_t *bg, 186 ext4_superblock_t *sb) 187 { 188 if (ext4_superblock_get_desc_size(sb) > EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) { 189 return ((uint32_t)uint16_t_le2host(bg->free_inodes_count_hi) << 16) | 190 uint16_t_le2host(bg->free_inodes_count_lo); 191 } else { 196 ext4_superblock_t *sb) 197 { 198 if (ext4_superblock_get_desc_size(sb) > 199 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 200 return ((uint32_t) 201 uint16_t_le2host(bg->free_inodes_count_hi) << 16) | 202 uint16_t_le2host(bg->free_inodes_count_lo); 203 else 192 204 return uint16_t_le2host(bg->free_inodes_count_lo); 193 }194 205 } 195 206 196 207 /** Set number of free i-nodes in block group. 197 208 * 198 * @param bg pointer to block group 199 * @param sb pointer to superblock 200 * @param value number of free i-nodes in block group 209 * @param bg Pointer to block group 210 * @param sb Pointer to superblock 211 * @param value Number of free i-nodes in block group 212 * 201 213 */ 202 214 void ext4_block_group_set_free_inodes_count(ext4_block_group_t *bg, 203 215 ext4_superblock_t *sb, uint32_t value) 204 216 { 205 217 bg->free_inodes_count_lo = host2uint16_t_le((value << 16) >> 16); 206 if (ext4_superblock_get_desc_size(sb) > EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) { 218 if (ext4_superblock_get_desc_size(sb) > 219 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 207 220 bg->free_inodes_count_hi = host2uint16_t_le(value >> 16); 208 }209 221 } 210 222 211 223 /** Get number of used directories in block group. 212 224 * 213 * @param bg pointer to block group 214 * @param sb pointer to superblock 215 * @return number of used directories in block group 225 * @param bg Pointer to block group 226 * @param sb Pointer to superblock 227 * 228 * @return Number of used directories in block group 229 * 216 230 */ 217 231 uint32_t ext4_block_group_get_used_dirs_count(ext4_block_group_t *bg, 218 ext4_superblock_t *sb) 219 { 220 if (ext4_superblock_get_desc_size(sb) > EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) { 221 return ((uint32_t)uint16_t_le2host(bg->used_dirs_count_hi) << 16) | 222 uint16_t_le2host(bg->used_dirs_count_lo); 223 } else { 232 ext4_superblock_t *sb) 233 { 234 if (ext4_superblock_get_desc_size(sb) > 235 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 236 return ((uint32_t) 237 uint16_t_le2host(bg->used_dirs_count_hi) << 16) | 238 uint16_t_le2host(bg->used_dirs_count_lo); 239 else 224 240 return uint16_t_le2host(bg->used_dirs_count_lo); 225 }226 241 } 227 242 228 243 /** Set number of used directories in block group. 229 244 * 230 * @param bg pointer to block group 231 * @param sb pointer to superblock 232 * @param value number of used directories in block group 245 * @param bg Pointer to block group 246 * @param sb Pointer to superblock 247 * @param value Number of used directories in block group 248 * 233 249 */ 234 250 void ext4_block_group_set_used_dirs_count(ext4_block_group_t *bg, 235 251 ext4_superblock_t *sb, uint32_t count) 236 252 { 237 253 bg->used_dirs_count_lo = host2uint16_t_le((count << 16) >> 16); 238 if (ext4_superblock_get_desc_size(sb) > EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) { 254 if (ext4_superblock_get_desc_size(sb) > 255 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 239 256 bg->used_dirs_count_hi = host2uint16_t_le(count >> 16); 240 }241 257 } 242 258 243 259 /** Get flags of block group. 244 260 * 245 * @param bg pointer to block group 246 * @return flags of block group 261 * @param bg Pointer to block group 262 * 263 * @return Flags of block group 264 * 247 265 */ 248 266 uint16_t ext4_block_group_get_flags(ext4_block_group_t *bg) … … 253 271 /** Set flags for block group. 254 272 * 255 * @param bg pointer to block group 256 * @param flags flags for block group 273 * @param bg Pointer to block group 274 * @param flags Flags for block group 275 * 257 276 */ 258 277 void ext4_block_group_set_flags(ext4_block_group_t *bg, uint16_t flags) … … 263 282 /** Get number of unused i-nodes. 264 283 * 265 * @param bg pointer to block group 266 * @param sb pointer to superblock 267 * @return number of unused i-nodes 284 * @param bg Pointer to block group 285 * @param sb Pointer to superblock 286 * 287 * @return Number of unused i-nodes 288 * 268 289 */ 269 290 uint32_t ext4_block_group_get_itable_unused(ext4_block_group_t *bg, 270 ext4_superblock_t *sb) 271 { 272 if (ext4_superblock_get_desc_size(sb) > EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) { 273 return ((uint32_t)uint16_t_le2host(bg->itable_unused_hi) << 16) | 274 uint16_t_le2host(bg->itable_unused_lo); 275 } else { 291 ext4_superblock_t *sb) 292 { 293 if (ext4_superblock_get_desc_size(sb) > 294 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 295 return ((uint32_t) 296 uint16_t_le2host(bg->itable_unused_hi) << 16) | 297 uint16_t_le2host(bg->itable_unused_lo); 298 else 276 299 return uint16_t_le2host(bg->itable_unused_lo); 277 }278 300 } 279 301 280 302 /** Set number of unused i-nodes. 281 303 * 282 * @param bg pointer to block group 283 * @param sb pointer to superblock 284 * @param value number of unused i-nodes 304 * @param bg Pointer to block group 305 * @param sb Pointer to superblock 306 * @param value Number of unused i-nodes 307 * 285 308 */ 286 309 void ext4_block_group_set_itable_unused(ext4_block_group_t *bg, 287 310 ext4_superblock_t *sb, uint32_t value) 288 311 { 289 312 bg->itable_unused_lo = host2uint16_t_le((value << 16) >> 16); 290 if (ext4_superblock_get_desc_size(sb) > EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) { 313 if (ext4_superblock_get_desc_size(sb) > 314 EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE) 291 315 bg->itable_unused_hi = host2uint16_t_le(value >> 16); 292 }293 294 316 } 295 317 296 318 /** Get checksum of block group. 297 319 * 298 * @param bg pointer to block group 299 * @return checksum of block group 320 * @param bg Pointer to block group 321 * 322 * @return checksum of block group 323 * 300 324 */ 301 325 uint16_t ext4_block_group_get_checksum(ext4_block_group_t *bg) … … 306 330 /** Set checksum of block group. 307 331 * 308 * @param bg pointer to block group 309 * @param checksum cheksum of block group 332 * @param bg Pointer to block group 333 * @param checksum Cheksum of block group 334 * 310 335 */ 311 336 void ext4_block_group_set_checksum(ext4_block_group_t *bg, uint16_t checksum) … … 316 341 /** Check if block group has a flag. 317 342 * 318 * @param bg pointer to block group 319 * @param flag flag to be checked 320 * @return true if flag is set to 1 343 * @param bg Pointer to block group 344 * @param flag Flag to be checked 345 * 346 * @return True if flag is set to 1 347 * 321 348 */ 322 349 bool ext4_block_group_has_flag(ext4_block_group_t *bg, uint32_t flag) 323 350 { 324 if (ext4_block_group_get_flags(bg) & flag) {351 if (ext4_block_group_get_flags(bg) & flag) 325 352 return true; 326 }353 327 354 return false; 328 355 } … … 330 357 /** Set (add) flag of block group. 331 358 * 332 * @param bg pointer to block group 333 * @param flag flag to be set 359 * @param bg Pointer to block group 360 * @param flag Flag to be set 361 * 334 362 */ 335 363 void ext4_block_group_set_flag(ext4_block_group_t *bg, uint32_t set_flag) … … 342 370 /** Clear (remove) flag of block group. 343 371 * 344 * @param bg pointer to block group 345 * @param flag flag to be cleared 372 * @param bg Pointer to block group 373 * @param flag Flag to be cleared 374 * 346 375 */ 347 376 void ext4_block_group_clear_flag(ext4_block_group_t *bg, uint32_t clear_flag) … … 352 381 } 353 382 354 355 383 /** 356 384 * @} 357 */ 385 */
Note:
See TracChangeset
for help on using the changeset viewer.