Lines Matching refs:ext2
103 ext2_t *ext2 = malloc(sizeof(ext2_t)); in ext2_mount() local
104 ext2->dev = dev; in ext2_mount()
106 err = bio_read(dev, &ext2->sb, 1024, sizeof(struct ext2_super_block)); in ext2_mount()
110 endian_swap_superblock(&ext2->sb); in ext2_mount()
113 if (ext2->sb.s_magic != EXT2_SUPER_MAGIC) { in ext2_mount()
119 …ext2->s_group_count = (ext2->sb.s_blocks_count + ext2->sb.s_blocks_per_group - 1) / ext2->sb.s_blo… in ext2_mount()
122 LTRACEF("rev level %d\n", ext2->sb.s_rev_level); in ext2_mount()
123 LTRACEF("compat features 0x%x\n", ext2->sb.s_feature_compat); in ext2_mount()
124 LTRACEF("incompat features 0x%x\n", ext2->sb.s_feature_incompat); in ext2_mount()
125 LTRACEF("ro compat features 0x%x\n", ext2->sb.s_feature_ro_compat); in ext2_mount()
126 LTRACEF("block size %d\n", EXT2_BLOCK_SIZE(ext2->sb)); in ext2_mount()
127 LTRACEF("inode size %d\n", EXT2_INODE_SIZE(ext2->sb)); in ext2_mount()
128 LTRACEF("block count %d\n", ext2->sb.s_blocks_count); in ext2_mount()
129 LTRACEF("blocks per group %d\n", ext2->sb.s_blocks_per_group); in ext2_mount()
130 LTRACEF("group count %d\n", ext2->s_group_count); in ext2_mount()
131 LTRACEF("inodes per group %d\n", ext2->sb.s_inodes_per_group); in ext2_mount()
134 if (ext2->sb.s_rev_level > EXT2_DYNAMIC_REV) { in ext2_mount()
140 …if (ext2->sb.s_feature_ro_compat & ~(EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|EXT2_FEATURE_RO_COMPAT_LA… in ext2_mount()
146 ext2->gd = malloc(sizeof(struct ext2_group_desc) * ext2->s_group_count); in ext2_mount()
147 err = bio_read(ext2->dev, (void *)ext2->gd, in ext2_mount()
148 (EXT2_BLOCK_SIZE(ext2->sb) == 4096) ? 4096 : 2048, in ext2_mount()
149 sizeof(struct ext2_group_desc) * ext2->s_group_count); in ext2_mount()
156 for (i=0; i < ext2->s_group_count; i++) { in ext2_mount()
157 endian_swap_group_desc(&ext2->gd[i]); in ext2_mount()
159 LTRACEF("\tblock bitmap %d\n", ext2->gd[i].bg_block_bitmap); in ext2_mount()
160 LTRACEF("\tinode bitmap %d\n", ext2->gd[i].bg_inode_bitmap); in ext2_mount()
161 LTRACEF("\tinode table %d\n", ext2->gd[i].bg_inode_table); in ext2_mount()
162 LTRACEF("\tfree blocks %d\n", ext2->gd[i].bg_free_blocks_count); in ext2_mount()
163 LTRACEF("\tfree inodes %d\n", ext2->gd[i].bg_free_inodes_count); in ext2_mount()
164 LTRACEF("\tused dirs %d\n", ext2->gd[i].bg_used_dirs_count); in ext2_mount()
168 ext2->cache = bcache_create(ext2->dev, EXT2_BLOCK_SIZE(ext2->sb), 4); in ext2_mount()
171 err = ext2_load_inode(ext2, EXT2_ROOT_INO, &ext2->root_inode); in ext2_mount()
177 *cookie = (fscookie *)ext2; in ext2_mount()
184 free(ext2); in ext2_mount()
190 ext2_t *ext2 = (ext2_t *)cookie; in ext2_unmount() local
192 bcache_destroy(ext2->cache); in ext2_unmount()
193 free(ext2->gd); in ext2_unmount()
194 free(ext2); in ext2_unmount()
199 static void get_inode_addr(ext2_t *ext2, inodenum_t num, blocknum_t *block, size_t *block_offset) { in get_inode_addr() argument
202 uint32_t group = num / ext2->sb.s_inodes_per_group; in get_inode_addr()
205 *block = ext2->gd[group].bg_inode_table; in get_inode_addr()
208 size_t offset = (num % EXT2_INODES_PER_GROUP(ext2->sb)) * EXT2_INODE_SIZE(ext2->sb); in get_inode_addr()
209 *block_offset = offset % EXT2_BLOCK_SIZE(ext2->sb); in get_inode_addr()
210 *block += offset / EXT2_BLOCK_SIZE(ext2->sb); in get_inode_addr()
213 int ext2_load_inode(ext2_t *ext2, inodenum_t num, struct ext2_inode *inode) { in ext2_load_inode() argument
220 get_inode_addr(ext2, num, &bnum, &block_offset); in ext2_load_inode()
226 err = bcache_get_block(ext2->cache, &cache_ptr, bnum); in ext2_load_inode()
234 bcache_put_block(ext2->cache, bnum); in ext2_load_inode()
253 STATIC_FS_IMPL(ext2, &ext2_api);