X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=lwext4%2Fext4_balloc.h;h=f2c3dc9cd6fc895c5f8f658b808c58a772fc645a;hb=745c18c6062f49f83782537a06e3f5ffc04e40e1;hp=f3ca6e3abb8a53f5655b743deea43311c305aefe;hpb=ead60f17e6fe9c651e2c954cd2f3eba796fa9ff5;p=lwext4.git diff --git a/lwext4/ext4_balloc.h b/lwext4/ext4_balloc.h index f3ca6e3..f2c3dc9 100644 --- a/lwext4/ext4_balloc.h +++ b/lwext4/ext4_balloc.h @@ -1,7 +1,6 @@ /* * Copyright (c) 2013 Grzegorz Kostka (kostka.grzegorz@gmail.com) * - * * HelenOS: * Copyright (c) 2012 Martin Sucha * Copyright (c) 2012 Frantisek Princ @@ -42,40 +41,64 @@ #ifndef EXT4_BALLOC_H_ #define EXT4_BALLOC_H_ -#include -#include +#ifdef __cplusplus +extern "C" { +#endif + +#include "ext4_config.h" +#include "ext4_types.h" #include #include +/**@brief Compute number of block group from block address. + * @param sb superblock pointer. + * @param baddr Absolute address of block. + * @return Block group index + */ +uint32_t ext4_balloc_get_bgid_of_block(struct ext4_sblock *s, + ext4_fsblk_t baddr); -/**@brief Get first datablock in block group - * @param s superblock descriptor - * @param bg_ref block group reference - * @return block id of the first datablock in block group*/ -uint32_t ext4_balloc_get_first_data_block_in_group(struct ext4_sblock *s, - struct ext4_block_group_ref * bg_ref); +/**@brief Compute the starting block address of a block group + * @param sb superblock pointer. + * @param bgid block group index + * @return Block address + */ +ext4_fsblk_t ext4_balloc_get_block_of_bgid(struct ext4_sblock *s, + uint32_t bgid); + +/**@brief Calculate and set checksum of block bitmap. + * @param sb superblock pointer. + * @param bg block group + * @param bitmap bitmap buffer + */ +void ext4_balloc_set_bitmap_csum(struct ext4_sblock *sb, + struct ext4_bgroup *bg, + void *bitmap); /**@brief Free block from inode. * @param inode_ref inode reference * @param baddr block address * @return standard error code*/ int ext4_balloc_free_block(struct ext4_inode_ref *inode_ref, - uint32_t baddr); + ext4_fsblk_t baddr); /**@brief Free blocks from inode. * @param inode_ref inode reference - * @param baddr block address + * @param first block address + * @param count block count * @return standard error code*/ int ext4_balloc_free_blocks(struct ext4_inode_ref *inode_ref, - uint32_t first, uint32_t count); + ext4_fsblk_t first, uint32_t count); /**@brief Allocate block procedure. * @param inode_ref inode reference + * @param goal * @param baddr allocated block address * @return standard error code*/ int ext4_balloc_alloc_block(struct ext4_inode_ref *inode_ref, - uint32_t *baddr); + ext4_fsblk_t goal, + ext4_fsblk_t *baddr); /**@brief Try allocate selected block. * @param inode_ref inode reference @@ -83,11 +106,14 @@ int ext4_balloc_alloc_block(struct ext4_inode_ref *inode_ref, * @param free if baddr is not allocated * @return standard error code*/ int ext4_balloc_try_alloc_block(struct ext4_inode_ref *inode_ref, - uint32_t baddr, bool *free); + ext4_fsblk_t baddr, bool *free); + +#ifdef __cplusplus +} +#endif #endif /* EXT4_BALLOC_H_ */ /** * @} */ -