Merge pull request #49 from sirocyl/patch-1
[lwext4.git] / include / ext4_balloc.h
1 /*
2  * Copyright (c) 2013 Grzegorz Kostka (kostka.grzegorz@gmail.com)
3  *
4  * HelenOS:
5  * Copyright (c) 2012 Martin Sucha
6  * Copyright (c) 2012 Frantisek Princ
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * - Redistributions of source code must retain the above copyright
14  *   notice, this list of conditions and the following disclaimer.
15  * - Redistributions in binary form must reproduce the above copyright
16  *   notice, this list of conditions and the following disclaimer in the
17  *   documentation and/or other materials provided with the distribution.
18  * - The name of the author may not be used to endorse or promote products
19  *   derived from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32
33 /** @addtogroup lwext4
34  * @{
35  */
36 /**
37  * @file  ext4_balloc.h
38  * @brief Physical block allocator.
39  */
40
41 #ifndef EXT4_BALLOC_H_
42 #define EXT4_BALLOC_H_
43
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47
48 #include <ext4_config.h>
49 #include <ext4_types.h>
50
51 #include <ext4_fs.h>
52
53 #include <stdint.h>
54 #include <stdbool.h>
55
56 /**@brief Compute number of block group from block address.
57  * @param sb superblock pointer.
58  * @param baddr Absolute address of block.
59  * @return Block group index
60  */
61 uint32_t ext4_balloc_get_bgid_of_block(struct ext4_sblock *s,
62                                        ext4_fsblk_t baddr);
63
64 /**@brief Compute the starting block address of a block group
65  * @param sb   superblock pointer.
66  * @param bgid block group index
67  * @return Block address
68  */
69 ext4_fsblk_t ext4_balloc_get_block_of_bgid(struct ext4_sblock *s,
70                                            uint32_t bgid);
71
72 /**@brief Calculate and set checksum of block bitmap.
73  * @param sb superblock pointer.
74  * @param bg block group
75  * @param bitmap bitmap buffer
76  */
77 void ext4_balloc_set_bitmap_csum(struct ext4_sblock *sb,
78                                  struct ext4_bgroup *bg,
79                                  void *bitmap);
80
81 /**@brief   Free block from inode.
82  * @param   inode_ref inode reference
83  * @param   baddr block address
84  * @return  standard error code*/
85 int ext4_balloc_free_block(struct ext4_inode_ref *inode_ref,
86                            ext4_fsblk_t baddr);
87
88 /**@brief   Free blocks from inode.
89  * @param   inode_ref inode reference
90  * @param   first block address
91  * @param   count block count
92  * @return  standard error code*/
93 int ext4_balloc_free_blocks(struct ext4_inode_ref *inode_ref,
94                             ext4_fsblk_t first, uint32_t count);
95
96 /**@brief   Allocate block procedure.
97  * @param   inode_ref inode reference
98  * @param   goal
99  * @param   baddr allocated block address
100  * @return  standard error code*/
101 int ext4_balloc_alloc_block(struct ext4_inode_ref *inode_ref,
102                             ext4_fsblk_t goal,
103                             ext4_fsblk_t *baddr);
104
105 /**@brief   Try allocate selected block.
106  * @param   inode_ref inode reference
107  * @param   baddr block address to allocate
108  * @param   free if baddr is not allocated
109  * @return  standard error code*/
110 int ext4_balloc_try_alloc_block(struct ext4_inode_ref *inode_ref,
111                                 ext4_fsblk_t baddr, bool *free);
112
113 #ifdef __cplusplus
114 }
115 #endif
116
117 #endif /* EXT4_BALLOC_H_ */
118
119 /**
120  * @}
121  */