Lines Matching refs:fs
32 blk_t ext2fs_descriptor_block_loc(ext2_filsys fs, blk_t group_block, dgrp_t i) in ext2fs_descriptor_block_loc() argument
38 if (!(fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) || in ext2fs_descriptor_block_loc()
39 (i < fs->super->s_first_meta_bg)) in ext2fs_descriptor_block_loc()
42 bg = EXT2_DESC_PER_BLOCK(fs->super) * i; in ext2fs_descriptor_block_loc()
43 if (ext2fs_bg_has_super(fs, bg)) in ext2fs_descriptor_block_loc()
45 ret_blk = ext2fs_group_first_block(fs, bg) + has_super; in ext2fs_descriptor_block_loc()
54 if (group_block != fs->super->s_first_data_block && in ext2fs_descriptor_block_loc()
55 ((ret_blk + fs->super->s_blocks_per_group) < in ext2fs_descriptor_block_loc()
56 fs->super->s_blocks_count)) in ext2fs_descriptor_block_loc()
57 ret_blk += fs->super->s_blocks_per_group; in ext2fs_descriptor_block_loc()
85 ext2_filsys fs; in ext2fs_open2() local
99 retval = ext2fs_get_mem(sizeof(struct struct_ext2_filsys), &fs); in ext2fs_open2()
103 memset(fs, 0, sizeof(struct struct_ext2_filsys)); in ext2fs_open2()
104 fs->magic = EXT2_ET_MAGIC_EXT2FS_FILSYS; in ext2fs_open2()
105 fs->flags = flags; in ext2fs_open2()
107 fs->flags |= EXT2_FLAG_MASTER_SB_ONLY; in ext2fs_open2()
108 fs->umask = 022; in ext2fs_open2()
109 retval = ext2fs_get_mem(strlen(name)+1, &fs->device_name); in ext2fs_open2()
112 strcpy(fs->device_name, name); in ext2fs_open2()
113 cp = strchr(fs->device_name, '?'); in ext2fs_open2()
126 retval = manager->open(fs->device_name, io_flags, &fs->io); in ext2fs_open2()
130 (retval = io_channel_set_options(fs->io, io_options))) in ext2fs_open2()
132 fs->image_io = fs->io; in ext2fs_open2()
133 fs->io->app_data = fs; in ext2fs_open2()
134 retval = ext2fs_get_memalign(SUPERBLOCK_SIZE, 512, &fs->super); in ext2fs_open2()
139 &fs->image_header); in ext2fs_open2()
142 retval = io_channel_read_blk(fs->io, 0, in ext2fs_open2()
144 fs->image_header); in ext2fs_open2()
147 if (fs->image_header->magic_number != EXT2_ET_MAGIC_E2IMAGE) in ext2fs_open2()
150 block_size = fs->image_header->fs_blocksize; in ext2fs_open2()
167 io_channel_set_blksize(fs->io, block_size); in ext2fs_open2()
169 fs->orig_super = 0; in ext2fs_open2()
171 io_channel_set_blksize(fs->io, SUPERBLOCK_OFFSET); in ext2fs_open2()
174 retval = ext2fs_get_mem(SUPERBLOCK_SIZE, &fs->orig_super); in ext2fs_open2()
178 retval = io_channel_read_blk(fs->io, superblock, -SUPERBLOCK_SIZE, in ext2fs_open2()
179 fs->super); in ext2fs_open2()
182 if (fs->orig_super) in ext2fs_open2()
183 memcpy(fs->orig_super, fs->super, SUPERBLOCK_SIZE); in ext2fs_open2()
186 fs->flags |= EXT2_FLAG_SWAP_BYTES; in ext2fs_open2()
187 ext2fs_swap_super(fs->super); in ext2fs_open2()
189 if (fs->flags & EXT2_FLAG_SWAP_BYTES) { in ext2fs_open2()
195 if (fs->super->s_magic != EXT2_SUPER_MAGIC) { in ext2fs_open2()
199 if (fs->super->s_rev_level > EXT2_LIB_CURRENT_REV) { in ext2fs_open2()
208 features = fs->super->s_feature_incompat; in ext2fs_open2()
218 features = fs->super->s_feature_ro_compat; in ext2fs_open2()
230 (fs->super->s_feature_incompat & in ext2fs_open2()
237 if ((fs->super->s_log_block_size + EXT2_MIN_BLOCK_LOG_SIZE) > in ext2fs_open2()
242 fs->blocksize = EXT2_BLOCK_SIZE(fs->super); in ext2fs_open2()
243 if (EXT2_INODE_SIZE(fs->super) < EXT2_GOOD_OLD_INODE_SIZE) { in ext2fs_open2()
247 fs->fragsize = EXT2_FRAG_SIZE(fs->super); in ext2fs_open2()
248 fs->inode_blocks_per_group = ((EXT2_INODES_PER_GROUP(fs->super) * in ext2fs_open2()
249 EXT2_INODE_SIZE(fs->super) + in ext2fs_open2()
250 EXT2_BLOCK_SIZE(fs->super) - 1) / in ext2fs_open2()
251 EXT2_BLOCK_SIZE(fs->super)); in ext2fs_open2()
253 if (block_size != fs->blocksize) { in ext2fs_open2()
261 io_channel_set_blksize(fs->io, fs->blocksize); in ext2fs_open2()
267 if (fs->super->s_feature_incompat & in ext2fs_open2()
269 fs->group_desc_count = 0; in ext2fs_open2()
270 *ret_fs = fs; in ext2fs_open2()
274 if (EXT2_INODES_PER_GROUP(fs->super) == 0) { in ext2fs_open2()
282 blocks_per_group = EXT2_BLOCKS_PER_GROUP(fs->super); in ext2fs_open2()
284 blocks_per_group > EXT2_MAX_BLOCKS_PER_GROUP(fs->super) || in ext2fs_open2()
285 fs->inode_blocks_per_group > EXT2_MAX_INODES_PER_GROUP(fs->super) || in ext2fs_open2()
286 EXT2_DESC_PER_BLOCK(fs->super) == 0 || in ext2fs_open2()
287 fs->super->s_first_data_block >= fs->super->s_blocks_count) { in ext2fs_open2()
291 fs->group_desc_count = ext2fs_div_ceil(fs->super->s_blocks_count - in ext2fs_open2()
292 fs->super->s_first_data_block, in ext2fs_open2()
294 if (fs->group_desc_count * EXT2_INODES_PER_GROUP(fs->super) != in ext2fs_open2()
295 fs->super->s_inodes_count) { in ext2fs_open2()
299 fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count, in ext2fs_open2()
300 EXT2_DESC_PER_BLOCK(fs->super)); in ext2fs_open2()
301 retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize, in ext2fs_open2()
302 &fs->group_desc); in ext2fs_open2()
306 group_block = fs->super->s_first_data_block; in ext2fs_open2()
307 dest = (char *) fs->group_desc; in ext2fs_open2()
308 groups_per_block = EXT2_DESC_PER_BLOCK(fs->super); in ext2fs_open2()
309 if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) in ext2fs_open2()
310 first_meta_bg = fs->super->s_first_meta_bg; in ext2fs_open2()
312 first_meta_bg = fs->desc_blocks; in ext2fs_open2()
314 retval = io_channel_read_blk(fs->io, group_block+1, in ext2fs_open2()
323 dest += fs->blocksize*first_meta_bg; in ext2fs_open2()
325 for (i=first_meta_bg ; i < fs->desc_blocks; i++) { in ext2fs_open2()
326 blk = ext2fs_descriptor_block_loc(fs, group_block, i); in ext2fs_open2()
327 retval = io_channel_read_blk(fs->io, blk, 1, dest); in ext2fs_open2()
335 dest += fs->blocksize; in ext2fs_open2()
338 fs->stride = fs->super->s_raid_stride; in ext2fs_open2()
344 if (superblock > 1 && EXT2_HAS_RO_COMPAT_FEATURE(fs->super, in ext2fs_open2()
347 for (i = 0, gd = fs->group_desc; i < fs->group_desc_count; in ext2fs_open2()
353 ext2fs_mark_super_dirty(fs); in ext2fs_open2()
356 fs->flags &= ~EXT2_FLAG_NOFREE_ON_ERROR; in ext2fs_open2()
357 *ret_fs = fs; in ext2fs_open2()
361 *ret_fs = fs; in ext2fs_open2()
363 ext2fs_free(fs); in ext2fs_open2()
372 errcode_t ext2fs_get_data_io(ext2_filsys fs, io_channel *old_io) in ext2fs_get_data_io() argument
374 if ((fs->flags & EXT2_FLAG_IMAGE_FILE) == 0) in ext2fs_get_data_io()
377 *old_io = (fs->image_io == fs->io) ? 0 : fs->io; in ext2fs_get_data_io()
382 errcode_t ext2fs_set_data_io(ext2_filsys fs, io_channel new_io) in ext2fs_set_data_io() argument
384 if ((fs->flags & EXT2_FLAG_IMAGE_FILE) == 0) in ext2fs_set_data_io()
386 fs->io = new_io ? new_io : fs->image_io; in ext2fs_set_data_io()
390 errcode_t ext2fs_rewrite_to_io(ext2_filsys fs, io_channel new_io) in ext2fs_rewrite_to_io() argument
392 if ((fs->flags & EXT2_FLAG_IMAGE_FILE) == 0) in ext2fs_rewrite_to_io()
394 fs->io = fs->image_io = new_io; in ext2fs_rewrite_to_io()
395 fs->flags |= EXT2_FLAG_DIRTY | EXT2_FLAG_RW | in ext2fs_rewrite_to_io()
397 fs->flags &= ~EXT2_FLAG_IMAGE_FILE; in ext2fs_rewrite_to_io()