Lines Matching refs:fs
35 int ext2fs_bg_has_super(ext2_filsys fs, int group_block)
37 if (!(fs->super->s_feature_ro_compat &
61 int ext2fs_super_and_bgd_loc(ext2_filsys fs,
73 group_block = ext2fs_group_first_block(fs, group);
75 if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
76 old_desc_blocks = fs->super->s_first_meta_bg;
79 fs->desc_blocks + fs->super->s_reserved_gdt_blocks;
81 if (group == fs->group_desc_count-1) {
82 numblocks = (fs->super->s_blocks_count -
83 fs->super->s_first_data_block) %
84 fs->super->s_blocks_per_group;
86 numblocks = fs->super->s_blocks_per_group;
88 numblocks = fs->super->s_blocks_per_group;
90 has_super = ext2fs_bg_has_super(fs, group);
96 meta_bg_size = EXT2_DESC_PER_BLOCK(fs->super);
99 if (!(fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) ||
100 (meta_bg < fs->super->s_first_meta_bg)) {
116 numblocks -= 2 + fs->inode_blocks_per_group;
140 static errcode_t write_primary_superblock(ext2_filsys fs,
147 if (!fs->io->manager->write_byte || !fs->orig_super) {
149 io_channel_set_blksize(fs->io, SUPERBLOCK_OFFSET);
150 retval = io_channel_write_blk(fs->io, 1, -SUPERBLOCK_SIZE,
152 io_channel_set_blksize(fs->io, fs->blocksize);
156 old_super = (__u16 *) fs->orig_super;
171 retval = io_channel_write_byte(fs->io,
179 memcpy(fs->orig_super, super, SUPERBLOCK_SIZE);
187 void ext2fs_update_dynamic_rev(ext2_filsys fs)
189 struct ext2_super_block *sb = fs->super;
201 static errcode_t write_backup_super(ext2_filsys fs, dgrp_t group,
212 fs->super->s_block_group_nr = sgrp;
215 return io_channel_write_blk(fs->io, group_block, -SUPERBLOCK_SIZE,
220 errcode_t ext2fs_flush(ext2_filsys fs)
235 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
237 fs_state = fs->super->s_state;
238 feature_incompat = fs->super->s_feature_incompat;
240 fs->super->s_wtime = fs->now ? fs->now : time(NULL);
241 fs->super->s_block_group_nr = 0;
247 retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize,
251 memset(group_shadow, 0, (size_t) fs->blocksize *
252 fs->desc_blocks);
255 for (j=0, s=fs->group_desc, t=group_shadow;
256 j < fs->group_desc_count; j++, t++, s++) {
261 super_shadow = fs->super;
262 group_shadow = fs->group_desc;
266 * Set the state of the FS to be non-valid. (The state has
270 fs->super->s_state &= ~EXT2_VALID_FS;
271 fs->super->s_feature_incompat &= ~EXT3_FEATURE_INCOMPAT_RECOVER;
273 *super_shadow = *fs->super;
281 if (fs->super->s_feature_incompat &
290 if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
291 old_desc_blocks = fs->super->s_first_meta_bg;
293 old_desc_blocks = fs->desc_blocks;
295 for (i = 0; i < fs->group_desc_count; i++) {
299 ext2fs_super_and_bgd_loc(fs, i, &super_blk, &old_desc_blk,
302 if (!(fs->flags & EXT2_FLAG_MASTER_SB_ONLY) &&i && super_blk) {
303 retval = write_backup_super(fs, i, super_blk,
308 if (fs->flags & EXT2_FLAG_SUPER_ONLY)
311 (!(fs->flags & EXT2_FLAG_MASTER_SB_ONLY) || (i == 0))) {
312 retval = io_channel_write_blk(fs->io,
318 retval = io_channel_write_blk(fs->io, new_desc_blk,
319 1, group_ptr + (meta_bg*fs->blocksize));
331 if (fs->write_bitmaps) {
332 retval = fs->write_bitmaps(fs);
346 fs->super->s_block_group_nr = 0;
347 fs->super->s_state = fs_state;
348 fs->super->s_feature_incompat = feature_incompat;
350 *super_shadow = *fs->super;
354 retval = io_channel_flush(fs->io);
355 retval = write_primary_superblock(fs, super_shadow);
359 fs->flags &= ~EXT2_FLAG_DIRTY;
361 retval = io_channel_flush(fs->io);
363 fs->super->s_state = fs_state;
373 errcode_t ext2fs_close(ext2_filsys fs)
379 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
381 if (fs->write_bitmaps) {
382 retval = fs->write_bitmaps(fs);
386 if (fs->super->s_kbytes_written &&
387 fs->io->manager->get_stats)
388 fs->io->manager->get_stats(fs->io, &stats);
389 if (stats && stats->bytes_written && (fs->flags & EXT2_FLAG_RW)) {
390 fs->super->s_kbytes_written += stats->bytes_written >> 10;
391 meta_blks = fs->desc_blocks + 1;
392 if (!(fs->flags & EXT2_FLAG_SUPER_ONLY))
393 fs->super->s_kbytes_written += meta_blks /
394 (fs->blocksize / 1024);
395 if ((fs->flags & EXT2_FLAG_DIRTY) == 0)
396 fs->flags |= EXT2_FLAG_SUPER_ONLY | EXT2_FLAG_DIRTY;
398 if (fs->flags & EXT2_FLAG_DIRTY) {
399 retval = ext2fs_flush(fs);
403 ext2fs_free(fs);