Lines Matching refs:fs
80 static int fill_dir_block(ext2_filsys fs,
97 offset = blockcnt * fs->blocksize;
98 if (offset + fs->blocksize > fd->inode->i_size) {
104 memset(dir, 0, fs->blocksize);
106 dirent->rec_len = fs->blocksize;
108 fd->err = ext2fs_read_dir_block(fs, *block_nr, dir);
112 hash_alg = fs->super->s_def_hash_version;
114 (fs->super->s_flags & EXT2_FLAGS_UNSIGNED_HASH))
118 while (dir_offset < fs->blocksize) {
120 if (((dir_offset + dirent->rec_len) > fs->blocksize) ||
157 fs->super->s_hash_seed,
222 static errcode_t alloc_size_dir(ext2_filsys fs, struct out_dir *outdir,
228 new_mem = realloc(outdir->buf, blocks * fs->blocksize);
238 outdir->buf = malloc(blocks * fs->blocksize);
256 static errcode_t get_next_block(ext2_filsys fs, struct out_dir *outdir,
262 retval = alloc_size_dir(fs, outdir, outdir->max + 50);
266 *ret = outdir->buf + (outdir->num++ * fs->blocksize);
267 memset(*ret, 0, fs->blocksize);
331 static int duplicate_search_and_fix(e2fsck_t ctx, ext2_filsys fs,
346 hash_alg = fs->super->s_def_hash_version;
348 (fs->super->s_flags & EXT2_FLAGS_UNSIGNED_HASH))
389 fs->super->s_hash_seed,
398 static errcode_t copy_dir_entries(ext2_filsys fs,
411 retval = alloc_size_dir(fs, outdir,
412 (fd->dir_size / fs->blocksize) + 2);
419 if ((retval = get_next_block(fs, outdir, &block_start)))
422 left = fs->blocksize;
431 if ((retval = get_next_block(fs, outdir,
436 left = fs->blocksize - offset;
464 static struct ext2_dx_root_info *set_root_node(ext2_filsys fs, char *buf,
472 if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_FILETYPE)
475 memset(buf, 0, fs->blocksize);
486 dir->rec_len = fs->blocksize - 12;
490 root->hash_version = fs->super->s_def_hash_version;
496 limits->limit = (fs->blocksize - 32) / sizeof(struct ext2_dx_entry);
503 static struct ext2_dx_entry *set_int_node(ext2_filsys fs, char *buf)
508 memset(buf, 0, fs->blocksize);
511 dir->rec_len = fs->blocksize;
514 limits->limit = (fs->blocksize - 8) / sizeof(struct ext2_dx_entry);
524 static errcode_t calculate_tree(ext2_filsys fs,
537 root_info = set_root_node(fs, outdir->buf, ino, parent);
573 if ((retval = get_next_block(fs, outdir,
576 dx_ent = set_int_node(fs, block_start);
609 static int write_dir_block(ext2_filsys fs,
626 ext2fs_block_alloc_stats(fs, blk, -1);
634 dir = wd->outdir->buf + (blockcnt * fs->blocksize);
635 wd->err = ext2fs_write_dir_block(fs, *block_nr, dir);
641 static errcode_t write_directory(e2fsck_t ctx, ext2_filsys fs,
658 retval = ext2fs_block_iterate2(fs, ino, 0, 0,
670 inode.i_size = outdir->num * fs->blocksize;
671 inode.i_blocks -= (fs->blocksize / 512) * wd.cleared;
679 ext2_filsys fs = ctx->fs;
709 if (!(fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_DIR_INDEX) ||
710 (inode.i_size / fs->blocksize) < 2)
715 retval = ext2fs_block_iterate2(fs, ino, 0, 0,
739 if (duplicate_search_and_fix(ctx, fs, ino, &fd))
751 retval = copy_dir_entries(fs, &fd, &outdir);
759 retval = calculate_tree(fs, &outdir, ino, fd.parent);
764 retval = write_directory(ctx, fs, &outdir, ino, fd.compress);
804 dir_index = ctx->fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_DIR_INDEX;