Lines Matching refs:info

129 static void dbg_print_info_struct(struct f2fs_info *info)
135 SLOGD("blocks_per_segment: %"PRIu64, info->blocks_per_segment);
136 SLOGD("block_size: %d", info->block_size);
137 SLOGD("sit_bmp loc: %p", info->sit_bmp);
138 SLOGD("sit_bmp_size: %d", info->sit_bmp_size);
139 SLOGD("blocks_per_sit: %"PRIu64, info->blocks_per_sit);
140 SLOGD("sit_blocks loc: %p", info->sit_blocks);
141 SLOGD("sit_sums loc: %p", info->sit_sums);
142 SLOGD("sit_sums num: %d", le16_to_cpu(info->sit_sums->n_sits));
144 for(i = 0; i < (le16_to_cpu(info->sit_sums->n_sits)); i++) {
145 SLOGD("entry %d in journal entries is for segment %d",i, le32_to_cpu(segno_in_journal(info->sit_sums, i)));
148 SLOGD("cp_blkaddr: %"PRIu64, info->cp_blkaddr);
149 SLOGD("cp_valid_cp_blkaddr: %"PRIu64, info->cp_valid_cp_blkaddr);
150 SLOGD("sit_blkaddr: %"PRIu64, info->sit_blkaddr);
151 SLOGD("nat_blkaddr: %"PRIu64, info->nat_blkaddr);
152 SLOGD("ssa_blkaddr: %"PRIu64, info->ssa_blkaddr);
153 SLOGD("main_blkaddr: %"PRIu64, info->main_blkaddr);
154 SLOGD("total_user_used: %"PRIu64, info->total_user_used);
155 SLOGD("total_blocks: %"PRIu64, info->total_blocks);
261 int get_valid_checkpoint_info(int fd, struct f2fs_super_block *sb, struct f2fs_checkpoint **cp, struct f2fs_info *info)
288 info->cp_valid_cp_blkaddr = cp2_start_blk_no;
292 info->cp_valid_cp_blkaddr = cp1_start_blk_no;
297 info->cp_valid_cp_blkaddr = cp1_start_blk_no;
300 info->cp_valid_cp_blkaddr = cp2_start_blk_no;
314 static int gather_sit_info(int fd, struct f2fs_info *info)
316 u64 num_segments = (info->total_blocks - info->main_blkaddr
317 + info->blocks_per_segment - 1) / info->blocks_per_segment;
321 info->sit_blocks = malloc(num_sit_blocks * sizeof(struct f2fs_sit_block));
322 if (!info->sit_blocks)
326 off64_t address = info->sit_blkaddr + sit_block;
328 if (f2fs_test_bit(sit_block, info->sit_bmp))
329 address += info->blocks_per_sit;
332 if (read_structure(fd, address * F2FS_BLKSIZE, &info->sit_blocks[sit_block], sizeof(struct f2fs_sit_block))) {
334 free(info->sit_blocks);
347 static inline u64 sum_blk_addr(struct f2fs_checkpoint *cp, struct f2fs_info *info, int base, int type)
349 return info->cp_valid_cp_blkaddr + le32_to_cpu(cp->cp_pack_total_block_count)
353 static int get_sit_summary(int fd, struct f2fs_info *info, struct f2fs_checkpoint *cp)
357 info->sit_sums = calloc(1, sizeof(struct f2fs_summary_block));
358 if (!info->sit_sums)
363 if (read_structure_blk(fd, info->cp_valid_cp_blkaddr + le32_to_cpu(cp->cp_pack_start_sum), buffer, 1))
365 memcpy(&info->sit_sums->n_sits, &buffer[SUM_JOURNAL_SIZE], SUM_JOURNAL_SIZE);
369 blk_addr = sum_blk_addr(cp, info, NR_CURSEG_TYPE, CURSEG_COLD_DATA);
371 blk_addr = sum_blk_addr(cp, info, NR_CURSEG_DATA_TYPE, CURSEG_COLD_DATA);
376 memcpy(info->sit_sums, buffer, sizeof(struct f2fs_summary_block));
385 struct f2fs_info *info;
387 info = calloc(1, sizeof(*info));
388 if (!info) {
396 free(info);
401 free(info);
407 info->cp_blkaddr = le32_to_cpu(sb->cp_blkaddr);
408 info->sit_blkaddr = le32_to_cpu(sb->sit_blkaddr);
409 info->nat_blkaddr = le32_to_cpu(sb->nat_blkaddr);
410 info->ssa_blkaddr = le32_to_cpu(sb->ssa_blkaddr);
411 info->main_blkaddr = le32_to_cpu(sb->main_blkaddr);
412 info->block_size = F2FS_BLKSIZE;
413 info->total_blocks = sb->block_count;
414 info->blocks_per_sit = (le32_to_cpu(sb->segment_count_sit) >> 1) << le32_to_cpu(sb->log_blocks_per_seg);
415 info->blocks_per_segment = 1U << le32_to_cpu(sb->log_blocks_per_seg);
417 if (get_valid_checkpoint_info(fd, sb, &cp, info))
421 info->total_user_used = le32_to_cpu(cp->valid_block_count);
426 info->sit_bmp = malloc(bmp_size);
427 if(!info->sit_bmp) {
432 info->sit_bmp_size = bmp_size;
433 if (read_structure(fd, info->cp_valid_cp_blkaddr * F2FS_BLKSIZE
435 info->sit_bmp, bmp_size)) {
440 if (gather_sit_info(fd , info)) {
444 if (get_sit_summary(fd, info, cp)) {
448 dbg_print_info_struct(info);
449 return info;
453 free_f2fs_info(info);
457 void free_f2fs_info(struct f2fs_info *info)
459 if (info) {
460 free(info->sit_blocks);
461 info->sit_blocks = NULL;
463 free(info->sit_bmp);
464 info->sit_bmp = NULL;
466 free(info->sit_sums);
467 info->sit_sums = NULL;
469 free(info);
472 u64 get_num_blocks_used(struct f2fs_info *info)
474 return info->main_blkaddr + info->total_user_used;
487 int run_on_used_blocks(u64 startblock, struct f2fs_info *info, int (*func)(u64 pos, void *data), void *data) {
495 while (block < info->total_blocks) {
497 if (block < info->main_blkaddr) {
504 segnum = (block - info->main_blkaddr)/info->blocks_per_segment;
508 for(i = 0; i < le16_to_cpu(info->sit_sums->n_sits); i++) {
509 if (le32_to_cpu(segno_in_journal(info->sit_sums, i)) == segnum) {
510 sit_entry = &sit_in_journal(info->sit_sums, i);
519 sit_entry = &info->sit_blocks[sit_block_num_cur].entries[segnum % SIT_ENTRY_PER_BLOCK];
522 block_offset = (block - info->main_blkaddr) % info->blocks_per_segment;
525 block += info->blocks_per_segment;
548 struct f2fs_info *info;
561 int pdone = (pos * 100) / d->info->total_blocks;
614 struct f2fs_info *info = generate_f2fs_info(infd);
615 if (!info) {
616 printf("Failed to generate info!");
624 d.info = info;
625 int expected_count = get_num_blocks_used(info);
626 run_on_used_blocks(0, info, &copy_used, &d);
628 ftruncate64(outfd, info->total_blocks * F2FS_BLKSIZE);
629 free_f2fs_info(info);