Lines Matching full:fs
53 static errcode_t write_bitmaps(ext2_filsys fs, int do_inode, int do_block) in write_bitmaps() argument
63 blk64_t blk_itr = EXT2FS_B2C(fs, fs->super->s_first_data_block); in write_bitmaps()
66 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); in write_bitmaps()
68 if (!(fs->flags & EXT2_FLAG_RW)) in write_bitmaps()
71 csum_flag = ext2fs_has_group_desc_csum(fs); in write_bitmaps()
75 block_nbytes = EXT2_CLUSTERS_PER_GROUP(fs->super) / 8; in write_bitmaps()
76 retval = io_channel_alloc_buf(fs->io, 0, &block_buf); in write_bitmaps()
79 memset(block_buf, 0xff, fs->blocksize); in write_bitmaps()
83 ((EXT2_INODES_PER_GROUP(fs->super)+7) / 8); in write_bitmaps()
84 retval = io_channel_alloc_buf(fs->io, 0, &inode_buf); in write_bitmaps()
87 memset(inode_buf, 0xff, fs->blocksize); in write_bitmaps()
90 for (i = 0; i < fs->group_desc_count; i++) { in write_bitmaps()
94 if (csum_flag && ext2fs_bg_flags_test(fs, i, EXT2_BG_BLOCK_UNINIT) in write_bitmaps()
98 retval = ext2fs_get_block_bitmap_range2(fs->block_map, in write_bitmaps()
103 if (i == fs->group_desc_count - 1) { in write_bitmaps()
105 nbits = EXT2FS_NUM_B2C(fs, in write_bitmaps()
106 ((ext2fs_blocks_count(fs->super) in write_bitmaps()
107 - (__u64) fs->super->s_first_data_block) in write_bitmaps()
108 % (__u64) EXT2_BLOCKS_PER_GROUP(fs->super))); in write_bitmaps()
110 for (j = nbits; j < fs->blocksize * 8; j++) in write_bitmaps()
114 retval = ext2fs_block_bitmap_csum_set(fs, i, block_buf, in write_bitmaps()
118 ext2fs_group_desc_csum_set(fs, i); in write_bitmaps()
119 fs->flags |= EXT2_FLAG_DIRTY; in write_bitmaps()
121 blk = ext2fs_block_bitmap_loc(fs, i); in write_bitmaps()
122 if (blk && blk < ext2fs_blocks_count(fs->super)) { in write_bitmaps()
123 retval = io_channel_write_blk64(fs->io, blk, 1, in write_bitmaps()
137 if (csum_flag && ext2fs_bg_flags_test(fs, i, EXT2_BG_INODE_UNINIT) in write_bitmaps()
141 retval = ext2fs_get_inode_bitmap_range2(fs->inode_map, in write_bitmaps()
146 retval = ext2fs_inode_bitmap_csum_set(fs, i, inode_buf, in write_bitmaps()
150 ext2fs_group_desc_csum_set(fs, i); in write_bitmaps()
151 fs->flags |= EXT2_FLAG_DIRTY; in write_bitmaps()
153 blk = ext2fs_inode_bitmap_loc(fs, i); in write_bitmaps()
154 if (blk && blk < ext2fs_blocks_count(fs->super)) { in write_bitmaps()
155 retval = io_channel_write_blk64(fs->io, blk, 1, in write_bitmaps()
167 fs->flags &= ~EXT2_FLAG_BB_DIRTY; in write_bitmaps()
171 fs->flags &= ~EXT2_FLAG_IB_DIRTY; in write_bitmaps()
183 static errcode_t mark_uninit_bg_group_blocks(ext2_filsys fs) in mark_uninit_bg_group_blocks() argument
187 ext2fs_block_bitmap bmap = fs->block_map; in mark_uninit_bg_group_blocks()
189 for (i = 0; i < fs->group_desc_count; i++) { in mark_uninit_bg_group_blocks()
190 if (!ext2fs_bg_flags_test(fs, i, EXT2_BG_BLOCK_UNINIT)) in mark_uninit_bg_group_blocks()
193 ext2fs_reserve_super_and_bgd(fs, i, bmap); in mark_uninit_bg_group_blocks()
198 blk = ext2fs_inode_table_loc(fs, i); in mark_uninit_bg_group_blocks()
201 fs->inode_blocks_per_group); in mark_uninit_bg_group_blocks()
206 blk = ext2fs_block_bitmap_loc(fs, i); in mark_uninit_bg_group_blocks()
207 if (blk && blk < ext2fs_blocks_count(fs->super)) in mark_uninit_bg_group_blocks()
213 blk = ext2fs_inode_bitmap_loc(fs, i); in mark_uninit_bg_group_blocks()
214 if (blk && blk < ext2fs_blocks_count(fs->super)) in mark_uninit_bg_group_blocks()
230 static errcode_t read_bitmaps_range_prepare(ext2_filsys fs, int flags) in read_bitmaps_range_prepare() argument
233 int block_nbytes = EXT2_CLUSTERS_PER_GROUP(fs->super) / 8; in read_bitmaps_range_prepare()
234 int inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8; in read_bitmaps_range_prepare()
237 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); in read_bitmaps_range_prepare()
239 if ((block_nbytes > (int) fs->blocksize) || in read_bitmaps_range_prepare()
240 (inode_nbytes > (int) fs->blocksize)) in read_bitmaps_range_prepare()
243 fs->write_bitmaps = ext2fs_write_bitmaps; in read_bitmaps_range_prepare()
245 retval = ext2fs_get_mem(strlen(fs->device_name) + 80, &buf); in read_bitmaps_range_prepare()
250 if (fs->block_map) in read_bitmaps_range_prepare()
251 ext2fs_free_block_bitmap(fs->block_map); in read_bitmaps_range_prepare()
253 strcat(buf, fs->device_name); in read_bitmaps_range_prepare()
254 retval = ext2fs_allocate_block_bitmap(fs, buf, &fs->block_map); in read_bitmaps_range_prepare()
260 if (fs->inode_map) in read_bitmaps_range_prepare()
261 ext2fs_free_inode_bitmap(fs->inode_map); in read_bitmaps_range_prepare()
263 strcat(buf, fs->device_name); in read_bitmaps_range_prepare()
264 retval = ext2fs_allocate_inode_bitmap(fs, buf, &fs->inode_map); in read_bitmaps_range_prepare()
273 ext2fs_free_block_bitmap(fs->block_map); in read_bitmaps_range_prepare()
274 fs->block_map = 0; in read_bitmaps_range_prepare()
277 ext2fs_free_inode_bitmap(fs->inode_map); in read_bitmaps_range_prepare()
278 fs->inode_map = 0; in read_bitmaps_range_prepare()
284 static errcode_t read_bitmaps_range_start(ext2_filsys fs, int flags, in read_bitmaps_range_start() argument
292 int block_nbytes = EXT2_CLUSTERS_PER_GROUP(fs->super) / 8; in read_bitmaps_range_start()
293 int inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8; in read_bitmaps_range_start()
297 blk64_t blk_itr = EXT2FS_B2C(fs, fs->super->s_first_data_block); in read_bitmaps_range_start()
302 csum_flag = ext2fs_has_group_desc_csum(fs); in read_bitmaps_range_start()
305 retval = io_channel_alloc_buf(fs->io, 0, &block_bitmap); in read_bitmaps_range_start()
313 retval = io_channel_alloc_buf(fs->io, 0, &inode_bitmap); in read_bitmaps_range_start()
321 if (fs->flags & EXT2_FLAG_IMAGE_FILE) { in read_bitmaps_range_start()
322 blk = (ext2fs_le32_to_cpu(fs->image_header->offset_inodemap) / fs->blocksize); in read_bitmaps_range_start()
323 ino_cnt = fs->super->s_inodes_count; in read_bitmaps_range_start()
325 retval = io_channel_read_blk64(fs->image_io, blk++, in read_bitmaps_range_start()
329 cnt = fs->blocksize << 3; in read_bitmaps_range_start()
332 retval = ext2fs_set_inode_bitmap_range2(fs->inode_map, in read_bitmaps_range_start()
339 blk = (ext2fs_le32_to_cpu(fs->image_header->offset_blockmap) / in read_bitmaps_range_start()
340 fs->blocksize); in read_bitmaps_range_start()
341 blk_cnt = EXT2_GROUPS_TO_CLUSTERS(fs->super, in read_bitmaps_range_start()
342 fs->group_desc_count); in read_bitmaps_range_start()
344 retval = io_channel_read_blk64(fs->image_io, blk++, in read_bitmaps_range_start()
348 cnt = fs->blocksize << 3; in read_bitmaps_range_start()
351 retval = ext2fs_set_block_bitmap_range2(fs->block_map, in read_bitmaps_range_start()
365 blk = ext2fs_block_bitmap_loc(fs, i); in read_bitmaps_range_start()
367 ext2fs_bg_flags_test(fs, i, EXT2_BG_BLOCK_UNINIT) && in read_bitmaps_range_start()
368 ext2fs_group_desc_csum_verify(fs, i)) || in read_bitmaps_range_start()
369 (blk >= ext2fs_blocks_count(fs->super))) in read_bitmaps_range_start()
372 retval = io_channel_read_blk64(fs->io, blk, in read_bitmaps_range_start()
379 if (!(fs->flags & in read_bitmaps_range_start()
381 !ext2fs_block_bitmap_csum_verify(fs, i, in read_bitmaps_range_start()
388 block_nbytes, fs->blocksize - 1)) in read_bitmaps_range_start()
394 retval = ext2fs_set_block_bitmap_range2(fs->block_map, in read_bitmaps_range_start()
402 blk = ext2fs_inode_bitmap_loc(fs, i); in read_bitmaps_range_start()
404 ext2fs_bg_flags_test(fs, i, EXT2_BG_INODE_UNINIT) && in read_bitmaps_range_start()
405 ext2fs_group_desc_csum_verify(fs, i)) || in read_bitmaps_range_start()
406 (blk >= ext2fs_blocks_count(fs->super))) in read_bitmaps_range_start()
409 retval = io_channel_read_blk64(fs->io, blk, in read_bitmaps_range_start()
417 if (!(fs->flags & in read_bitmaps_range_start()
419 !ext2fs_inode_bitmap_csum_verify(fs, i, in read_bitmaps_range_start()
426 inode_nbytes, fs->blocksize - 1)) in read_bitmaps_range_start()
432 retval = ext2fs_set_inode_bitmap_range2(fs->inode_map, in read_bitmaps_range_start()
449 static errcode_t read_bitmaps_range_end(ext2_filsys fs, int flags, in read_bitmaps_range_end() argument
456 retval = mark_uninit_bg_group_blocks(fs); in read_bitmaps_range_end()
459 fs->flags &= ~EXT2_FLAG_BBITMAP_TAIL_PROBLEM; in read_bitmaps_range_end()
462 fs->flags &= ~EXT2_FLAG_IBITMAP_TAIL_PROBLEM; in read_bitmaps_range_end()
463 fs->flags |= tail_flags; in read_bitmaps_range_end()
468 static void read_bitmaps_cleanup_on_error(ext2_filsys fs, int flags) in read_bitmaps_cleanup_on_error() argument
471 ext2fs_free_block_bitmap(fs->block_map); in read_bitmaps_cleanup_on_error()
472 fs->block_map = 0; in read_bitmaps_cleanup_on_error()
475 ext2fs_free_inode_bitmap(fs->inode_map); in read_bitmaps_cleanup_on_error()
476 fs->inode_map = 0; in read_bitmaps_cleanup_on_error()
480 static errcode_t read_bitmaps_range(ext2_filsys fs, int flags, in read_bitmaps_range() argument
486 retval = read_bitmaps_range_prepare(fs, flags); in read_bitmaps_range()
490 retval = read_bitmaps_range_start(fs, flags, start, end, in read_bitmaps_range()
493 retval = read_bitmaps_range_end(fs, flags, tail_flags); in read_bitmaps_range()
495 read_bitmaps_cleanup_on_error(fs, flags); in read_bitmaps_range()
521 errcode_t ext2fs_rw_bitmaps(ext2_filsys fs, int flags, int num_threads) in ext2fs_rw_bitmaps() argument
530 unsigned flexbg_size = 1U << fs->super->s_log_groups_per_flex; in ext2fs_rw_bitmaps()
538 if (ext2fs_has_feature_journal_dev(fs->super)) in ext2fs_rw_bitmaps()
542 return write_bitmaps(fs, flags & EXT2FS_BITMAPS_INODE, in ext2fs_rw_bitmaps()
546 if (((fs->io->flags & CHANNEL_FLAGS_THREADS) == 0) || in ext2fs_rw_bitmaps()
547 (num_threads == 1) || (fs->flags & EXT2_FLAG_IMAGE_FILE)) in ext2fs_rw_bitmaps()
563 if ((unsigned) num_threads > fs->group_desc_count) in ext2fs_rw_bitmaps()
564 num_threads = fs->group_desc_count; in ext2fs_rw_bitmaps()
565 average_group = fs->group_desc_count / num_threads; in ext2fs_rw_bitmaps()
566 if (ext2fs_has_feature_flex_bg(fs->super)) { in ext2fs_rw_bitmaps()
572 io_channel_set_options(fs->io, "cache=off"); in ext2fs_rw_bitmaps()
586 retval = read_bitmaps_range_prepare(fs, flags); in ext2fs_rw_bitmaps()
592 thread_infos[i].rbt_fs = fs; in ext2fs_rw_bitmaps()
602 thread_infos[i].rbt_grp_end = fs->group_desc_count - 1; in ext2fs_rw_bitmaps()
629 retval = read_bitmaps_range_end(fs, flags, tail_flags); in ext2fs_rw_bitmaps()
631 read_bitmaps_cleanup_on_error(fs, flags); in ext2fs_rw_bitmaps()
633 io_channel_set_options(fs->io, "cache=on"); in ext2fs_rw_bitmaps()
637 return read_bitmaps_range(fs, flags, 0, fs->group_desc_count - 1); in ext2fs_rw_bitmaps()
640 errcode_t ext2fs_read_inode_bitmap(ext2_filsys fs) in ext2fs_read_inode_bitmap() argument
642 return ext2fs_rw_bitmaps(fs, EXT2FS_BITMAPS_INODE, -1); in ext2fs_read_inode_bitmap()
645 errcode_t ext2fs_read_block_bitmap(ext2_filsys fs) in ext2fs_read_block_bitmap() argument
647 return ext2fs_rw_bitmaps(fs, EXT2FS_BITMAPS_BLOCK, -1); in ext2fs_read_block_bitmap()
650 errcode_t ext2fs_write_inode_bitmap(ext2_filsys fs) in ext2fs_write_inode_bitmap() argument
652 return write_bitmaps(fs, 1, 0); in ext2fs_write_inode_bitmap()
655 errcode_t ext2fs_write_block_bitmap (ext2_filsys fs) in ext2fs_write_block_bitmap() argument
657 return write_bitmaps(fs, 0, 1); in ext2fs_write_block_bitmap()
660 errcode_t ext2fs_read_bitmaps(ext2_filsys fs) in ext2fs_read_bitmaps() argument
664 if (!fs->inode_map) in ext2fs_read_bitmaps()
666 if (!fs->block_map) in ext2fs_read_bitmaps()
670 return ext2fs_rw_bitmaps(fs, flags, -1); in ext2fs_read_bitmaps()
673 errcode_t ext2fs_write_bitmaps(ext2_filsys fs) in ext2fs_write_bitmaps() argument
675 int do_inode = fs->inode_map && ext2fs_test_ib_dirty(fs); in ext2fs_write_bitmaps()
676 int do_block = fs->block_map && ext2fs_test_bb_dirty(fs); in ext2fs_write_bitmaps()
681 return write_bitmaps(fs, do_inode, do_block); in ext2fs_write_bitmaps()