diff options
| author | gkostka <kostka.grzegorz@gmail.com> | 2015-11-16 00:32:28 +0100 |
|---|---|---|
| committer | gkostka <kostka.grzegorz@gmail.com> | 2015-11-16 00:32:28 +0100 |
| commit | b46f6b5e87ceed7487c6816f1c16d1e607dca489 (patch) | |
| tree | d854f492adabaec4281582e1d927adff1ba8fa36 | |
| parent | 75d8a6a3fc73c285a470b7d7b427c91e9f8f33ef (diff) | |
Add mkfs_initial and default inodes alocation
| -rw-r--r-- | fs_test/lwext4_mkfs.c | 3 | ||||
| -rw-r--r-- | lwext4/ext4_mkfs.c | 103 | ||||
| -rw-r--r-- | lwext4/ext4_mkfs.h | 3 |
3 files changed, 82 insertions, 27 deletions
diff --git a/fs_test/lwext4_mkfs.c b/fs_test/lwext4_mkfs.c index ddeeb69..04897bf 100644 --- a/fs_test/lwext4_mkfs.c +++ b/fs_test/lwext4_mkfs.c @@ -140,8 +140,9 @@ int main(int argc, char **argv) ext4_dmask_set(DEBUG_ALL); + static struct ext4_fs fs; static struct ext4_mkfs_info info; - int r = ext4_mkfs(bd, &info); + int r = ext4_mkfs(&fs, bd, &info); if (r != EOK) return EXIT_FAILURE; diff --git a/lwext4/ext4_mkfs.c b/lwext4/ext4_mkfs.c index 4d31893..8ae55b4 100644 --- a/lwext4/ext4_mkfs.c +++ b/lwext4/ext4_mkfs.c @@ -37,6 +37,7 @@ #include "ext4_config.h" #include "ext4_super.h" #include "ext4_block_group.h" +#include "ext4_fs.h" #include "ext4_debug.h" #include "ext4_mkfs.h" @@ -443,12 +444,63 @@ Finish: return r; } -int ext4_mkfs(struct ext4_blockdev *bd, struct ext4_mkfs_info *info) +static int mkfs_initial(struct ext4_blockdev *bd, struct ext4_mkfs_info *info) { int r; struct fs_aux_info aux_info; - struct ext4_bcache bc; - memset(&bc, 0, sizeof(struct ext4_bcache)); + memset(&aux_info, 0, sizeof(struct fs_aux_info)); + + r = create_fs_aux_info(&aux_info, info); + if (r != EOK) + goto Finish; + + fill_in_sb(&aux_info, info); + fill_bgroups(&aux_info, info); + + + r = write_bgroups(bd, &aux_info, info); + if (r != EOK) + goto Finish; + + r = write_sblocks(bd, &aux_info, info); + if (r != EOK) + goto Finish; + + Finish: + release_fs_aux_info(&aux_info); + return r; +} + +static int alloc_inodes(struct ext4_fs *fs) +{ + int r = EOK; + int i; + struct ext4_inode_ref inode_ref; + + int filetype = EXT4_DIRENTRY_REG_FILE; + for (i = 1; i < 12; ++i) { + switch (i) { + case EXT4_ROOT_INO: + case EXT4_UNDEL_DIR_INO: + case EXT4_GOOD_OLD_FIRST_INO: + filetype = EXT4_DIRENTRY_DIR; + break; + } + + r = ext4_fs_alloc_inode(fs, &inode_ref, filetype); + if (r != EOK) + return r; + + ext4_fs_put_inode_ref(&inode_ref); + } + + return r; +} + +int ext4_mkfs(struct ext4_fs *fs, struct ext4_blockdev *bd, + struct ext4_mkfs_info *info) +{ + int r; r = ext4_block_init(bd); if (r != EOK) @@ -514,43 +566,44 @@ int ext4_mkfs(struct ext4_blockdev *bd, struct ext4_mkfs_info *info) !info->no_journal ? "yes" : "no"); ext4_dbg(DEBUG_MKFS, DBG_NONE "Label: %s\n", info->label); - memset(&aux_info, 0, sizeof(struct fs_aux_info)); - - r = create_fs_aux_info(&aux_info, info); - if (r != EOK) - goto Finish; - - fill_in_sb(&aux_info, info); - fill_bgroups(&aux_info, info); - - uint32_t bsize = ext4_sb_get_block_size(aux_info.sb); - ext4_block_set_lb_size(bd, bsize); + struct ext4_bcache bc; + memset(&bc, 0, sizeof(struct ext4_bcache)); + ext4_block_set_lb_size(bd, info->block_size); r = ext4_bcache_init_dynamic(&bc, CONFIG_BLOCK_DEV_CACHE_SIZE, - bsize); + info->block_size); if (r != EOK) - goto Finish; + goto block_fini; /*Bind block cache to block device*/ r = ext4_block_bind_bcache(bd, &bc); if (r != EOK) - goto Finish; + goto cache_fini; r = ext4_block_cache_write_back(bd, 0); if (r != EOK) - goto Finish; + goto cache_fini; - r = write_bgroups(bd, &aux_info, info); + r = mkfs_initial(bd, info); if (r != EOK) - goto Finish; + goto cache_fini; - r = write_sblocks(bd, &aux_info, info); + r = ext4_fs_init(fs, bd); if (r != EOK) - goto Finish; + goto cache_fini; - Finish: - release_fs_aux_info(&aux_info); - ext4_block_fini(bd); + r = alloc_inodes(fs); + if (r != EOK) + goto fs_fini; + + fs_fini: + ext4_fs_fini(fs); + + cache_fini: ext4_bcache_fini_dynamic(&bc); + + block_fini: + ext4_block_fini(bd); + return r; } diff --git a/lwext4/ext4_mkfs.h b/lwext4/ext4_mkfs.h index 3f5a8a9..b98181a 100644 --- a/lwext4/ext4_mkfs.h +++ b/lwext4/ext4_mkfs.h @@ -63,7 +63,8 @@ struct ext4_mkfs_info { int ext4_mkfs_read_info(struct ext4_blockdev *bd, struct ext4_mkfs_info *info); -int ext4_mkfs(struct ext4_blockdev *bd, struct ext4_mkfs_info *info); +int ext4_mkfs(struct ext4_fs *fs, struct ext4_blockdev *bd, + struct ext4_mkfs_info *info); #endif /* EXT4_MKFS_H_ */ |
