Changeset e68c834 in mainline for uspace/lib/ext4/libext4_filesystem.c
- Timestamp:
- 2011-10-10T06:48:16Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7a68fe5
- Parents:
- 1114173
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ext4/libext4_filesystem.c
r1114173 re68c834 41 41 #include "libext4.h" 42 42 43 /**44 * TODO doxy45 */46 43 int ext4_filesystem_init(ext4_filesystem_t *fs, service_id_t service_id) 47 44 { … … 86 83 } 87 84 88 /**89 * TODO doxy90 */91 85 void ext4_filesystem_fini(ext4_filesystem_t *fs) 92 86 { … … 95 89 } 96 90 97 /**98 * TODO doxy99 */100 91 int ext4_filesystem_check_sanity(ext4_filesystem_t *fs) 101 92 { … … 110 101 } 111 102 112 /**113 * TODO doxy114 */115 103 int ext4_filesystem_check_features(ext4_filesystem_t *fs, bool *o_read_only) 116 104 { … … 139 127 } 140 128 141 /**142 * TODO doxy143 */144 129 int ext4_filesystem_get_block_group_ref(ext4_filesystem_t *fs, uint32_t bgid, 145 130 ext4_block_group_ref_t **ref) 146 131 { 147 EXT4FS_DBG("");148 149 132 int rc; 150 133 aoff64_t block_id; … … 164 147 block_id = ext4_superblock_get_first_data_block(fs->superblock) + 1; 165 148 166 EXT4FS_DBG("block_size = \%d", ext4_superblock_get_block_size(fs->superblock));167 EXT4FS_DBG("descriptors_per_block = \%d", descriptors_per_block);168 EXT4FS_DBG("bgid = \%d", bgid);169 EXT4FS_DBG("first_data_block: \%d", (uint32_t)block_id);170 171 149 /* Find the block containing the descriptor we are looking for */ 172 150 block_id += bgid / descriptors_per_block; 173 151 offset = (bgid % descriptors_per_block) * EXT4_BLOCK_GROUP_DESCRIPTOR_SIZE; 174 152 175 EXT4FS_DBG("updated block_id: \%d", (uint32_t)block_id);176 177 153 rc = block_get(&newref->block, fs->device, block_id, 0); 178 154 if (rc != EOK) { 179 180 EXT4FS_DBG("block_get error: \%d", rc);181 182 155 free(newref); 183 156 return rc; 184 157 } 185 158 186 EXT4FS_DBG("block read");187 188 159 newref->block_group = newref->block->data + offset; 189 160 190 161 *ref = newref; 191 162 192 EXT4FS_DBG("finished"); 193 194 return EOK; 195 } 196 197 /** 198 * TODO doxy 199 */ 163 return EOK; 164 } 165 200 166 int ext4_filesystem_get_inode_ref(ext4_filesystem_t *fs, uint32_t index, 201 167 ext4_inode_ref_t **ref) 202 168 { 203 EXT4FS_DBG("");204 205 169 int rc; 206 170 aoff64_t block_id; … … 221 185 } 222 186 223 EXT4FS_DBG("allocated");224 225 187 inodes_per_group = ext4_superblock_get_inodes_per_group(fs->superblock); 226 227 EXT4FS_DBG("inodes_per_group_loaded");228 188 229 189 /* inode numbers are 1-based, but it is simpler to work with 0-based … … 234 194 offset_in_group = index % inodes_per_group; 235 195 236 EXT4FS_DBG("index: \%d", index);237 EXT4FS_DBG("inodes_per_group: \%d", inodes_per_group);238 EXT4FS_DBG("bg_id: \%d", block_group);239 240 196 rc = ext4_filesystem_get_block_group_ref(fs, block_group, &bg_ref); 241 197 if (rc != EOK) { … … 243 199 return rc; 244 200 } 245 246 EXT4FS_DBG("block_group_ref loaded");247 201 248 202 inode_table_start = ext4_block_group_get_inode_table_first_block( 249 203 bg_ref->block_group); 250 204 251 EXT4FS_DBG("inode_table block loaded");252 253 205 inode_size = ext4_superblock_get_inode_size(fs->superblock); 254 206 block_size = ext4_superblock_get_block_size(fs->superblock); … … 259 211 offset_in_block = byte_offset_in_group % block_size; 260 212 261 EXT4FS_DBG("superblock info loaded");262 263 213 rc = block_get(&newref->block, fs->device, block_id, 0); 264 214 if (rc != EOK) { … … 266 216 return rc; 267 217 } 268 269 EXT4FS_DBG("block got");270 218 271 219 newref->inode = newref->block->data + offset_in_block; … … 277 225 *ref = newref; 278 226 279 EXT4FS_DBG("finished"); 280 281 return EOK; 282 } 227 return EOK; 228 } 229 283 230 284 231 int ext4_filesystem_put_inode_ref(ext4_inode_ref_t *ref) … … 307 254 308 255 /* Handle simple case when we are dealing with direct reference */ 309 if (iblock < EXT4_INODE_DIRECT_BLOCK S) {256 if (iblock < EXT4_INODE_DIRECT_BLOCK_COUNT) { 310 257 current_block = ext4_inode_get_direct_block(inode, (uint32_t)iblock); 311 258 *fblock = current_block; … … 317 264 */ 318 265 block_ids_per_block = ext4_superblock_get_block_size(fs->superblock) / sizeof(uint32_t); 319 limits[0] = EXT4_INODE_DIRECT_BLOCK S;266 limits[0] = EXT4_INODE_DIRECT_BLOCK_COUNT; 320 267 blocks_per_level[0] = 1; 321 268 for (i = 1; i < 4; i++) {
Note:
See TracChangeset
for help on using the changeset viewer.