source: mainline/uspace/lib/ext4/include/ext4/superblock.h@ e2f20b9e

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since e2f20b9e was e2f20b9e, checked in by Maurizio Lombardi <mlombard@…>, 7 years ago

libext4: fixes to flex support in ext4_balloc_get_first_data_block_in_group()

The "first data block in group" was not calculated correctly.
As a consequence, the ext4 filesystem was not able to fully utilize
the available disk space

  • Property mode set to 100644
File size: 9.3 KB
Line 
1/*
2 * Copyright (c) 2018 Jiri Svoboda
3 * Copyright (c) 2011 Martin Sucha
4 * Copyright (c) 2012 Frantisek Princ
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * - Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * - Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * - The name of the author may not be used to endorse or promote products
17 * derived from this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31/** @addtogroup libext4
32 * @{
33 */
34
35#ifndef LIBEXT4_SUPERBLOCK_H_
36#define LIBEXT4_SUPERBLOCK_H_
37
38#include <block.h>
39#include <stdint.h>
40#include <uuid.h>
41#include "ext4/cfg.h"
42#include "ext4/types.h"
43
44extern uint32_t ext4_superblock_get_inodes_count(ext4_superblock_t *);
45extern void ext4_superblock_set_inodes_count(ext4_superblock_t *, uint32_t);
46extern uint64_t ext4_superblock_get_blocks_count(ext4_superblock_t *);
47extern void ext4_superblock_set_blocks_count(ext4_superblock_t *, uint64_t);
48extern uint64_t ext4_superblock_get_reserved_blocks_count(ext4_superblock_t *);
49extern void ext4_superblock_set_reserved_blocks_count(ext4_superblock_t *,
50 uint64_t);
51extern uint64_t ext4_superblock_get_free_blocks_count(ext4_superblock_t *);
52extern void ext4_superblock_set_free_blocks_count(ext4_superblock_t *,
53 uint64_t);
54extern uint32_t ext4_superblock_get_free_inodes_count(ext4_superblock_t *);
55extern void ext4_superblock_set_free_inodes_count(ext4_superblock_t *,
56 uint32_t);
57extern uint32_t ext4_superblock_get_first_data_block(ext4_superblock_t *);
58extern void ext4_superblock_set_first_data_block(ext4_superblock_t *, uint32_t);
59extern uint32_t ext4_superblock_get_log_block_size(ext4_superblock_t *);
60extern void ext4_superblock_set_log_block_size(ext4_superblock_t *, uint32_t);
61extern uint32_t ext4_superblock_get_block_size(ext4_superblock_t *);
62extern void ext4_superblock_set_block_size(ext4_superblock_t *, uint32_t);
63extern uint32_t ext4_superblock_get_log_frag_size(ext4_superblock_t *);
64extern void ext4_superblock_set_log_frag_size(ext4_superblock_t *, uint32_t);
65extern uint32_t ext4_superblock_get_frag_size(ext4_superblock_t *);
66extern void ext4_superblock_set_frag_size(ext4_superblock_t *, uint32_t);
67extern uint32_t ext4_superblock_get_blocks_per_group(ext4_superblock_t *);
68extern void ext4_superblock_set_blocks_per_group(ext4_superblock_t *, uint32_t);
69extern uint32_t ext4_superblock_get_frags_per_group(ext4_superblock_t *);
70extern void ext4_superblock_set_frags_per_group(ext4_superblock_t *, uint32_t);
71extern uint32_t ext4_superblock_get_inodes_per_group(ext4_superblock_t *);
72extern void ext4_superblock_set_inodes_per_group(ext4_superblock_t *, uint32_t);
73extern uint32_t ext4_superblock_get_mount_time(ext4_superblock_t *);
74extern void ext4_superblock_set_mount_time(ext4_superblock_t *, uint32_t);
75extern uint32_t ext4_superblock_get_write_time(ext4_superblock_t *);
76extern void ext4_superblock_set_write_time(ext4_superblock_t *, uint32_t);
77extern uint16_t ext4_superblock_get_mount_count(ext4_superblock_t *);
78extern void ext4_superblock_set_mount_count(ext4_superblock_t *, uint16_t);
79extern uint16_t ext4_superblock_get_max_mount_count(ext4_superblock_t *);
80extern void ext4_superblock_set_max_mount_count(ext4_superblock_t *, uint16_t);
81extern uint16_t ext4_superblock_get_magic(ext4_superblock_t *);
82extern void ext4_superblock_set_magic(ext4_superblock_t *sb, uint16_t magic);
83extern uint16_t ext4_superblock_get_state(ext4_superblock_t *);
84extern void ext4_superblock_set_state(ext4_superblock_t *, uint16_t);
85extern uint16_t ext4_superblock_get_errors(ext4_superblock_t *);
86extern void ext4_superblock_set_errors(ext4_superblock_t *, uint16_t);
87extern uint16_t ext4_superblock_get_minor_rev_level(ext4_superblock_t *);
88extern void ext4_superblock_set_minor_rev_level(ext4_superblock_t *, uint16_t);
89extern uint32_t ext4_superblock_get_last_check_time(ext4_superblock_t *);
90extern void ext4_superblock_set_last_check_time(ext4_superblock_t *, uint32_t);
91extern uint32_t ext4_superblock_get_check_interval(ext4_superblock_t *);
92extern void ext4_superblock_set_check_interval(ext4_superblock_t *, uint32_t);
93extern uint32_t ext4_superblock_get_creator_os(ext4_superblock_t *);
94extern void ext4_superblock_set_creator_os(ext4_superblock_t *, uint32_t);
95extern uint32_t ext4_superblock_get_rev_level(ext4_superblock_t *);
96extern void ext4_superblock_set_rev_level(ext4_superblock_t *, uint32_t);
97extern uint16_t ext4_superblock_get_def_resuid(ext4_superblock_t *);
98extern void ext4_superblock_set_def_resuid(ext4_superblock_t *, uint16_t);
99extern uint16_t ext4_superblock_get_def_resgid(ext4_superblock_t *);
100extern void ext4_superblock_set_def_resgid(ext4_superblock_t *, uint16_t);
101extern uint32_t ext4_superblock_get_first_inode(ext4_superblock_t *);
102extern void ext4_superblock_set_first_inode(ext4_superblock_t *, uint32_t);
103extern uint16_t ext4_superblock_get_inode_size(ext4_superblock_t *);
104extern void ext4_superblock_set_inode_size(ext4_superblock_t *, uint16_t);
105extern uint16_t ext4_superblock_get_block_group_index(ext4_superblock_t *);
106extern void ext4_superblock_set_block_group_index(ext4_superblock_t *,
107 uint16_t);
108extern uint32_t ext4_superblock_get_features_compatible(ext4_superblock_t *);
109extern void ext4_superblock_set_features_compatible(ext4_superblock_t *,
110 uint32_t);
111extern uint32_t ext4_superblock_get_features_incompatible(ext4_superblock_t *);
112extern void ext4_superblock_set_features_incompatible(ext4_superblock_t *,
113 uint32_t);
114extern uint32_t ext4_superblock_get_features_read_only(ext4_superblock_t *);
115extern void ext4_superblock_set_features_read_only(ext4_superblock_t *,
116 uint32_t);
117
118extern void ext4_superblock_get_uuid(ext4_superblock_t *, uuid_t *);
119extern void ext4_superblock_set_uuid(ext4_superblock_t *, uuid_t *);
120extern errno_t ext4_superblock_get_volume_name(ext4_superblock_t *, char *,
121 size_t);
122extern errno_t ext4_superblock_set_volume_name(ext4_superblock_t *, const char *);
123extern const char *ext4_superblock_get_last_mounted(ext4_superblock_t *);
124extern void ext4_superblock_set_last_mounted(ext4_superblock_t *, const char *);
125
126extern uint32_t ext4_superblock_get_last_orphan(ext4_superblock_t *);
127extern void ext4_superblock_set_last_orphan(ext4_superblock_t *, uint32_t);
128extern const uint32_t *ext4_superblock_get_hash_seed(ext4_superblock_t *);
129extern void ext4_superblock_set_hash_seed(ext4_superblock_t *,
130 const uint32_t *);
131extern uint8_t ext4_superblock_get_default_hash_version(ext4_superblock_t *);
132extern void ext4_superblock_set_default_hash_version(ext4_superblock_t *,
133 uint8_t);
134
135extern uint16_t ext4_superblock_get_desc_size(ext4_superblock_t *);
136extern void ext4_superblock_set_desc_size(ext4_superblock_t *, uint16_t);
137
138extern uint32_t ext4_superblock_get_flags(ext4_superblock_t *);
139extern void ext4_superblock_set_flags(ext4_superblock_t *, uint32_t);
140
141extern void ext4_superblock_get_backup_groups_sparse2(ext4_superblock_t *sb,
142 uint32_t *g1, uint32_t *g2);
143extern void ext4_superblock_set_backup_groups_sparse2(ext4_superblock_t *sb,
144 uint32_t g1, uint32_t g2);
145
146extern uint32_t ext4_superblock_get_reserved_gdt_blocks(ext4_superblock_t *sb);
147extern void ext4_superblock_set_reserved_gdt_blocks(ext4_superblock_t *sb,
148 uint32_t n);
149extern uint32_t ext4_superblock_get_flex_group_size(ext4_superblock_t *sb);
150
151/* More complex superblock functions */
152extern bool ext4_superblock_has_flag(ext4_superblock_t *, uint32_t);
153extern bool ext4_superblock_has_feature_compatible(ext4_superblock_t *,
154 uint32_t);
155extern bool ext4_superblock_has_feature_incompatible(ext4_superblock_t *,
156 uint32_t);
157extern bool ext4_superblock_has_feature_read_only(ext4_superblock_t *,
158 uint32_t);
159extern errno_t ext4_superblock_read_direct(service_id_t, ext4_superblock_t **);
160extern errno_t ext4_superblock_write_direct(service_id_t, ext4_superblock_t *);
161extern void ext4_superblock_release(ext4_superblock_t *);
162extern errno_t ext4_superblock_check_sanity(ext4_superblock_t *);
163
164extern uint32_t ext4_superblock_get_block_group_count(ext4_superblock_t *);
165extern uint32_t ext4_superblock_get_blocks_in_group(ext4_superblock_t *,
166 uint32_t);
167extern uint32_t ext4_superblock_get_inodes_in_group(ext4_superblock_t *,
168 uint32_t);
169extern errno_t ext4_superblock_create(size_t, uint64_t, ext4_cfg_t *,
170 ext4_superblock_t **);
171extern uint32_t ext4_superblock_get_group_backup_blocks(ext4_superblock_t *,
172 uint32_t);
173
174#endif
175
176/**
177 * @}
178 */
Note: See TracBrowser for help on using the repository browser.