Lines Matching full:fs

15  * based on code from grub2 fs/ext2.c and fs/fshelp.c by
42 (struct ext2_block_group *bg, const struct ext_filesystem *fs) in ext4fs_bg_free_inodes_inc() argument
45 if (fs->gdsize == 64) in ext4fs_bg_free_inodes_inc()
50 if (fs->gdsize == 64) in ext4fs_bg_free_inodes_inc()
55 (struct ext2_block_group *bg, const struct ext_filesystem *fs) in ext4fs_bg_free_blocks_inc() argument
58 if (fs->gdsize == 64) in ext4fs_bg_free_blocks_inc()
63 if (fs->gdsize == 64) in ext4fs_bg_free_blocks_inc()
71 struct ext_filesystem *fs = get_fs(); in ext4fs_update() local
76 (struct ext2_sblock *)fs->sb, (uint32_t)SUPERBLOCK_SIZE); in ext4fs_update()
79 for (i = 0; i < fs->no_blkgrp; i++) { in ext4fs_update()
80 bgd = ext4fs_get_group_descriptor(fs, i); in ext4fs_update()
82 uint64_t b_bitmap_blk = ext4fs_bg_get_block_id(bgd, fs); in ext4fs_update()
83 put_ext4(b_bitmap_blk * fs->blksz, in ext4fs_update()
84 fs->blk_bmaps[i], fs->blksz); in ext4fs_update()
88 for (i = 0; i < fs->no_blkgrp; i++) { in ext4fs_update()
89 bgd = ext4fs_get_group_descriptor(fs, i); in ext4fs_update()
90 uint64_t i_bitmap_blk = ext4fs_bg_get_inode_id(bgd, fs); in ext4fs_update()
91 put_ext4(i_bitmap_blk * fs->blksz, in ext4fs_update()
92 fs->inode_bmaps[i], fs->blksz); in ext4fs_update()
96 put_ext4((uint64_t)((uint64_t)fs->gdtable_blkno * (uint64_t)fs->blksz), in ext4fs_update()
97 (struct ext2_block_group *)fs->gdtable, in ext4fs_update()
98 (fs->blksz * fs->no_blk_pergdt)); in ext4fs_update()
109 struct ext_filesystem *fs = get_fs(); in ext4fs_get_bgdtable() local
110 int gdsize_total = ROUND(fs->no_blkgrp * fs->gdsize, fs->blksz); in ext4fs_get_bgdtable()
111 fs->no_blk_pergdt = gdsize_total / fs->blksz; in ext4fs_get_bgdtable()
114 fs->gdtable = zalloc(gdsize_total); in ext4fs_get_bgdtable()
115 if (!fs->gdtable) in ext4fs_get_bgdtable()
118 status = ext4fs_devread((lbaint_t)fs->gdtable_blkno * fs->sect_perblk, in ext4fs_get_bgdtable()
119 0, fs->blksz * fs->no_blk_pergdt, fs->gdtable); in ext4fs_get_bgdtable()
123 if (ext4fs_log_gdt(fs->gdtable)) { in ext4fs_get_bgdtable()
130 free(fs->gdtable); in ext4fs_get_bgdtable()
131 fs->gdtable = NULL; in ext4fs_get_bgdtable()
145 struct ext_filesystem *fs = get_fs(); in delete_single_indirect_block() local
146 char *journal_buffer = zalloc(fs->blksz); in delete_single_indirect_block()
157 if (fs->blksz == 1024) { in delete_single_indirect_block()
162 ext4fs_reset_block_bmap(blknr, fs->blk_bmaps[bg_idx], bg_idx); in delete_single_indirect_block()
164 bgd = ext4fs_get_group_descriptor(fs, bg_idx); in delete_single_indirect_block()
165 ext4fs_bg_free_blocks_inc(bgd, fs); in delete_single_indirect_block()
166 ext4fs_sb_free_blocks_inc(fs->sb); in delete_single_indirect_block()
169 uint64_t b_bitmap_blk = ext4fs_bg_get_block_id(bgd, fs); in delete_single_indirect_block()
171 b_bitmap_blk * fs->sect_perblk, in delete_single_indirect_block()
172 0, fs->blksz, journal_buffer); in delete_single_indirect_block()
196 struct ext_filesystem *fs = get_fs(); in delete_double_indirect_block() local
197 char *journal_buffer = zalloc(fs->blksz); in delete_double_indirect_block()
204 di_buffer = zalloc(fs->blksz); in delete_double_indirect_block()
211 status = ext4fs_devread((lbaint_t)blknr * fs->sect_perblk, 0, in delete_double_indirect_block()
212 fs->blksz, (char *)di_buffer); in delete_double_indirect_block()
213 for (i = 0; i < fs->blksz / sizeof(int); i++) { in delete_double_indirect_block()
219 if (fs->blksz == 1024) { in delete_double_indirect_block()
225 bgd = ext4fs_get_group_descriptor(fs, bg_idx); in delete_double_indirect_block()
227 fs->blk_bmaps[bg_idx], bg_idx); in delete_double_indirect_block()
229 ext4fs_bg_free_blocks_inc(bgd, fs); in delete_double_indirect_block()
230 ext4fs_sb_free_blocks_inc(fs->sb); in delete_double_indirect_block()
234 ext4fs_bg_get_block_id(bgd, fs); in delete_double_indirect_block()
236 * fs->sect_perblk, 0, in delete_double_indirect_block()
237 fs->blksz, in delete_double_indirect_block()
252 if (fs->blksz == 1024) { in delete_double_indirect_block()
258 bgd = ext4fs_get_group_descriptor(fs, bg_idx); in delete_double_indirect_block()
259 ext4fs_reset_block_bmap(blknr, fs->blk_bmaps[bg_idx], bg_idx); in delete_double_indirect_block()
260 ext4fs_bg_free_blocks_inc(bgd, fs); in delete_double_indirect_block()
261 ext4fs_sb_free_blocks_inc(fs->sb); in delete_double_indirect_block()
264 uint64_t b_bitmap_blk = ext4fs_bg_get_block_id(bgd, fs); in delete_double_indirect_block()
265 status = ext4fs_devread(b_bitmap_blk * fs->sect_perblk, in delete_double_indirect_block()
266 0, fs->blksz, journal_buffer); in delete_double_indirect_block()
295 struct ext_filesystem *fs = get_fs(); in delete_triple_indirect_block() local
296 char *journal_buffer = zalloc(fs->blksz); in delete_triple_indirect_block()
303 tigp_buffer = zalloc(fs->blksz); in delete_triple_indirect_block()
310 status = ext4fs_devread((lbaint_t)blknr * fs->sect_perblk, 0, in delete_triple_indirect_block()
311 fs->blksz, (char *)tigp_buffer); in delete_triple_indirect_block()
312 for (i = 0; i < fs->blksz / sizeof(int); i++) { in delete_triple_indirect_block()
317 tip_buffer = zalloc(fs->blksz); in delete_triple_indirect_block()
322 fs->sect_perblk, 0, fs->blksz, in delete_triple_indirect_block()
324 for (j = 0; j < fs->blksz / sizeof(int); j++) { in delete_triple_indirect_block()
328 if (fs->blksz == 1024) { in delete_triple_indirect_block()
335 fs->blk_bmaps[bg_idx], in delete_triple_indirect_block()
340 bgd = ext4fs_get_group_descriptor(fs, bg_idx); in delete_triple_indirect_block()
341 ext4fs_bg_free_blocks_inc(bgd, fs); in delete_triple_indirect_block()
342 ext4fs_sb_free_blocks_inc(fs->sb); in delete_triple_indirect_block()
346 ext4fs_bg_get_block_id(bgd, fs); in delete_triple_indirect_block()
350 fs->sect_perblk, 0, in delete_triple_indirect_block()
351 fs->blksz, in delete_triple_indirect_block()
370 if (fs->blksz == 1024) { in delete_triple_indirect_block()
376 fs->blk_bmaps[bg_idx], bg_idx); in delete_triple_indirect_block()
380 bgd = ext4fs_get_group_descriptor(fs, bg_idx); in delete_triple_indirect_block()
381 ext4fs_bg_free_blocks_inc(bgd, fs); in delete_triple_indirect_block()
382 ext4fs_sb_free_blocks_inc(fs->sb); in delete_triple_indirect_block()
386 ext4fs_bg_get_block_id(bgd, fs); in delete_triple_indirect_block()
387 memset(journal_buffer, '\0', fs->blksz); in delete_triple_indirect_block()
389 fs->sect_perblk, 0, in delete_triple_indirect_block()
390 fs->blksz, in delete_triple_indirect_block()
405 if (fs->blksz == 1024) { in delete_triple_indirect_block()
410 ext4fs_reset_block_bmap(blknr, fs->blk_bmaps[bg_idx], bg_idx); in delete_triple_indirect_block()
412 bgd = ext4fs_get_group_descriptor(fs, bg_idx); in delete_triple_indirect_block()
413 ext4fs_bg_free_blocks_inc(bgd, fs); in delete_triple_indirect_block()
414 ext4fs_sb_free_blocks_inc(fs->sb); in delete_triple_indirect_block()
417 uint64_t b_bitmap_blk = ext4fs_bg_get_block_id(bgd, fs); in delete_triple_indirect_block()
418 status = ext4fs_devread(b_bitmap_blk * fs->sect_perblk, in delete_triple_indirect_block()
419 0, fs->blksz, journal_buffer); in delete_triple_indirect_block()
456 struct ext_filesystem *fs = get_fs(); in ext4fs_delete_file() local
457 char *journal_buffer = zalloc(fs->blksz); in ext4fs_delete_file()
465 no_blocks = le32_to_cpu(inode.size) / fs->blksz; in ext4fs_delete_file()
466 if (le32_to_cpu(inode.size) % fs->blksz) in ext4fs_delete_file()
489 if (fs->blksz == 1024) { in ext4fs_delete_file()
494 ext4fs_reset_block_bmap(blknr, fs->blk_bmaps[bg_idx], in ext4fs_delete_file()
499 bgd = ext4fs_get_group_descriptor(fs, bg_idx); in ext4fs_delete_file()
500 ext4fs_bg_free_blocks_inc(bgd, fs); in ext4fs_delete_file()
501 ext4fs_sb_free_blocks_inc(fs->sb); in ext4fs_delete_file()
504 uint64_t b_bitmap_blk = ext4fs_bg_get_block_id(bgd, fs); in ext4fs_delete_file()
505 status = ext4fs_devread(b_bitmap_blk * fs->sect_perblk, in ext4fs_delete_file()
506 0, fs->blksz, in ext4fs_delete_file()
518 inodes_per_block = fs->blksz / fs->inodesz; in ext4fs_delete_file()
524 bgd = ext4fs_get_group_descriptor(fs, ibmap_idx); in ext4fs_delete_file()
525 blkno = ext4fs_bg_get_inode_table_id(bgd, fs) + in ext4fs_delete_file()
529 blkoff = ((inodeno) % inodes_per_block) * fs->inodesz; in ext4fs_delete_file()
532 read_buffer = zalloc(fs->blksz); in ext4fs_delete_file()
536 status = ext4fs_devread((lbaint_t)blkno * fs->sect_perblk, in ext4fs_delete_file()
537 0, fs->blksz, read_buffer); in ext4fs_delete_file()
546 memset(inode_buffer, '\0', fs->inodesz); in ext4fs_delete_file()
554 ext4fs_reset_inode_bmap(inodeno, fs->inode_bmaps[ibmap_idx], ibmap_idx); in ext4fs_delete_file()
555 ext4fs_bg_free_inodes_inc(bgd, fs); in ext4fs_delete_file()
556 ext4fs_sb_free_inodes_inc(fs->sb); in ext4fs_delete_file()
558 memset(journal_buffer, '\0', fs->blksz); in ext4fs_delete_file()
559 status = ext4fs_devread(ext4fs_bg_get_inode_id(bgd, fs) * in ext4fs_delete_file()
560 fs->sect_perblk, 0, fs->blksz, journal_buffer); in ext4fs_delete_file()
563 if (ext4fs_log_journal(journal_buffer, ext4fs_bg_get_inode_id(bgd, fs))) in ext4fs_delete_file()
591 struct ext_filesystem *fs = get_fs(); in ext4fs_init() local
593 /* populate fs */ in ext4fs_init()
594 fs->blksz = EXT2_BLOCK_SIZE(ext4fs_root); in ext4fs_init()
595 fs->sect_perblk = fs->blksz >> fs->dev_desc->log2blksz; in ext4fs_init()
598 fs->sb = zalloc(SUPERBLOCK_SIZE); in ext4fs_init()
599 if (!fs->sb) in ext4fs_init()
601 if (!ext4_read_superblock((char *)fs->sb)) in ext4fs_init()
609 fs->no_blkgrp = (uint32_t)ext4fs_div_roundup( in ext4fs_init()
615 fs->gdtable_blkno = ((EXT2_MIN_BLOCK_SIZE == fs->blksz) + 1); in ext4fs_init()
622 fs->blk_bmaps = zalloc(fs->no_blkgrp * sizeof(char *)); in ext4fs_init()
623 if (!fs->blk_bmaps) in ext4fs_init()
625 for (i = 0; i < fs->no_blkgrp; i++) { in ext4fs_init()
626 fs->blk_bmaps[i] = zalloc(fs->blksz); in ext4fs_init()
627 if (!fs->blk_bmaps[i]) in ext4fs_init()
631 for (i = 0; i < fs->no_blkgrp; i++) { in ext4fs_init()
633 ext4fs_get_group_descriptor(fs, i); in ext4fs_init()
634 status = ext4fs_devread(ext4fs_bg_get_block_id(bgd, fs) * in ext4fs_init()
635 fs->sect_perblk, 0, in ext4fs_init()
636 fs->blksz, (char *)fs->blk_bmaps[i]); in ext4fs_init()
642 fs->inode_bmaps = zalloc(fs->no_blkgrp * sizeof(unsigned char *)); in ext4fs_init()
643 if (!fs->inode_bmaps) in ext4fs_init()
645 for (i = 0; i < fs->no_blkgrp; i++) { in ext4fs_init()
646 fs->inode_bmaps[i] = zalloc(fs->blksz); in ext4fs_init()
647 if (!fs->inode_bmaps[i]) in ext4fs_init()
651 for (i = 0; i < fs->no_blkgrp; i++) { in ext4fs_init()
653 ext4fs_get_group_descriptor(fs, i); in ext4fs_init()
654 status = ext4fs_devread(ext4fs_bg_get_inode_id(bgd, fs) * in ext4fs_init()
655 fs->sect_perblk, in ext4fs_init()
656 0, fs->blksz, in ext4fs_init()
657 (char *)fs->inode_bmaps[i]); in ext4fs_init()
668 for (i = 0; i < fs->no_blkgrp; i++) { in ext4fs_init()
670 ext4fs_get_group_descriptor(fs, i); in ext4fs_init()
672 ext4fs_bg_get_free_blocks(bgd, fs); in ext4fs_init()
674 if (real_free_blocks != ext4fs_sb_get_free_blocks(fs->sb)) in ext4fs_init()
675 ext4fs_sb_set_free_blocks(fs->sb, real_free_blocks); in ext4fs_init()
690 struct ext_filesystem *fs = get_fs(); in ext4fs_deinit() local
694 char *temp_buff = zalloc(fs->blksz); in ext4fs_deinit()
700 ext4fs_devread((lbaint_t)blknr * fs->sect_perblk, 0, fs->blksz, in ext4fs_deinit()
704 put_ext4((uint64_t) ((uint64_t)blknr * (uint64_t)fs->blksz), in ext4fs_deinit()
705 (struct journal_superblock_t *)temp_buff, fs->blksz); in ext4fs_deinit()
711 ext4_read_superblock((char *)fs->sb); in ext4fs_deinit()
712 new_feature_incompat = le32_to_cpu(fs->sb->feature_incompat); in ext4fs_deinit()
714 fs->sb->feature_incompat = cpu_to_le32(new_feature_incompat); in ext4fs_deinit()
716 (struct ext2_sblock *)fs->sb, (uint32_t)SUPERBLOCK_SIZE); in ext4fs_deinit()
717 free(fs->sb); in ext4fs_deinit()
718 fs->sb = NULL; in ext4fs_deinit()
720 if (fs->blk_bmaps) { in ext4fs_deinit()
721 for (i = 0; i < fs->no_blkgrp; i++) { in ext4fs_deinit()
722 free(fs->blk_bmaps[i]); in ext4fs_deinit()
723 fs->blk_bmaps[i] = NULL; in ext4fs_deinit()
725 free(fs->blk_bmaps); in ext4fs_deinit()
726 fs->blk_bmaps = NULL; in ext4fs_deinit()
729 if (fs->inode_bmaps) { in ext4fs_deinit()
730 for (i = 0; i < fs->no_blkgrp; i++) { in ext4fs_deinit()
731 free(fs->inode_bmaps[i]); in ext4fs_deinit()
732 fs->inode_bmaps[i] = NULL; in ext4fs_deinit()
734 free(fs->inode_bmaps); in ext4fs_deinit()
735 fs->inode_bmaps = NULL; in ext4fs_deinit()
739 free(fs->gdtable); in ext4fs_deinit()
740 fs->gdtable = NULL; in ext4fs_deinit()
745 fs->first_pass_ibmap = 0; in ext4fs_deinit()
746 fs->first_pass_bbmap = 0; in ext4fs_deinit()
747 fs->curr_inode_no = 0; in ext4fs_deinit()
748 fs->curr_blkno = 0; in ext4fs_deinit()
761 struct ext_filesystem *fs = get_fs(); in ext4fs_write_file() local
762 int log2blksz = fs->dev_desc->log2blksz; in ext4fs_write_file()
774 blockcnt = ((len + pos) + fs->blksz - 1) / fs->blksz; in ext4fs_write_file()
776 for (i = pos / fs->blksz; i < blockcnt; i++) { in ext4fs_write_file()
778 int blockend = fs->blksz; in ext4fs_write_file()
820 memset(buf, 0, fs->blksz - skipfirst); in ext4fs_write_file()
822 buf += fs->blksz - skipfirst; in ext4fs_write_file()
856 struct ext_filesystem *fs = get_fs(); in ext4fs_write() local
860 g_parent_inode = zalloc(fs->inodesz); in ext4fs_write()
868 inodes_per_block = fs->blksz / fs->inodesz; in ext4fs_write()
883 fs->first_pass_bbmap = 0; in ext4fs_write()
884 fs->curr_blkno = 0; in ext4fs_write()
886 fs->first_pass_ibmap = 0; in ext4fs_write()
887 fs->curr_inode_no = 0; in ext4fs_write()
893 blks_reqd_for_file = lldiv(bytes_reqd_for_file, fs->blksz); in ext4fs_write()
894 if (do_div(bytes_reqd_for_file, fs->blksz) != 0) { in ext4fs_write()
900 if (le32_to_cpu(fs->sb->free_blocks) < blks_reqd_for_file) { in ext4fs_write()
909 inode_buffer = zalloc(fs->inodesz); in ext4fs_write()
925 file_inode->blockcnt = cpu_to_le32((blks_reqd_for_file * fs->blksz) >> in ext4fs_write()
926 fs->dev_desc->log2blksz); in ext4fs_write()
928 temp_ptr = zalloc(fs->blksz); in ext4fs_write()
933 bgd = ext4fs_get_group_descriptor(fs, ibmap_idx); in ext4fs_write()
934 itable_blkno = ext4fs_bg_get_inode_table_id(bgd, fs) + in ext4fs_write()
937 blkoff = (inodeno % inodes_per_block) * fs->inodesz; in ext4fs_write()
938 ext4fs_devread((lbaint_t)itable_blkno * fs->sect_perblk, 0, fs->blksz, in ext4fs_write()
943 memcpy(temp_ptr + blkoff, inode_buffer, fs->inodesz); in ext4fs_write()
954 bgd = ext4fs_get_group_descriptor(fs, ibmap_idx); in ext4fs_write()
955 parent_itable_blkno = ext4fs_bg_get_inode_table_id(bgd, fs) + in ext4fs_write()
958 blkoff = (parent_inodeno % inodes_per_block) * fs->inodesz; in ext4fs_write()
960 memset(temp_ptr, '\0', fs->blksz); in ext4fs_write()
961 ext4fs_devread((lbaint_t)parent_itable_blkno * fs->sect_perblk, in ext4fs_write()
962 0, fs->blksz, temp_ptr); in ext4fs_write()
966 memcpy(temp_ptr + blkoff, g_parent_inode, fs->inodesz); in ext4fs_write()
974 memcpy(temp_ptr + blkoff, g_parent_inode, fs->inodesz); in ext4fs_write()
982 fs->first_pass_bbmap = 0; in ext4fs_write()
983 fs->curr_blkno = 0; in ext4fs_write()
984 fs->first_pass_ibmap = 0; in ext4fs_write()
985 fs->curr_inode_no = 0; in ext4fs_write()