* [RFC PATCH 0/4] do more check in sanity_check_nid and clean up @ 2016-01-30 9:16 Sheng Yong 2016-01-30 9:16 ` [RFC PATCH 1/4] f2fs-tools: simplify get_{sb|cp} and set_{sb|cp} Sheng Yong ` (3 more replies) 0 siblings, 4 replies; 9+ messages in thread From: Sheng Yong @ 2016-01-30 9:16 UTC (permalink / raw) To: jaegeuk, chao2.yu; +Cc: linux-f2fs-devel PATCH 1/4 cleans up get_{sb|cp} and set_{sb|cp} to integrate them into get_val and set_val to avoid dumplicated definition of macro. PATCH 3/4 and 4/4 check nat_entry->ino. If it is wrong, we drop corresponding nodes. thanks, Sheng Sheng Yong (4): f2fs-tools: simplify get_{sb|cp} and set_{sb|cp} f2fs-tools: fix endianness of on-disk check_sum in summary_footer fsck.f2fs: check ino of an used nat entry fsck.f2fs: check ino of an inode fsck/fsck.c | 30 ++++--- fsck/main.c | 8 +- fsck/mount.c | 146 ++++++++++++++++----------------- include/f2fs_fs.h | 86 +++++++------------- mkfs/f2fs_format.c | 234 ++++++++++++++++++++++++++--------------------------- 5 files changed, 243 insertions(+), 261 deletions(-) -- 1.9.1 ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [RFC PATCH 1/4] f2fs-tools: simplify get_{sb|cp} and set_{sb|cp} 2016-01-30 9:16 [RFC PATCH 0/4] do more check in sanity_check_nid and clean up Sheng Yong @ 2016-01-30 9:16 ` Sheng Yong 2016-01-30 1:46 ` Jaegeuk Kim 2016-01-30 9:16 ` [RFC PATCH 2/4] f2fs-tools: fix endianness of on-disk check_sum in summary_footer Sheng Yong ` (2 subsequent siblings) 3 siblings, 1 reply; 9+ messages in thread From: Sheng Yong @ 2016-01-30 9:16 UTC (permalink / raw) To: jaegeuk, chao2.yu; +Cc: linux-f2fs-devel * Remove dumplicated definitions of get_{sb|cp} and set_{sb|cp}, and introduce micros get_val and set_val instead. * Add a new parameter to get_val and set_val so that they are not depended on implied definition of `sb' and `cp'. Signed-off-by: Sheng Yong <shengyong1@huawei.com> --- fsck/fsck.c | 20 ++--- fsck/main.c | 8 +- fsck/mount.c | 146 ++++++++++++++++----------------- include/f2fs_fs.h | 84 +++++++------------ mkfs/f2fs_format.c | 234 ++++++++++++++++++++++++++--------------------------- 5 files changed, 232 insertions(+), 260 deletions(-) diff --git a/fsck/fsck.c b/fsck/fsck.c index e7dd02f..4fbb56d 100644 --- a/fsck/fsck.c +++ b/fsck/fsck.c @@ -1191,7 +1191,7 @@ void fsck_chk_orphan_node(struct f2fs_sb_info *sbi) if (!is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ORPHAN_PRESENT_FLAG)) return; - start_blk = __start_cp_addr(sbi) + 1 + get_sb(cp_payload); + start_blk = __start_cp_addr(sbi) + 1 + get_val(sb, cp_payload); orphan_blkaddr = __start_sum_addr(sbi) - 1; orphan_blk = calloc(BLOCK_SZ, 1); @@ -1324,25 +1324,25 @@ static void fix_checkpoint(struct f2fs_sb_info *sbi) flags |= CP_ORPHAN_PRESENT_FLAG; } - set_cp(ckpt_flags, flags); - set_cp(cp_pack_total_block_count, 8 + orphan_blks + get_sb(cp_payload)); + set_val(cp, ckpt_flags, flags); + set_val(cp, cp_pack_total_block_count, 8 + orphan_blks + get_val(sb, cp_payload)); - set_cp(free_segment_count, fsck->chk.free_segs); - set_cp(valid_block_count, fsck->chk.valid_blk_cnt); - set_cp(valid_node_count, fsck->chk.valid_node_cnt); - set_cp(valid_inode_count, fsck->chk.valid_inode_cnt); + set_val(cp, free_segment_count, fsck->chk.free_segs); + set_val(cp, valid_block_count, fsck->chk.valid_blk_cnt); + set_val(cp, valid_node_count, fsck->chk.valid_node_cnt); + set_val(cp, valid_inode_count, fsck->chk.valid_inode_cnt); crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); - cp_blk_no = get_sb(cp_blkaddr); + cp_blk_no = get_val(sb, cp_blkaddr); if (sbi->cur_cp == 2) - cp_blk_no += 1 << get_sb(log_blocks_per_seg); + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); ret = dev_write_block(cp, cp_blk_no++); ASSERT(ret >= 0); - for (i = 0; i < get_sb(cp_payload); i++) { + for (i = 0; i < get_val(sb, cp_payload); i++) { ret = dev_write_block(((unsigned char *)cp) + i * F2FS_BLKSIZE, cp_blk_no++); ASSERT(ret >= 0); diff --git a/fsck/main.c b/fsck/main.c index 54dbb2d..7fcaa5d 100644 --- a/fsck/main.c +++ b/fsck/main.c @@ -255,7 +255,7 @@ static int do_defrag(struct f2fs_sb_info *sbi) { struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); - if (config.defrag_start > get_sb(block_count)) + if (config.defrag_start > get_val(sb, block_count)) goto out_range; if (config.defrag_start < SM_I(sbi)->main_blkaddr) config.defrag_start = SM_I(sbi)->main_blkaddr; @@ -263,8 +263,8 @@ static int do_defrag(struct f2fs_sb_info *sbi) if (config.defrag_len == 0) config.defrag_len = sbi->blocks_per_seg; - if (config.defrag_start + config.defrag_len > get_sb(block_count)) - config.defrag_len = get_sb(block_count) - config.defrag_start; + if (config.defrag_start + config.defrag_len > get_val(sb, block_count)) + config.defrag_len = get_val(sb, block_count) - config.defrag_start; if (config.defrag_target == 0) { config.defrag_target = config.defrag_start - 1; @@ -273,7 +273,7 @@ static int do_defrag(struct f2fs_sb_info *sbi) } if (config.defrag_target < SM_I(sbi)->main_blkaddr || - config.defrag_target > get_sb(block_count)) + config.defrag_target > get_val(sb, block_count)) goto out_range; if (config.defrag_target >= config.defrag_start && config.defrag_target < config.defrag_start + config.defrag_len) diff --git a/fsck/mount.c b/fsck/mount.c index 4c807f9..6e6d230 100644 --- a/fsck/mount.c +++ b/fsck/mount.c @@ -269,21 +269,21 @@ int sanity_check_raw_super(struct f2fs_super_block *sb) { unsigned int blocksize; - if (F2FS_SUPER_MAGIC != get_sb(magic)) + if (F2FS_SUPER_MAGIC != get_val(sb, magic)) return -1; if (F2FS_BLKSIZE != PAGE_CACHE_SIZE) return -1; - blocksize = 1 << get_sb(log_blocksize); + blocksize = 1 << get_val(sb, log_blocksize); if (F2FS_BLKSIZE != blocksize) return -1; - if (get_sb(log_sectorsize) > F2FS_MAX_LOG_SECTOR_SIZE || - get_sb(log_sectorsize) < F2FS_MIN_LOG_SECTOR_SIZE) + if (get_val(sb, log_sectorsize) > F2FS_MAX_LOG_SECTOR_SIZE || + get_val(sb, log_sectorsize) < F2FS_MIN_LOG_SECTOR_SIZE) return -1; - if (get_sb(log_sectors_per_block) + get_sb(log_sectorsize) != + if (get_val(sb, log_sectors_per_block) + get_val(sb, log_sectorsize) != F2FS_MAX_LOG_SECTOR_SIZE) return -1; @@ -350,22 +350,22 @@ int init_sb_info(struct f2fs_sb_info *sbi) struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); u64 total_sectors; - sbi->log_sectors_per_block = get_sb(log_sectors_per_block); - sbi->log_blocksize = get_sb(log_blocksize); + sbi->log_sectors_per_block = get_val(sb, log_sectors_per_block); + sbi->log_blocksize = get_val(sb, log_blocksize); sbi->blocksize = 1 << sbi->log_blocksize; - sbi->log_blocks_per_seg = get_sb(log_blocks_per_seg); + sbi->log_blocks_per_seg = get_val(sb, log_blocks_per_seg); sbi->blocks_per_seg = 1 << sbi->log_blocks_per_seg; - sbi->segs_per_sec = get_sb(segs_per_sec); - sbi->secs_per_zone = get_sb(secs_per_zone); - sbi->total_sections = get_sb(section_count); - sbi->total_node_count = (get_sb(segment_count_nat) / 2) * + sbi->segs_per_sec = get_val(sb, segs_per_sec); + sbi->secs_per_zone = get_val(sb, secs_per_zone); + sbi->total_sections = get_val(sb, section_count); + sbi->total_node_count = (get_val(sb, segment_count_nat) / 2) * sbi->blocks_per_seg * NAT_ENTRY_PER_BLOCK; - sbi->root_ino_num = get_sb(root_ino); - sbi->node_ino_num = get_sb(node_ino); - sbi->meta_ino_num = get_sb(meta_ino); + sbi->root_ino_num = get_val(sb, root_ino); + sbi->node_ino_num = get_val(sb, node_ino); + sbi->meta_ino_num = get_val(sb, meta_ino); sbi->cur_victim_sec = NULL_SEGNO; - total_sectors = get_sb(block_count) << sbi->log_sectors_per_block; + total_sectors = get_val(sb, block_count) << sbi->log_sectors_per_block; MSG(0, "Info: total FS sectors = %"PRIu64" (%"PRIu64" MB)\n", total_sectors, total_sectors >> 11); return 0; @@ -387,7 +387,7 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, return NULL; cp = (struct f2fs_checkpoint *)cp_page_1; - crc_offset = get_cp(checksum_offset); + crc_offset = get_val(cp, checksum_offset); if (crc_offset >= blk_size) goto invalid_cp1; @@ -395,17 +395,17 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, if (f2fs_crc_valid(crc, cp, crc_offset)) goto invalid_cp1; - pre_version = get_cp(checkpoint_ver); + pre_version = get_val(cp, checkpoint_ver); /* Read the 2nd cp block in this CP pack */ cp_page_2 = malloc(PAGE_SIZE); - cp_addr += get_cp(cp_pack_total_block_count) - 1; + cp_addr += get_val(cp, cp_pack_total_block_count) - 1; if (dev_read_block(cp_page_2, cp_addr) < 0) goto invalid_cp2; cp = (struct f2fs_checkpoint *)cp_page_2; - crc_offset = get_cp(checksum_offset); + crc_offset = get_val(cp, checksum_offset); if (crc_offset >= blk_size) goto invalid_cp2; @@ -413,7 +413,7 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, if (f2fs_crc_valid(crc, cp, crc_offset)) goto invalid_cp2; - cur_version = get_cp(checkpoint_ver); + cur_version = get_val(cp, checkpoint_ver); if (cur_version == pre_version) { *version = cur_version; @@ -435,7 +435,7 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) unsigned long blk_size = sbi->blocksize; unsigned long long cp1_version = 0, cp2_version = 0, version; unsigned long long cp_start_blk_no; - unsigned int cp_blks = 1 + get_sb(cp_payload); + unsigned int cp_blks = 1 + get_val(sb, cp_payload); int ret; sbi->ckpt = malloc(cp_blks * blk_size); @@ -445,11 +445,11 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) * Finding out valid cp block involves read both * sets( cp pack1 and cp pack 2) */ - cp_start_blk_no = get_sb(cp_blkaddr); + cp_start_blk_no = get_val(sb, cp_blkaddr); cp1 = validate_checkpoint(sbi, cp_start_blk_no, &cp1_version); /* The second checkpoint pack should start at the next segment */ - cp_start_blk_no += 1 << get_sb(log_blocks_per_seg); + cp_start_blk_no += 1 << get_val(sb, log_blocks_per_seg); cp2 = validate_checkpoint(sbi, cp_start_blk_no, &cp2_version); if (cp1 && cp2) { @@ -481,9 +481,9 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) unsigned int i; unsigned long long cp_blk_no; - cp_blk_no = get_sb(cp_blkaddr); + cp_blk_no = get_val(sb, cp_blkaddr); if (cur_page == cp2) - cp_blk_no += 1 << get_sb(log_blocks_per_seg); + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); /* copy sit bitmap */ for (i = 1; i < cp_blks; i++) { @@ -510,12 +510,12 @@ int sanity_check_ckpt(struct f2fs_sb_info *sbi) struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); struct f2fs_checkpoint *cp = F2FS_CKPT(sbi); - total = get_sb(segment_count); - fsmeta = get_sb(segment_count_ckpt); - fsmeta += get_sb(segment_count_sit); - fsmeta += get_sb(segment_count_nat); - fsmeta += get_cp(rsvd_segment_count); - fsmeta += get_sb(segment_count_ssa); + total = get_val(sb, segment_count); + fsmeta = get_val(sb, segment_count_ckpt); + fsmeta += get_val(sb, segment_count_sit); + fsmeta += get_val(sb, segment_count_nat); + fsmeta += get_val(cp, rsvd_segment_count); + fsmeta += get_val(sb, segment_count_ssa); if (fsmeta >= total) return 1; @@ -531,16 +531,16 @@ int init_node_manager(struct f2fs_sb_info *sbi) unsigned char *version_bitmap; unsigned int nat_segs, nat_blocks; - nm_i->nat_blkaddr = get_sb(nat_blkaddr); + nm_i->nat_blkaddr = get_val(sb, nat_blkaddr); /* segment_count_nat includes pair segment so divide to 2. */ - nat_segs = get_sb(segment_count_nat) >> 1; - nat_blocks = nat_segs << get_sb(log_blocks_per_seg); + nat_segs = get_val(sb, segment_count_nat) >> 1; + nat_blocks = nat_segs << get_val(sb, log_blocks_per_seg); nm_i->max_nid = NAT_ENTRY_PER_BLOCK * nat_blocks; nm_i->fcnt = 0; nm_i->nat_cnt = 0; - nm_i->init_scan_nid = get_cp(next_free_nid); - nm_i->next_scan_nid = get_cp(next_free_nid); + nm_i->init_scan_nid = get_val(cp, next_free_nid); + nm_i->next_scan_nid = get_val(cp, next_free_nid); nm_i->bitmap_size = __bitmap_size(sbi, NAT_BITMAP); @@ -597,21 +597,21 @@ int build_sit_info(struct f2fs_sb_info *sbi) return -ENOMEM; } - sit_segs = get_sb(segment_count_sit) >> 1; + sit_segs = get_val(sb, segment_count_sit) >> 1; bitmap_size = __bitmap_size(sbi, SIT_BITMAP); src_bitmap = __bitmap_ptr(sbi, SIT_BITMAP); dst_bitmap = malloc(bitmap_size); memcpy(dst_bitmap, src_bitmap, bitmap_size); - sit_i->sit_base_addr = get_sb(sit_blkaddr); + sit_i->sit_base_addr = get_val(sb, sit_blkaddr); sit_i->sit_blocks = sit_segs << sbi->log_blocks_per_seg; - sit_i->written_valid_blocks = get_cp(valid_block_count); + sit_i->written_valid_blocks = get_val(cp, valid_block_count); sit_i->sit_bitmap = dst_bitmap; sit_i->bitmap_size = bitmap_size; sit_i->dirty_sentries = 0; sit_i->sents_per_block = SIT_ENTRY_PER_BLOCK; - sit_i->elapsed_time = get_cp(elapsed_time); + sit_i->elapsed_time = get_val(cp, elapsed_time); return 0; } @@ -716,13 +716,13 @@ static void read_normal_summaries(struct f2fs_sb_info *sbi, int type) int ret; if (IS_DATASEG(type)) { - segno = get_cp(cur_data_segno[type]); + segno = get_val(cp, cur_data_segno[type]); if (is_set_ckpt_flags(cp, CP_UMOUNT_FLAG)) blk_addr = sum_blk_addr(sbi, NR_CURSEG_TYPE, type); else blk_addr = sum_blk_addr(sbi, NR_CURSEG_DATA_TYPE, type); } else { - segno = get_cp(cur_node_segno[type - CURSEG_HOT_NODE]); + segno = get_val(cp, cur_node_segno[type - CURSEG_HOT_NODE]); if (is_set_ckpt_flags(cp, CP_UMOUNT_FLAG)) blk_addr = sum_blk_addr(sbi, NR_CURSEG_NODE_TYPE, type - CURSEG_HOT_NODE); @@ -803,12 +803,12 @@ static void build_curseg(struct f2fs_sb_info *sbi) array[i].sum_blk = malloc(PAGE_CACHE_SIZE); ASSERT(array[i].sum_blk); if (i <= CURSEG_COLD_DATA) { - blk_off = get_cp(cur_data_blkoff[i]); - segno = get_cp(cur_data_segno[i]); + blk_off = get_val(cp, cur_data_blkoff[i]); + segno = get_val(cp, cur_data_segno[i]); } if (i > CURSEG_COLD_DATA) { - blk_off = get_cp(cur_node_blkoff[i - CURSEG_HOT_NODE]); - segno = get_cp(cur_node_segno[i - CURSEG_HOT_NODE]); + blk_off = get_val(cp, cur_node_blkoff[i - CURSEG_HOT_NODE]); + segno = get_val(cp, cur_node_segno[i - CURSEG_HOT_NODE]); } array[i].segno = segno; array[i].zone = GET_ZONENO_FROM_SEGNO(sbi, segno); @@ -924,7 +924,7 @@ struct f2fs_summary_block *get_sum_block(struct f2fs_sb_info *sbi, ssa_blk = GET_SUM_BLKADDR(sbi, segno); for (type = 0; type < NR_CURSEG_NODE_TYPE; type++) { - if (segno == get_cp(cur_node_segno[type])) { + if (segno == get_val(cp, cur_node_segno[type])) { curseg = CURSEG_I(sbi, CURSEG_HOT_NODE + type); if (!IS_SUM_NODE_SEG(curseg->sum_blk->footer)) { ASSERT_MSG("segno [0x%x] indicates a data " @@ -939,7 +939,7 @@ struct f2fs_summary_block *get_sum_block(struct f2fs_sb_info *sbi, } for (type = 0; type < NR_CURSEG_DATA_TYPE; type++) { - if (segno == get_cp(cur_data_segno[type])) { + if (segno == get_val(cp, cur_data_segno[type])) { curseg = CURSEG_I(sbi, type); if (IS_SUM_NODE_SEG(curseg->sum_blk->footer)) { ASSERT_MSG("segno [0x%x] indicates a node " @@ -1151,13 +1151,13 @@ int build_segment_manager(struct f2fs_sb_info *sbi) /* init sm info */ sbi->sm_info = sm_info; - sm_info->seg0_blkaddr = get_sb(segment0_blkaddr); - sm_info->main_blkaddr = get_sb(main_blkaddr); - sm_info->segment_count = get_sb(segment_count); - sm_info->reserved_segments = get_cp(rsvd_segment_count); - sm_info->ovp_segments = get_cp(overprov_segment_count); - sm_info->main_segments = get_sb(segment_count_main); - sm_info->ssa_blkaddr = get_sb(ssa_blkaddr); + sm_info->seg0_blkaddr = get_val(sb, segment0_blkaddr); + sm_info->main_blkaddr = get_val(sb, main_blkaddr); + sm_info->segment_count = get_val(sb, segment_count); + sm_info->reserved_segments = get_val(cp, rsvd_segment_count); + sm_info->ovp_segments = get_val(cp, overprov_segment_count); + sm_info->main_segments = get_val(sb, segment_count_main); + sm_info->ssa_blkaddr = get_val(sb, ssa_blkaddr); build_sit_info(sbi); @@ -1384,7 +1384,7 @@ void flush_sit_entries(struct f2fs_sb_info *sbi) free_segs++; } - set_cp(free_segment_count, free_segs); + set_val(cp, free_segment_count, free_segs); } int find_next_free_block(struct f2fs_sb_info *sbi, u64 *to, int left, int type) @@ -1487,14 +1487,14 @@ void write_curseg_info(struct f2fs_sb_info *sbi) for (i = 0; i < NO_CHECK_TYPE; i++) { cp->alloc_type[i] = CURSEG_I(sbi, i)->alloc_type; if (i < CURSEG_HOT_NODE) { - set_cp(cur_data_segno[i], CURSEG_I(sbi, i)->segno); - set_cp(cur_data_blkoff[i], + set_val(cp, cur_data_segno[i], CURSEG_I(sbi, i)->segno); + set_val(cp, cur_data_blkoff[i], CURSEG_I(sbi, i)->next_blkoff); } else { int n = i - CURSEG_HOT_NODE; - set_cp(cur_node_segno[n], CURSEG_I(sbi, i)->segno); - set_cp(cur_node_blkoff[n], + set_val(cp, cur_node_segno[n], CURSEG_I(sbi, i)->segno); + set_val(cp, cur_node_blkoff[n], CURSEG_I(sbi, i)->next_blkoff); } } @@ -1578,24 +1578,24 @@ void write_checkpoint(struct f2fs_sb_info *sbi) flags |= CP_ORPHAN_PRESENT_FLAG; } - set_cp(ckpt_flags, flags); + set_val(cp, ckpt_flags, flags); - set_cp(free_segment_count, get_free_segments(sbi)); - set_cp(cp_pack_total_block_count, 8 + orphan_blks + get_sb(cp_payload)); + set_val(cp, free_segment_count, get_free_segments(sbi)); + set_val(cp, cp_pack_total_block_count, 8 + orphan_blks + get_val(sb, cp_payload)); crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); - cp_blk_no = get_sb(cp_blkaddr); + cp_blk_no = get_val(sb, cp_blkaddr); if (sbi->cur_cp == 2) - cp_blk_no += 1 << get_sb(log_blocks_per_seg); + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); /* write the first cp */ ret = dev_write_block(cp, cp_blk_no++); ASSERT(ret >= 0); /* skip payload */ - cp_blk_no += get_sb(cp_payload); + cp_blk_no += get_val(sb, cp_payload); /* skip orphan blocks */ cp_blk_no += orphan_blks; @@ -1635,7 +1635,7 @@ void build_nat_area_bitmap(struct f2fs_sb_info *sbi) ASSERT(nat_block); /* Alloc & build nat entry bitmap */ - nr_nat_blks = (get_sb(segment_count_nat) / 2) << + nr_nat_blks = (get_val(sb, segment_count_nat) / 2) << sbi->log_blocks_per_seg; fsck->nr_nat_entries = nr_nat_blks * NAT_ENTRY_PER_BLOCK; @@ -1731,7 +1731,7 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi) print_ckpt_info(sbi); if (config.auto_fix) { - u32 flag = get_cp(ckpt_flags); + u32 flag = get_val(cp, ckpt_flags); if (flag & CP_FSCK_FLAG) config.fix_on = 1; @@ -1741,10 +1741,10 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi) config.bug_on = 0; - sbi->total_valid_node_count = get_cp(valid_node_count); - sbi->total_valid_inode_count = get_cp(valid_inode_count); - sbi->user_block_count = get_cp(user_block_count); - sbi->total_valid_block_count = get_cp(valid_block_count); + sbi->total_valid_node_count = get_val(cp, valid_node_count); + sbi->total_valid_inode_count = get_val(cp, valid_inode_count); + sbi->user_block_count = get_val(cp, user_block_count); + sbi->total_valid_block_count = get_val(cp, valid_block_count); sbi->last_valid_block_count = sbi->total_valid_block_count; sbi->alloc_valid_block_count = 0; diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h index e1eeb6e..2ab9f49 100644 --- a/include/f2fs_fs.h +++ b/include/f2fs_fs.h @@ -270,60 +270,32 @@ struct f2fs_configuration { #define BIT_MASK(nr) (1 << (nr % BITS_PER_LONG)) #define BIT_WORD(nr) (nr / BITS_PER_LONG) -#define set_sb_le64(member, val) (sb->member = cpu_to_le64(val)) -#define set_sb_le32(member, val) (sb->member = cpu_to_le32(val)) -#define set_sb_le16(member, val) (sb->member = cpu_to_le16(val)) -#define get_sb_le64(member) le64_to_cpu(sb->member) -#define get_sb_le32(member) le32_to_cpu(sb->member) -#define get_sb_le16(member) le16_to_cpu(sb->member) - -#define set_sb(member, val) \ - do { \ - typeof(sb->member) t; \ - switch (sizeof(t)) { \ - case 8: set_sb_le64(member, val); break; \ - case 4: set_sb_le32(member, val); break; \ - case 2: set_sb_le16(member, val); break; \ - } \ +#define set_le64(ptr, member, val) ((ptr)->member = cpu_to_le64(val)) +#define set_le32(ptr, member, val) ((ptr)->member = cpu_to_le32(val)) +#define set_le16(ptr, member, val) ((ptr)->member = cpu_to_le16(val)) +#define get_le64(ptr, member) le64_to_cpu((ptr)->member) +#define get_le32(ptr, member) le32_to_cpu((ptr)->member) +#define get_le16(ptr, member) le16_to_cpu((ptr)->member) + +#define set_val(ptr, member, val) \ + do { \ + typeof((ptr)->member) t; \ + switch (sizeof(t)) { \ + case 8: set_le64(ptr, member, val); break; \ + case 4: set_le32(ptr, member, val); break; \ + case 2: set_le16(ptr, member, val); break; \ + } \ } while(0) -#define get_sb(member) \ - ({ \ - typeof(sb->member) t; \ - switch (sizeof(t)) { \ - case 8: t = get_sb_le64(member); break; \ - case 4: t = get_sb_le32(member); break; \ - case 2: t = get_sb_le16(member); break; \ - } \ - t; \ - }) - -#define set_cp_le64(member, val) (cp->member = cpu_to_le64(val)) -#define set_cp_le32(member, val) (cp->member = cpu_to_le32(val)) -#define set_cp_le16(member, val) (cp->member = cpu_to_le16(val)) -#define get_cp_le64(member) le64_to_cpu(cp->member) -#define get_cp_le32(member) le32_to_cpu(cp->member) -#define get_cp_le16(member) le16_to_cpu(cp->member) - -#define set_cp(member, val) \ - do { \ - typeof(cp->member) t; \ - switch (sizeof(t)) { \ - case 8: set_cp_le64(member, val); break; \ - case 4: set_cp_le32(member, val); break; \ - case 2: set_cp_le16(member, val); break; \ - } \ - } while(0) - -#define get_cp(member) \ - ({ \ - typeof(cp->member) t; \ - switch (sizeof(t)) { \ - case 8: t = get_cp_le64(member); break; \ - case 4: t = get_cp_le32(member); break; \ - case 2: t = get_cp_le16(member); break; \ - } \ - t; \ +#define get_val(ptr, member) \ + ({ \ + typeof((ptr)->member) t; \ + switch (sizeof(t)) { \ + case 8: t = get_le64(ptr, member); break; \ + case 4: t = get_le32(ptr, member); break; \ + case 2: t = get_le16(ptr, member); break; \ + } \ + t; \ }) /* @@ -899,7 +871,7 @@ static inline double get_best_overprovision(struct f2fs_super_block *sb) double reserved, ovp, candidate, end, diff, space; double max_ovp = 0, max_space = 0; - if (get_sb(segment_count_main) < 256) { + if (get_val(sb, segment_count_main) < 256) { candidate = 10; end = 95; diff = 5; @@ -911,9 +883,9 @@ static inline double get_best_overprovision(struct f2fs_super_block *sb) for (; candidate <= end; candidate += diff) { reserved = (2 * (100 / candidate + 1) + 6) * - get_sb(segs_per_sec); - ovp = (get_sb(segment_count_main) - reserved) * candidate / 100; - space = get_sb(segment_count_main) - reserved - ovp; + get_val(sb, segs_per_sec); + ovp = (get_val(sb, segment_count_main) - reserved) * candidate / 100; + space = get_val(sb, segment_count_main) - reserved - ovp; if (max_space < space) { max_space = space; max_ovp = candidate; diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c index 645c2aa..db5348e 100644 --- a/mkfs/f2fs_format.c +++ b/mkfs/f2fs_format.c @@ -83,7 +83,7 @@ static void configure_extension_list(void) int name_len; int i = 0; - set_sb(extension_count, 0); + set_val(sb, extension_count, 0); memset(sb->extension_list, 0, sizeof(sb->extension_list)); while (*extlist) { @@ -91,7 +91,7 @@ static void configure_extension_list(void) memcpy(sb->extension_list[i++], *extlist, name_len); extlist++; } - set_sb(extension_count, i); + set_val(sb, extension_count, i); if (!ext_str) return; @@ -112,7 +112,7 @@ next: break; } - set_sb(extension_count, i); + set_val(sb, extension_count, i); free(config.extension_list); } @@ -132,23 +132,23 @@ static int f2fs_prepare_super_block(void) u_int32_t max_nat_bitmap_size, max_nat_segments; u_int32_t total_zones; - set_sb(magic, F2FS_SUPER_MAGIC); - set_sb(major_ver, F2FS_MAJOR_VERSION); - set_sb(minor_ver, F2FS_MINOR_VERSION); + set_val(sb, magic, F2FS_SUPER_MAGIC); + set_val(sb, major_ver, F2FS_MAJOR_VERSION); + set_val(sb, minor_ver, F2FS_MINOR_VERSION); log_sectorsize = log_base_2(config.sector_size); log_sectors_per_block = log_base_2(config.sectors_per_blk); log_blocksize = log_sectorsize + log_sectors_per_block; log_blks_per_seg = log_base_2(config.blks_per_seg); - set_sb(log_sectorsize, log_sectorsize); - set_sb(log_sectors_per_block, log_sectors_per_block); + set_val(sb, log_sectorsize, log_sectorsize); + set_val(sb, log_sectors_per_block, log_sectors_per_block); - set_sb(log_blocksize, log_blocksize); - set_sb(log_blocks_per_seg, log_blks_per_seg); + set_val(sb, log_blocksize, log_blocksize); + set_val(sb, log_blocks_per_seg, log_blks_per_seg); - set_sb(segs_per_sec, config.segs_per_sec); - set_sb(secs_per_zone, config.secs_per_zone); + set_val(sb, segs_per_sec, config.segs_per_sec); + set_val(sb, secs_per_zone, config.secs_per_zone); blk_size_bytes = 1 << log_blocksize; segment_size_bytes = blk_size_bytes * config.blks_per_seg; @@ -156,9 +156,9 @@ static int f2fs_prepare_super_block(void) blk_size_bytes * config.secs_per_zone * config.segs_per_sec * config.blks_per_seg; - set_sb(checksum_offset, 0); + set_val(sb, checksum_offset, 0); - set_sb(block_count, config.total_sectors >> log_sectors_per_block); + set_val(sb, block_count, config.total_sectors >> log_sectors_per_block); zone_align_start_offset = (config.start_sector * config.sector_size + @@ -174,41 +174,41 @@ static int f2fs_prepare_super_block(void) config.sectors_per_blk); } - set_sb(segment_count, (config.total_sectors * config.sector_size - + set_val(sb, segment_count, (config.total_sectors * config.sector_size - zone_align_start_offset) / segment_size_bytes); - set_sb(segment0_blkaddr, zone_align_start_offset / blk_size_bytes); + set_val(sb, segment0_blkaddr, zone_align_start_offset / blk_size_bytes); sb->cp_blkaddr = sb->segment0_blkaddr; - MSG(0, "Info: zone aligned segment0 blkaddr: %u\n", get_sb(segment0_blkaddr)); + MSG(0, "Info: zone aligned segment0 blkaddr: %u\n", get_val(sb, segment0_blkaddr)); - set_sb(segment_count_ckpt, F2FS_NUMBER_OF_CHECKPOINT_PACK); + set_val(sb, segment_count_ckpt, F2FS_NUMBER_OF_CHECKPOINT_PACK); - set_sb(sit_blkaddr, get_sb(segment0_blkaddr) + get_sb(segment_count_ckpt) * + set_val(sb, sit_blkaddr, get_val(sb, segment0_blkaddr) + get_val(sb, segment_count_ckpt) * config.blks_per_seg); - blocks_for_sit = ALIGN(get_sb(segment_count), SIT_ENTRY_PER_BLOCK); + blocks_for_sit = ALIGN(get_val(sb, segment_count), SIT_ENTRY_PER_BLOCK); sit_segments = SEG_ALIGN(blocks_for_sit); - set_sb(segment_count_sit, sit_segments * 2); + set_val(sb, segment_count_sit, sit_segments * 2); - set_sb(nat_blkaddr, get_sb(sit_blkaddr) + get_sb(segment_count_sit) * + set_val(sb, nat_blkaddr, get_val(sb, sit_blkaddr) + get_val(sb, segment_count_sit) * config.blks_per_seg); - total_valid_blks_available = (get_sb(segment_count) - - (get_sb(segment_count_ckpt) + get_sb(segment_count_sit))) * + total_valid_blks_available = (get_val(sb, segment_count) - + (get_val(sb, segment_count_ckpt) + get_val(sb, segment_count_sit))) * config.blks_per_seg; blocks_for_nat = ALIGN(total_valid_blks_available, NAT_ENTRY_PER_BLOCK); - set_sb(segment_count_nat, SEG_ALIGN(blocks_for_nat)); + set_val(sb, segment_count_nat, SEG_ALIGN(blocks_for_nat)); /* * The number of node segments should not be exceeded a "Threshold". * This number resizes NAT bitmap area in a CP page. * So the threshold is determined not to overflow one CP page */ - sit_bitmap_size = ((get_sb(segment_count_sit) / 2) << + sit_bitmap_size = ((get_val(sb, segment_count_sit) / 2) << log_blks_per_seg) / 8; if (sit_bitmap_size > MAX_SIT_BITMAP_SIZE) @@ -223,55 +223,55 @@ static int f2fs_prepare_super_block(void) if (max_sit_bitmap_size > (CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1 - 64)) { max_nat_bitmap_size = CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1; - set_sb(cp_payload, F2FS_BLK_ALIGN(max_sit_bitmap_size)); + set_val(sb, cp_payload, F2FS_BLK_ALIGN(max_sit_bitmap_size)); } else { max_nat_bitmap_size = CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1 - max_sit_bitmap_size; - set_sb(cp_payload, 0); + set_val(sb, cp_payload, 0); } max_nat_segments = (max_nat_bitmap_size * 8) >> log_blks_per_seg; - if (get_sb(segment_count_nat) > max_nat_segments) - set_sb(segment_count_nat, max_nat_segments); + if (get_val(sb, segment_count_nat) > max_nat_segments) + set_val(sb, segment_count_nat, max_nat_segments); - set_sb(segment_count_nat, get_sb(segment_count_nat) * 2); + set_val(sb, segment_count_nat, get_val(sb, segment_count_nat) * 2); - set_sb(ssa_blkaddr, get_sb(nat_blkaddr) + get_sb(segment_count_nat) * + set_val(sb, ssa_blkaddr, get_val(sb, nat_blkaddr) + get_val(sb, segment_count_nat) * config.blks_per_seg); - total_valid_blks_available = (get_sb(segment_count) - - (get_sb(segment_count_ckpt) + - get_sb(segment_count_sit) + - get_sb(segment_count_nat))) * + total_valid_blks_available = (get_val(sb, segment_count) - + (get_val(sb, segment_count_ckpt) + + get_val(sb, segment_count_sit) + + get_val(sb, segment_count_nat))) * config.blks_per_seg; blocks_for_ssa = total_valid_blks_available / config.blks_per_seg + 1; - set_sb(segment_count_ssa, SEG_ALIGN(blocks_for_ssa)); + set_val(sb, segment_count_ssa, SEG_ALIGN(blocks_for_ssa)); - total_meta_segments = get_sb(segment_count_ckpt) + - get_sb(segment_count_sit) + - get_sb(segment_count_nat) + - get_sb(segment_count_ssa); + total_meta_segments = get_val(sb, segment_count_ckpt) + + get_val(sb, segment_count_sit) + + get_val(sb, segment_count_nat) + + get_val(sb, segment_count_ssa); diff = total_meta_segments % (config.segs_per_zone); if (diff) - set_sb(segment_count_ssa, get_sb(segment_count_ssa) + + set_val(sb, segment_count_ssa, get_val(sb, segment_count_ssa) + (config.segs_per_zone - diff)); total_meta_zones = ZONE_ALIGN(total_meta_segments * config.blks_per_seg); - set_sb(main_blkaddr, get_sb(segment0_blkaddr) + total_meta_zones * + set_val(sb, main_blkaddr, get_val(sb, segment0_blkaddr) + total_meta_zones * config.segs_per_zone * config.blks_per_seg); - total_zones = get_sb(segment_count) / (config.segs_per_zone) - + total_zones = get_val(sb, segment_count) / (config.segs_per_zone) - total_meta_zones; - set_sb(section_count, total_zones * config.secs_per_zone); + set_val(sb, section_count, total_zones * config.secs_per_zone); - set_sb(segment_count_main, get_sb(section_count) * config.segs_per_sec); + set_val(sb, segment_count_main, get_val(sb, section_count) * config.segs_per_sec); /* Let's determine the best reserved and overprovisioned space */ if (config.overprovision == 0) @@ -281,12 +281,12 @@ static int f2fs_prepare_super_block(void) (2 * (100 / config.overprovision + 1) + 6) * config.segs_per_sec; - if ((get_sb(segment_count_main) - 2) < + if ((get_val(sb, segment_count_main) - 2) < config.reserved_segments) { MSG(1, "\tError: Device size is not sufficient for F2FS volume,\ more segment needed =%u", config.reserved_segments - - (get_sb(segment_count_main) - 2)); + (get_val(sb, segment_count_main) - 2)); return -1; } @@ -294,9 +294,9 @@ static int f2fs_prepare_super_block(void) utf8_to_utf16(sb->volume_name, (const char *)config.vol_label, MAX_VOLUME_NAME, strlen(config.vol_label)); - set_sb(node_ino, 1); - set_sb(meta_ino, 2); - set_sb(root_ino, 3); + set_val(sb, node_ino, 1); + set_val(sb, meta_ino, 2); + set_val(sb, root_ino, 3); if (total_zones <= 6) { MSG(1, "\tError: %d zones: Need more zones \ @@ -346,8 +346,8 @@ static int f2fs_init_sit_area(void) u_int64_t sit_seg_addr = 0; u_int8_t *zero_buf = NULL; - blk_size = 1 << get_sb(log_blocksize); - seg_size = (1 << get_sb(log_blocks_per_seg)) * blk_size; + blk_size = 1 << get_val(sb, log_blocksize); + seg_size = (1 << get_val(sb, log_blocks_per_seg)) * blk_size; zero_buf = calloc(sizeof(u_int8_t), seg_size); if(zero_buf == NULL) { @@ -355,11 +355,11 @@ static int f2fs_init_sit_area(void) return -1; } - sit_seg_addr = get_sb(sit_blkaddr); + sit_seg_addr = get_val(sb, sit_blkaddr); sit_seg_addr *= blk_size; DBG(1, "\tFilling sit area at offset 0x%08"PRIx64"\n", sit_seg_addr); - for (index = 0; index < (get_sb(segment_count_sit) / 2); index++) { + for (index = 0; index < (get_val(sb, segment_count_sit) / 2); index++) { if (dev_fill(zero_buf, sit_seg_addr, seg_size)) { MSG(1, "\tError: While zeroing out the sit area \ on disk!!!\n"); @@ -380,8 +380,8 @@ static int f2fs_init_nat_area(void) u_int64_t nat_seg_addr = 0; u_int8_t *nat_buf = NULL; - blk_size = 1 << get_sb(log_blocksize); - seg_size = (1 << get_sb(log_blocks_per_seg)) * blk_size; + blk_size = 1 << get_val(sb, log_blocksize); + seg_size = (1 << get_val(sb, log_blocks_per_seg)) * blk_size; nat_buf = calloc(sizeof(u_int8_t), seg_size); if (nat_buf == NULL) { @@ -389,11 +389,11 @@ static int f2fs_init_nat_area(void) return -1; } - nat_seg_addr = get_sb(nat_blkaddr); + nat_seg_addr = get_val(sb, nat_blkaddr); nat_seg_addr *= blk_size; DBG(1, "\tFilling nat area at offset 0x%08"PRIx64"\n", nat_seg_addr); - for (index = 0; index < get_sb(segment_count_nat) / 2; index++) { + for (index = 0; index < get_val(sb, segment_count_nat) / 2; index++) { if (dev_fill(nat_buf, nat_seg_addr, seg_size)) { MSG(1, "\tError: While zeroing out the nat area \ on disk!!!\n"); @@ -445,58 +445,58 @@ static int f2fs_write_check_point_pack(void) } /* 1. cp page 1 of checkpoint pack 1 */ - set_cp(checkpoint_ver, 1); - set_cp(cur_node_segno[0], config.cur_seg[CURSEG_HOT_NODE]); - set_cp(cur_node_segno[1], config.cur_seg[CURSEG_WARM_NODE]); - set_cp(cur_node_segno[2], config.cur_seg[CURSEG_COLD_NODE]); - set_cp(cur_data_segno[0], config.cur_seg[CURSEG_HOT_DATA]); - set_cp(cur_data_segno[1], config.cur_seg[CURSEG_WARM_DATA]); - set_cp(cur_data_segno[2], config.cur_seg[CURSEG_COLD_DATA]); + set_val(cp, checkpoint_ver, 1); + set_val(cp, cur_node_segno[0], config.cur_seg[CURSEG_HOT_NODE]); + set_val(cp, cur_node_segno[1], config.cur_seg[CURSEG_WARM_NODE]); + set_val(cp, cur_node_segno[2], config.cur_seg[CURSEG_COLD_NODE]); + set_val(cp, cur_data_segno[0], config.cur_seg[CURSEG_HOT_DATA]); + set_val(cp, cur_data_segno[1], config.cur_seg[CURSEG_WARM_DATA]); + set_val(cp, cur_data_segno[2], config.cur_seg[CURSEG_COLD_DATA]); for (i = 3; i < MAX_ACTIVE_NODE_LOGS; i++) { - set_cp(cur_node_segno[i], 0xffffffff); - set_cp(cur_data_segno[i], 0xffffffff); + set_val(cp, cur_node_segno[i], 0xffffffff); + set_val(cp, cur_data_segno[i], 0xffffffff); } - set_cp(cur_node_blkoff[0], 1); - set_cp(cur_data_blkoff[0], 1); - set_cp(valid_block_count, 2); - set_cp(rsvd_segment_count, config.reserved_segments); - set_cp(overprov_segment_count, (get_sb(segment_count_main) - - get_cp(rsvd_segment_count)) * + set_val(cp, cur_node_blkoff[0], 1); + set_val(cp, cur_data_blkoff[0], 1); + set_val(cp, valid_block_count, 2); + set_val(cp, rsvd_segment_count, config.reserved_segments); + set_val(cp, overprov_segment_count, (get_val(sb, segment_count_main) - + get_val(cp, rsvd_segment_count)) * config.overprovision / 100); - set_cp(overprov_segment_count, get_cp(overprov_segment_count) + - get_cp(rsvd_segment_count)); + set_val(cp, overprov_segment_count, get_val(cp, overprov_segment_count) + + get_val(cp, rsvd_segment_count)); MSG(0, "Info: Overprovision ratio = %.3lf%%\n", config.overprovision); MSG(0, "Info: Overprovision segments = %u (GC reserved = %u)\n", - get_cp(overprov_segment_count), + get_val(cp, overprov_segment_count), config.reserved_segments); /* main segments - reserved segments - (node + data segments) */ - set_cp(free_segment_count, get_sb(segment_count_main) - 6); - set_cp(user_block_count, ((get_cp(free_segment_count) + 6 - - get_cp(overprov_segment_count)) * config.blks_per_seg)); + set_val(cp, free_segment_count, get_val(sb, segment_count_main) - 6); + set_val(cp, user_block_count, ((get_val(cp, free_segment_count) + 6 - + get_val(cp, overprov_segment_count)) * config.blks_per_seg)); /* cp page (2), data summaries (1), node summaries (3) */ - set_cp(cp_pack_total_block_count, 6 + get_sb(cp_payload)); - set_cp(ckpt_flags, CP_UMOUNT_FLAG | CP_COMPACT_SUM_FLAG); - set_cp(cp_pack_start_sum, 1 + get_sb(cp_payload)); - set_cp(valid_node_count, 1); - set_cp(valid_inode_count, 1); - set_cp(next_free_nid, get_sb(root_ino) + 1); - set_cp(sit_ver_bitmap_bytesize, ((get_sb(segment_count_sit) / 2) << - get_sb(log_blocks_per_seg)) / 8); + set_val(cp, cp_pack_total_block_count, 6 + get_val(sb, cp_payload)); + set_val(cp, ckpt_flags, CP_UMOUNT_FLAG | CP_COMPACT_SUM_FLAG); + set_val(cp, cp_pack_start_sum, 1 + get_val(sb, cp_payload)); + set_val(cp, valid_node_count, 1); + set_val(cp, valid_inode_count, 1); + set_val(cp, next_free_nid, get_val(sb, root_ino) + 1); + set_val(cp, sit_ver_bitmap_bytesize, ((get_val(sb, segment_count_sit) / 2) << + get_val(sb, log_blocks_per_seg)) / 8); - set_cp(nat_ver_bitmap_bytesize, ((get_sb(segment_count_nat) / 2) << - get_sb(log_blocks_per_seg)) / 8); + set_val(cp, nat_ver_bitmap_bytesize, ((get_val(sb, segment_count_nat) / 2) << + get_val(sb, log_blocks_per_seg)) / 8); - set_cp(checksum_offset, CHECKSUM_OFFSET); + set_val(cp, checksum_offset, CHECKSUM_OFFSET); crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); - blk_size_bytes = 1 << get_sb(log_blocksize); - cp_seg_blk_offset = get_sb(segment0_blkaddr); + blk_size_bytes = 1 << get_val(sb, log_blocksize); + cp_seg_blk_offset = get_val(sb, segment0_blkaddr); cp_seg_blk_offset *= blk_size_bytes; DBG(1, "\tWriting main segments, cp at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); @@ -505,7 +505,7 @@ static int f2fs_write_check_point_pack(void) goto free_cp_payload; } - for (i = 0; i < get_sb(cp_payload); i++) { + for (i = 0; i < get_val(sb, cp_payload); i++) { cp_seg_blk_offset += blk_size_bytes; if (dev_fill(cp_payload, cp_seg_blk_offset, blk_size_bytes)) { MSG(1, "\tError: While zeroing out the sit bitmap area \ @@ -537,8 +537,8 @@ static int f2fs_write_check_point_pack(void) sum->nat_j.entries[0].ne.version = 0; sum->nat_j.entries[0].ne.ino = sb->root_ino; sum->nat_j.entries[0].ne.block_addr = cpu_to_le32( - get_sb(main_blkaddr) + - get_cp(cur_node_segno[0]) * config.blks_per_seg); + get_val(sb, main_blkaddr) + + get_val(cp, cur_node_segno[0]) * config.blks_per_seg); memcpy(sum_compact_p, &sum->n_nats, SUM_JOURNAL_SIZE); sum_compact_p += SUM_JOURNAL_SIZE; @@ -635,7 +635,7 @@ static int f2fs_write_check_point_pack(void) crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); - cp_seg_blk_offset = (get_sb(segment0_blkaddr) + + cp_seg_blk_offset = (get_val(sb, segment0_blkaddr) + config.blks_per_seg) * blk_size_bytes; DBG(1, "\tWriting cp page 1 of checkpoint pack 2, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); @@ -644,7 +644,7 @@ static int f2fs_write_check_point_pack(void) goto free_cp_payload; } - for (i = 0; i < get_sb(cp_payload); i++) { + for (i = 0; i < get_val(sb, cp_payload); i++) { cp_seg_blk_offset += blk_size_bytes; if (dev_fill(cp_payload, cp_seg_blk_offset, blk_size_bytes)) { MSG(1, "\tError: While zeroing out the sit bitmap area \ @@ -655,7 +655,7 @@ static int f2fs_write_check_point_pack(void) /* cp page 2 of check point pack 2 */ cp_seg_blk_offset += blk_size_bytes * (le32_to_cpu(cp->cp_pack_total_block_count) - - get_sb(cp_payload) - 1); + - get_val(sb, cp_payload) - 1); DBG(1, "\tWriting cp page 2 of checkpoint pack 2, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); if (dev_write(cp, cp_seg_blk_offset, blk_size_bytes)) { MSG(1, "\tError: While writing the cp to disk!!!\n"); @@ -701,8 +701,8 @@ static int f2fs_write_super_block(void) static int discard_obsolete_dnode(struct f2fs_node *raw_node, u_int64_t offset) { do { - if (offset < get_sb(main_blkaddr) || - offset >= get_sb(main_blkaddr) + get_sb(block_count)) + if (offset < get_val(sb, main_blkaddr) || + offset >= get_val(sb, main_blkaddr) + get_val(sb, block_count)) break; if (dev_read_block(raw_node, offset)) { @@ -740,7 +740,7 @@ static int f2fs_write_root_inode(void) raw_node->footer.ino = sb->root_ino; raw_node->footer.cp_ver = cpu_to_le64(1); raw_node->footer.next_blkaddr = cpu_to_le32( - get_sb(main_blkaddr) + + get_val(sb, main_blkaddr) + config.cur_seg[CURSEG_HOT_NODE] * config.blks_per_seg + 1); @@ -749,7 +749,7 @@ static int f2fs_write_root_inode(void) raw_node->i.i_uid = cpu_to_le32(getuid()); raw_node->i.i_gid = cpu_to_le32(getgid()); - blk_size_bytes = 1 << get_sb(log_blocksize); + blk_size_bytes = 1 << get_val(sb, log_blocksize); raw_node->i.i_size = cpu_to_le64(1 * blk_size_bytes); /* dentry */ raw_node->i.i_blocks = cpu_to_le64(2); @@ -765,7 +765,7 @@ static int f2fs_write_root_inode(void) raw_node->i.i_current_depth = cpu_to_le32(1); raw_node->i.i_dir_level = DEF_DIR_LEVEL; - data_blk_nor = get_sb(main_blkaddr) + + data_blk_nor = get_val(sb, main_blkaddr) + config.cur_seg[CURSEG_HOT_DATA] * config.blks_per_seg; raw_node->i.i_addr[0] = cpu_to_le32(data_blk_nor); @@ -773,7 +773,7 @@ static int f2fs_write_root_inode(void) raw_node->i.i_ext.blk_addr = 0; raw_node->i.i_ext.len = 0; - main_area_node_seg_blk_offset = get_sb(main_blkaddr); + main_area_node_seg_blk_offset = get_val(sb, main_blkaddr); main_area_node_seg_blk_offset += config.cur_seg[CURSEG_HOT_NODE] * config.blks_per_seg; main_area_node_seg_blk_offset *= blk_size_bytes; @@ -786,7 +786,7 @@ static int f2fs_write_root_inode(void) } /* avoid power-off-recovery based on roll-forward policy */ - main_area_node_seg_blk_offset = get_sb(main_blkaddr); + main_area_node_seg_blk_offset = get_val(sb, main_blkaddr); main_area_node_seg_blk_offset += config.cur_seg[CURSEG_WARM_NODE] * config.blks_per_seg; @@ -813,21 +813,21 @@ static int f2fs_update_nat_root(void) } /* update root */ - nat_blk->entries[get_sb(root_ino)].block_addr = cpu_to_le32( - get_sb(main_blkaddr) + + nat_blk->entries[get_val(sb, root_ino)].block_addr = cpu_to_le32( + get_val(sb, main_blkaddr) + config.cur_seg[CURSEG_HOT_NODE] * config.blks_per_seg); - nat_blk->entries[get_sb(root_ino)].ino = sb->root_ino; + nat_blk->entries[get_val(sb, root_ino)].ino = sb->root_ino; /* update node nat */ - nat_blk->entries[get_sb(node_ino)].block_addr = cpu_to_le32(1); - nat_blk->entries[get_sb(node_ino)].ino = sb->node_ino; + nat_blk->entries[get_val(sb, node_ino)].block_addr = cpu_to_le32(1); + nat_blk->entries[get_val(sb, node_ino)].ino = sb->node_ino; /* update meta nat */ - nat_blk->entries[get_sb(meta_ino)].block_addr = cpu_to_le32(1); - nat_blk->entries[get_sb(meta_ino)].ino = sb->meta_ino; + nat_blk->entries[get_val(sb, meta_ino)].block_addr = cpu_to_le32(1); + nat_blk->entries[get_val(sb, meta_ino)].ino = sb->meta_ino; - blk_size_bytes = 1 << get_sb(log_blocksize); - nat_seg_blk_offset = get_sb(nat_blkaddr); + blk_size_bytes = 1 << get_val(sb, log_blocksize); + nat_seg_blk_offset = get_val(sb, nat_blkaddr); nat_seg_blk_offset *= blk_size_bytes; DBG(1, "\tWriting nat root, at offset 0x%08"PRIx64"\n", nat_seg_blk_offset); @@ -867,8 +867,8 @@ static int f2fs_add_default_dentry_root(void) /* bitmap for . and .. */ test_and_set_bit_le(0, dent_blk->dentry_bitmap); test_and_set_bit_le(1, dent_blk->dentry_bitmap); - blk_size_bytes = 1 << get_sb(log_blocksize); - data_blk_offset = get_sb(main_blkaddr); + blk_size_bytes = 1 << get_val(sb, log_blocksize); + data_blk_offset = get_val(sb, main_blkaddr); data_blk_offset += config.cur_seg[CURSEG_HOT_DATA] * config.blks_per_seg; data_blk_offset *= blk_size_bytes; -- 1.9.1 ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [RFC PATCH 1/4] f2fs-tools: simplify get_{sb|cp} and set_{sb|cp} 2016-01-30 9:16 ` [RFC PATCH 1/4] f2fs-tools: simplify get_{sb|cp} and set_{sb|cp} Sheng Yong @ 2016-01-30 1:46 ` Jaegeuk Kim 2016-01-30 2:25 ` Sheng Yong 0 siblings, 1 reply; 9+ messages in thread From: Jaegeuk Kim @ 2016-01-30 1:46 UTC (permalink / raw) To: Sheng Yong; +Cc: linux-f2fs-devel Hi Sheng, This is not a good way. You're asking to change all the pending patches as well. Why not just adding two definitions like these? #define get_sb(member) get_val(sb, member) #define set_sb(member, val) set_sb(sb, member, val) #define get_cp(member) get_val(cp, member) #define set_cp(member, val) set_sb(cp, member, val) Thanks, On Sat, Jan 30, 2016 at 09:16:36AM +0000, Sheng Yong wrote: > * Remove dumplicated definitions of get_{sb|cp} and set_{sb|cp}, and introduce > micros get_val and set_val instead. > * Add a new parameter to get_val and set_val so that they are not depended on > implied definition of `sb' and `cp'. > > Signed-off-by: Sheng Yong <shengyong1@huawei.com> > --- > fsck/fsck.c | 20 ++--- > fsck/main.c | 8 +- > fsck/mount.c | 146 ++++++++++++++++----------------- > include/f2fs_fs.h | 84 +++++++------------ > mkfs/f2fs_format.c | 234 ++++++++++++++++++++++++++--------------------------- > 5 files changed, 232 insertions(+), 260 deletions(-) > > diff --git a/fsck/fsck.c b/fsck/fsck.c > index e7dd02f..4fbb56d 100644 > --- a/fsck/fsck.c > +++ b/fsck/fsck.c > @@ -1191,7 +1191,7 @@ void fsck_chk_orphan_node(struct f2fs_sb_info *sbi) > if (!is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ORPHAN_PRESENT_FLAG)) > return; > > - start_blk = __start_cp_addr(sbi) + 1 + get_sb(cp_payload); > + start_blk = __start_cp_addr(sbi) + 1 + get_val(sb, cp_payload); > orphan_blkaddr = __start_sum_addr(sbi) - 1; > > orphan_blk = calloc(BLOCK_SZ, 1); > @@ -1324,25 +1324,25 @@ static void fix_checkpoint(struct f2fs_sb_info *sbi) > flags |= CP_ORPHAN_PRESENT_FLAG; > } > > - set_cp(ckpt_flags, flags); > - set_cp(cp_pack_total_block_count, 8 + orphan_blks + get_sb(cp_payload)); > + set_val(cp, ckpt_flags, flags); > + set_val(cp, cp_pack_total_block_count, 8 + orphan_blks + get_val(sb, cp_payload)); > > - set_cp(free_segment_count, fsck->chk.free_segs); > - set_cp(valid_block_count, fsck->chk.valid_blk_cnt); > - set_cp(valid_node_count, fsck->chk.valid_node_cnt); > - set_cp(valid_inode_count, fsck->chk.valid_inode_cnt); > + set_val(cp, free_segment_count, fsck->chk.free_segs); > + set_val(cp, valid_block_count, fsck->chk.valid_blk_cnt); > + set_val(cp, valid_node_count, fsck->chk.valid_node_cnt); > + set_val(cp, valid_inode_count, fsck->chk.valid_inode_cnt); > > crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); > *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); > > - cp_blk_no = get_sb(cp_blkaddr); > + cp_blk_no = get_val(sb, cp_blkaddr); > if (sbi->cur_cp == 2) > - cp_blk_no += 1 << get_sb(log_blocks_per_seg); > + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); > > ret = dev_write_block(cp, cp_blk_no++); > ASSERT(ret >= 0); > > - for (i = 0; i < get_sb(cp_payload); i++) { > + for (i = 0; i < get_val(sb, cp_payload); i++) { > ret = dev_write_block(((unsigned char *)cp) + i * F2FS_BLKSIZE, > cp_blk_no++); > ASSERT(ret >= 0); > diff --git a/fsck/main.c b/fsck/main.c > index 54dbb2d..7fcaa5d 100644 > --- a/fsck/main.c > +++ b/fsck/main.c > @@ -255,7 +255,7 @@ static int do_defrag(struct f2fs_sb_info *sbi) > { > struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); > > - if (config.defrag_start > get_sb(block_count)) > + if (config.defrag_start > get_val(sb, block_count)) > goto out_range; > if (config.defrag_start < SM_I(sbi)->main_blkaddr) > config.defrag_start = SM_I(sbi)->main_blkaddr; > @@ -263,8 +263,8 @@ static int do_defrag(struct f2fs_sb_info *sbi) > if (config.defrag_len == 0) > config.defrag_len = sbi->blocks_per_seg; > > - if (config.defrag_start + config.defrag_len > get_sb(block_count)) > - config.defrag_len = get_sb(block_count) - config.defrag_start; > + if (config.defrag_start + config.defrag_len > get_val(sb, block_count)) > + config.defrag_len = get_val(sb, block_count) - config.defrag_start; > > if (config.defrag_target == 0) { > config.defrag_target = config.defrag_start - 1; > @@ -273,7 +273,7 @@ static int do_defrag(struct f2fs_sb_info *sbi) > } > > if (config.defrag_target < SM_I(sbi)->main_blkaddr || > - config.defrag_target > get_sb(block_count)) > + config.defrag_target > get_val(sb, block_count)) > goto out_range; > if (config.defrag_target >= config.defrag_start && > config.defrag_target < config.defrag_start + config.defrag_len) > diff --git a/fsck/mount.c b/fsck/mount.c > index 4c807f9..6e6d230 100644 > --- a/fsck/mount.c > +++ b/fsck/mount.c > @@ -269,21 +269,21 @@ int sanity_check_raw_super(struct f2fs_super_block *sb) > { > unsigned int blocksize; > > - if (F2FS_SUPER_MAGIC != get_sb(magic)) > + if (F2FS_SUPER_MAGIC != get_val(sb, magic)) > return -1; > > if (F2FS_BLKSIZE != PAGE_CACHE_SIZE) > return -1; > > - blocksize = 1 << get_sb(log_blocksize); > + blocksize = 1 << get_val(sb, log_blocksize); > if (F2FS_BLKSIZE != blocksize) > return -1; > > - if (get_sb(log_sectorsize) > F2FS_MAX_LOG_SECTOR_SIZE || > - get_sb(log_sectorsize) < F2FS_MIN_LOG_SECTOR_SIZE) > + if (get_val(sb, log_sectorsize) > F2FS_MAX_LOG_SECTOR_SIZE || > + get_val(sb, log_sectorsize) < F2FS_MIN_LOG_SECTOR_SIZE) > return -1; > > - if (get_sb(log_sectors_per_block) + get_sb(log_sectorsize) != > + if (get_val(sb, log_sectors_per_block) + get_val(sb, log_sectorsize) != > F2FS_MAX_LOG_SECTOR_SIZE) > return -1; > > @@ -350,22 +350,22 @@ int init_sb_info(struct f2fs_sb_info *sbi) > struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); > u64 total_sectors; > > - sbi->log_sectors_per_block = get_sb(log_sectors_per_block); > - sbi->log_blocksize = get_sb(log_blocksize); > + sbi->log_sectors_per_block = get_val(sb, log_sectors_per_block); > + sbi->log_blocksize = get_val(sb, log_blocksize); > sbi->blocksize = 1 << sbi->log_blocksize; > - sbi->log_blocks_per_seg = get_sb(log_blocks_per_seg); > + sbi->log_blocks_per_seg = get_val(sb, log_blocks_per_seg); > sbi->blocks_per_seg = 1 << sbi->log_blocks_per_seg; > - sbi->segs_per_sec = get_sb(segs_per_sec); > - sbi->secs_per_zone = get_sb(secs_per_zone); > - sbi->total_sections = get_sb(section_count); > - sbi->total_node_count = (get_sb(segment_count_nat) / 2) * > + sbi->segs_per_sec = get_val(sb, segs_per_sec); > + sbi->secs_per_zone = get_val(sb, secs_per_zone); > + sbi->total_sections = get_val(sb, section_count); > + sbi->total_node_count = (get_val(sb, segment_count_nat) / 2) * > sbi->blocks_per_seg * NAT_ENTRY_PER_BLOCK; > - sbi->root_ino_num = get_sb(root_ino); > - sbi->node_ino_num = get_sb(node_ino); > - sbi->meta_ino_num = get_sb(meta_ino); > + sbi->root_ino_num = get_val(sb, root_ino); > + sbi->node_ino_num = get_val(sb, node_ino); > + sbi->meta_ino_num = get_val(sb, meta_ino); > sbi->cur_victim_sec = NULL_SEGNO; > > - total_sectors = get_sb(block_count) << sbi->log_sectors_per_block; > + total_sectors = get_val(sb, block_count) << sbi->log_sectors_per_block; > MSG(0, "Info: total FS sectors = %"PRIu64" (%"PRIu64" MB)\n", > total_sectors, total_sectors >> 11); > return 0; > @@ -387,7 +387,7 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, > return NULL; > > cp = (struct f2fs_checkpoint *)cp_page_1; > - crc_offset = get_cp(checksum_offset); > + crc_offset = get_val(cp, checksum_offset); > if (crc_offset >= blk_size) > goto invalid_cp1; > > @@ -395,17 +395,17 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, > if (f2fs_crc_valid(crc, cp, crc_offset)) > goto invalid_cp1; > > - pre_version = get_cp(checkpoint_ver); > + pre_version = get_val(cp, checkpoint_ver); > > /* Read the 2nd cp block in this CP pack */ > cp_page_2 = malloc(PAGE_SIZE); > - cp_addr += get_cp(cp_pack_total_block_count) - 1; > + cp_addr += get_val(cp, cp_pack_total_block_count) - 1; > > if (dev_read_block(cp_page_2, cp_addr) < 0) > goto invalid_cp2; > > cp = (struct f2fs_checkpoint *)cp_page_2; > - crc_offset = get_cp(checksum_offset); > + crc_offset = get_val(cp, checksum_offset); > if (crc_offset >= blk_size) > goto invalid_cp2; > > @@ -413,7 +413,7 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, > if (f2fs_crc_valid(crc, cp, crc_offset)) > goto invalid_cp2; > > - cur_version = get_cp(checkpoint_ver); > + cur_version = get_val(cp, checkpoint_ver); > > if (cur_version == pre_version) { > *version = cur_version; > @@ -435,7 +435,7 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) > unsigned long blk_size = sbi->blocksize; > unsigned long long cp1_version = 0, cp2_version = 0, version; > unsigned long long cp_start_blk_no; > - unsigned int cp_blks = 1 + get_sb(cp_payload); > + unsigned int cp_blks = 1 + get_val(sb, cp_payload); > int ret; > > sbi->ckpt = malloc(cp_blks * blk_size); > @@ -445,11 +445,11 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) > * Finding out valid cp block involves read both > * sets( cp pack1 and cp pack 2) > */ > - cp_start_blk_no = get_sb(cp_blkaddr); > + cp_start_blk_no = get_val(sb, cp_blkaddr); > cp1 = validate_checkpoint(sbi, cp_start_blk_no, &cp1_version); > > /* The second checkpoint pack should start at the next segment */ > - cp_start_blk_no += 1 << get_sb(log_blocks_per_seg); > + cp_start_blk_no += 1 << get_val(sb, log_blocks_per_seg); > cp2 = validate_checkpoint(sbi, cp_start_blk_no, &cp2_version); > > if (cp1 && cp2) { > @@ -481,9 +481,9 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) > unsigned int i; > unsigned long long cp_blk_no; > > - cp_blk_no = get_sb(cp_blkaddr); > + cp_blk_no = get_val(sb, cp_blkaddr); > if (cur_page == cp2) > - cp_blk_no += 1 << get_sb(log_blocks_per_seg); > + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); > > /* copy sit bitmap */ > for (i = 1; i < cp_blks; i++) { > @@ -510,12 +510,12 @@ int sanity_check_ckpt(struct f2fs_sb_info *sbi) > struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); > struct f2fs_checkpoint *cp = F2FS_CKPT(sbi); > > - total = get_sb(segment_count); > - fsmeta = get_sb(segment_count_ckpt); > - fsmeta += get_sb(segment_count_sit); > - fsmeta += get_sb(segment_count_nat); > - fsmeta += get_cp(rsvd_segment_count); > - fsmeta += get_sb(segment_count_ssa); > + total = get_val(sb, segment_count); > + fsmeta = get_val(sb, segment_count_ckpt); > + fsmeta += get_val(sb, segment_count_sit); > + fsmeta += get_val(sb, segment_count_nat); > + fsmeta += get_val(cp, rsvd_segment_count); > + fsmeta += get_val(sb, segment_count_ssa); > > if (fsmeta >= total) > return 1; > @@ -531,16 +531,16 @@ int init_node_manager(struct f2fs_sb_info *sbi) > unsigned char *version_bitmap; > unsigned int nat_segs, nat_blocks; > > - nm_i->nat_blkaddr = get_sb(nat_blkaddr); > + nm_i->nat_blkaddr = get_val(sb, nat_blkaddr); > > /* segment_count_nat includes pair segment so divide to 2. */ > - nat_segs = get_sb(segment_count_nat) >> 1; > - nat_blocks = nat_segs << get_sb(log_blocks_per_seg); > + nat_segs = get_val(sb, segment_count_nat) >> 1; > + nat_blocks = nat_segs << get_val(sb, log_blocks_per_seg); > nm_i->max_nid = NAT_ENTRY_PER_BLOCK * nat_blocks; > nm_i->fcnt = 0; > nm_i->nat_cnt = 0; > - nm_i->init_scan_nid = get_cp(next_free_nid); > - nm_i->next_scan_nid = get_cp(next_free_nid); > + nm_i->init_scan_nid = get_val(cp, next_free_nid); > + nm_i->next_scan_nid = get_val(cp, next_free_nid); > > nm_i->bitmap_size = __bitmap_size(sbi, NAT_BITMAP); > > @@ -597,21 +597,21 @@ int build_sit_info(struct f2fs_sb_info *sbi) > return -ENOMEM; > } > > - sit_segs = get_sb(segment_count_sit) >> 1; > + sit_segs = get_val(sb, segment_count_sit) >> 1; > bitmap_size = __bitmap_size(sbi, SIT_BITMAP); > src_bitmap = __bitmap_ptr(sbi, SIT_BITMAP); > > dst_bitmap = malloc(bitmap_size); > memcpy(dst_bitmap, src_bitmap, bitmap_size); > > - sit_i->sit_base_addr = get_sb(sit_blkaddr); > + sit_i->sit_base_addr = get_val(sb, sit_blkaddr); > sit_i->sit_blocks = sit_segs << sbi->log_blocks_per_seg; > - sit_i->written_valid_blocks = get_cp(valid_block_count); > + sit_i->written_valid_blocks = get_val(cp, valid_block_count); > sit_i->sit_bitmap = dst_bitmap; > sit_i->bitmap_size = bitmap_size; > sit_i->dirty_sentries = 0; > sit_i->sents_per_block = SIT_ENTRY_PER_BLOCK; > - sit_i->elapsed_time = get_cp(elapsed_time); > + sit_i->elapsed_time = get_val(cp, elapsed_time); > return 0; > } > > @@ -716,13 +716,13 @@ static void read_normal_summaries(struct f2fs_sb_info *sbi, int type) > int ret; > > if (IS_DATASEG(type)) { > - segno = get_cp(cur_data_segno[type]); > + segno = get_val(cp, cur_data_segno[type]); > if (is_set_ckpt_flags(cp, CP_UMOUNT_FLAG)) > blk_addr = sum_blk_addr(sbi, NR_CURSEG_TYPE, type); > else > blk_addr = sum_blk_addr(sbi, NR_CURSEG_DATA_TYPE, type); > } else { > - segno = get_cp(cur_node_segno[type - CURSEG_HOT_NODE]); > + segno = get_val(cp, cur_node_segno[type - CURSEG_HOT_NODE]); > if (is_set_ckpt_flags(cp, CP_UMOUNT_FLAG)) > blk_addr = sum_blk_addr(sbi, NR_CURSEG_NODE_TYPE, > type - CURSEG_HOT_NODE); > @@ -803,12 +803,12 @@ static void build_curseg(struct f2fs_sb_info *sbi) > array[i].sum_blk = malloc(PAGE_CACHE_SIZE); > ASSERT(array[i].sum_blk); > if (i <= CURSEG_COLD_DATA) { > - blk_off = get_cp(cur_data_blkoff[i]); > - segno = get_cp(cur_data_segno[i]); > + blk_off = get_val(cp, cur_data_blkoff[i]); > + segno = get_val(cp, cur_data_segno[i]); > } > if (i > CURSEG_COLD_DATA) { > - blk_off = get_cp(cur_node_blkoff[i - CURSEG_HOT_NODE]); > - segno = get_cp(cur_node_segno[i - CURSEG_HOT_NODE]); > + blk_off = get_val(cp, cur_node_blkoff[i - CURSEG_HOT_NODE]); > + segno = get_val(cp, cur_node_segno[i - CURSEG_HOT_NODE]); > } > array[i].segno = segno; > array[i].zone = GET_ZONENO_FROM_SEGNO(sbi, segno); > @@ -924,7 +924,7 @@ struct f2fs_summary_block *get_sum_block(struct f2fs_sb_info *sbi, > > ssa_blk = GET_SUM_BLKADDR(sbi, segno); > for (type = 0; type < NR_CURSEG_NODE_TYPE; type++) { > - if (segno == get_cp(cur_node_segno[type])) { > + if (segno == get_val(cp, cur_node_segno[type])) { > curseg = CURSEG_I(sbi, CURSEG_HOT_NODE + type); > if (!IS_SUM_NODE_SEG(curseg->sum_blk->footer)) { > ASSERT_MSG("segno [0x%x] indicates a data " > @@ -939,7 +939,7 @@ struct f2fs_summary_block *get_sum_block(struct f2fs_sb_info *sbi, > } > > for (type = 0; type < NR_CURSEG_DATA_TYPE; type++) { > - if (segno == get_cp(cur_data_segno[type])) { > + if (segno == get_val(cp, cur_data_segno[type])) { > curseg = CURSEG_I(sbi, type); > if (IS_SUM_NODE_SEG(curseg->sum_blk->footer)) { > ASSERT_MSG("segno [0x%x] indicates a node " > @@ -1151,13 +1151,13 @@ int build_segment_manager(struct f2fs_sb_info *sbi) > > /* init sm info */ > sbi->sm_info = sm_info; > - sm_info->seg0_blkaddr = get_sb(segment0_blkaddr); > - sm_info->main_blkaddr = get_sb(main_blkaddr); > - sm_info->segment_count = get_sb(segment_count); > - sm_info->reserved_segments = get_cp(rsvd_segment_count); > - sm_info->ovp_segments = get_cp(overprov_segment_count); > - sm_info->main_segments = get_sb(segment_count_main); > - sm_info->ssa_blkaddr = get_sb(ssa_blkaddr); > + sm_info->seg0_blkaddr = get_val(sb, segment0_blkaddr); > + sm_info->main_blkaddr = get_val(sb, main_blkaddr); > + sm_info->segment_count = get_val(sb, segment_count); > + sm_info->reserved_segments = get_val(cp, rsvd_segment_count); > + sm_info->ovp_segments = get_val(cp, overprov_segment_count); > + sm_info->main_segments = get_val(sb, segment_count_main); > + sm_info->ssa_blkaddr = get_val(sb, ssa_blkaddr); > > build_sit_info(sbi); > > @@ -1384,7 +1384,7 @@ void flush_sit_entries(struct f2fs_sb_info *sbi) > free_segs++; > } > > - set_cp(free_segment_count, free_segs); > + set_val(cp, free_segment_count, free_segs); > } > > int find_next_free_block(struct f2fs_sb_info *sbi, u64 *to, int left, int type) > @@ -1487,14 +1487,14 @@ void write_curseg_info(struct f2fs_sb_info *sbi) > for (i = 0; i < NO_CHECK_TYPE; i++) { > cp->alloc_type[i] = CURSEG_I(sbi, i)->alloc_type; > if (i < CURSEG_HOT_NODE) { > - set_cp(cur_data_segno[i], CURSEG_I(sbi, i)->segno); > - set_cp(cur_data_blkoff[i], > + set_val(cp, cur_data_segno[i], CURSEG_I(sbi, i)->segno); > + set_val(cp, cur_data_blkoff[i], > CURSEG_I(sbi, i)->next_blkoff); > } else { > int n = i - CURSEG_HOT_NODE; > > - set_cp(cur_node_segno[n], CURSEG_I(sbi, i)->segno); > - set_cp(cur_node_blkoff[n], > + set_val(cp, cur_node_segno[n], CURSEG_I(sbi, i)->segno); > + set_val(cp, cur_node_blkoff[n], > CURSEG_I(sbi, i)->next_blkoff); > } > } > @@ -1578,24 +1578,24 @@ void write_checkpoint(struct f2fs_sb_info *sbi) > flags |= CP_ORPHAN_PRESENT_FLAG; > } > > - set_cp(ckpt_flags, flags); > + set_val(cp, ckpt_flags, flags); > > - set_cp(free_segment_count, get_free_segments(sbi)); > - set_cp(cp_pack_total_block_count, 8 + orphan_blks + get_sb(cp_payload)); > + set_val(cp, free_segment_count, get_free_segments(sbi)); > + set_val(cp, cp_pack_total_block_count, 8 + orphan_blks + get_val(sb, cp_payload)); > > crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); > *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); > > - cp_blk_no = get_sb(cp_blkaddr); > + cp_blk_no = get_val(sb, cp_blkaddr); > if (sbi->cur_cp == 2) > - cp_blk_no += 1 << get_sb(log_blocks_per_seg); > + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); > > /* write the first cp */ > ret = dev_write_block(cp, cp_blk_no++); > ASSERT(ret >= 0); > > /* skip payload */ > - cp_blk_no += get_sb(cp_payload); > + cp_blk_no += get_val(sb, cp_payload); > /* skip orphan blocks */ > cp_blk_no += orphan_blks; > > @@ -1635,7 +1635,7 @@ void build_nat_area_bitmap(struct f2fs_sb_info *sbi) > ASSERT(nat_block); > > /* Alloc & build nat entry bitmap */ > - nr_nat_blks = (get_sb(segment_count_nat) / 2) << > + nr_nat_blks = (get_val(sb, segment_count_nat) / 2) << > sbi->log_blocks_per_seg; > > fsck->nr_nat_entries = nr_nat_blks * NAT_ENTRY_PER_BLOCK; > @@ -1731,7 +1731,7 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi) > print_ckpt_info(sbi); > > if (config.auto_fix) { > - u32 flag = get_cp(ckpt_flags); > + u32 flag = get_val(cp, ckpt_flags); > > if (flag & CP_FSCK_FLAG) > config.fix_on = 1; > @@ -1741,10 +1741,10 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi) > > config.bug_on = 0; > > - sbi->total_valid_node_count = get_cp(valid_node_count); > - sbi->total_valid_inode_count = get_cp(valid_inode_count); > - sbi->user_block_count = get_cp(user_block_count); > - sbi->total_valid_block_count = get_cp(valid_block_count); > + sbi->total_valid_node_count = get_val(cp, valid_node_count); > + sbi->total_valid_inode_count = get_val(cp, valid_inode_count); > + sbi->user_block_count = get_val(cp, user_block_count); > + sbi->total_valid_block_count = get_val(cp, valid_block_count); > sbi->last_valid_block_count = sbi->total_valid_block_count; > sbi->alloc_valid_block_count = 0; > > diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h > index e1eeb6e..2ab9f49 100644 > --- a/include/f2fs_fs.h > +++ b/include/f2fs_fs.h > @@ -270,60 +270,32 @@ struct f2fs_configuration { > #define BIT_MASK(nr) (1 << (nr % BITS_PER_LONG)) > #define BIT_WORD(nr) (nr / BITS_PER_LONG) > > -#define set_sb_le64(member, val) (sb->member = cpu_to_le64(val)) > -#define set_sb_le32(member, val) (sb->member = cpu_to_le32(val)) > -#define set_sb_le16(member, val) (sb->member = cpu_to_le16(val)) > -#define get_sb_le64(member) le64_to_cpu(sb->member) > -#define get_sb_le32(member) le32_to_cpu(sb->member) > -#define get_sb_le16(member) le16_to_cpu(sb->member) > - > -#define set_sb(member, val) \ > - do { \ > - typeof(sb->member) t; \ > - switch (sizeof(t)) { \ > - case 8: set_sb_le64(member, val); break; \ > - case 4: set_sb_le32(member, val); break; \ > - case 2: set_sb_le16(member, val); break; \ > - } \ > +#define set_le64(ptr, member, val) ((ptr)->member = cpu_to_le64(val)) > +#define set_le32(ptr, member, val) ((ptr)->member = cpu_to_le32(val)) > +#define set_le16(ptr, member, val) ((ptr)->member = cpu_to_le16(val)) > +#define get_le64(ptr, member) le64_to_cpu((ptr)->member) > +#define get_le32(ptr, member) le32_to_cpu((ptr)->member) > +#define get_le16(ptr, member) le16_to_cpu((ptr)->member) > + > +#define set_val(ptr, member, val) \ > + do { \ > + typeof((ptr)->member) t; \ > + switch (sizeof(t)) { \ > + case 8: set_le64(ptr, member, val); break; \ > + case 4: set_le32(ptr, member, val); break; \ > + case 2: set_le16(ptr, member, val); break; \ > + } \ > } while(0) > > -#define get_sb(member) \ > - ({ \ > - typeof(sb->member) t; \ > - switch (sizeof(t)) { \ > - case 8: t = get_sb_le64(member); break; \ > - case 4: t = get_sb_le32(member); break; \ > - case 2: t = get_sb_le16(member); break; \ > - } \ > - t; \ > - }) > - > -#define set_cp_le64(member, val) (cp->member = cpu_to_le64(val)) > -#define set_cp_le32(member, val) (cp->member = cpu_to_le32(val)) > -#define set_cp_le16(member, val) (cp->member = cpu_to_le16(val)) > -#define get_cp_le64(member) le64_to_cpu(cp->member) > -#define get_cp_le32(member) le32_to_cpu(cp->member) > -#define get_cp_le16(member) le16_to_cpu(cp->member) > - > -#define set_cp(member, val) \ > - do { \ > - typeof(cp->member) t; \ > - switch (sizeof(t)) { \ > - case 8: set_cp_le64(member, val); break; \ > - case 4: set_cp_le32(member, val); break; \ > - case 2: set_cp_le16(member, val); break; \ > - } \ > - } while(0) > - > -#define get_cp(member) \ > - ({ \ > - typeof(cp->member) t; \ > - switch (sizeof(t)) { \ > - case 8: t = get_cp_le64(member); break; \ > - case 4: t = get_cp_le32(member); break; \ > - case 2: t = get_cp_le16(member); break; \ > - } \ > - t; \ > +#define get_val(ptr, member) \ > + ({ \ > + typeof((ptr)->member) t; \ > + switch (sizeof(t)) { \ > + case 8: t = get_le64(ptr, member); break; \ > + case 4: t = get_le32(ptr, member); break; \ > + case 2: t = get_le16(ptr, member); break; \ > + } \ > + t; \ > }) > > /* > @@ -899,7 +871,7 @@ static inline double get_best_overprovision(struct f2fs_super_block *sb) > double reserved, ovp, candidate, end, diff, space; > double max_ovp = 0, max_space = 0; > > - if (get_sb(segment_count_main) < 256) { > + if (get_val(sb, segment_count_main) < 256) { > candidate = 10; > end = 95; > diff = 5; > @@ -911,9 +883,9 @@ static inline double get_best_overprovision(struct f2fs_super_block *sb) > > for (; candidate <= end; candidate += diff) { > reserved = (2 * (100 / candidate + 1) + 6) * > - get_sb(segs_per_sec); > - ovp = (get_sb(segment_count_main) - reserved) * candidate / 100; > - space = get_sb(segment_count_main) - reserved - ovp; > + get_val(sb, segs_per_sec); > + ovp = (get_val(sb, segment_count_main) - reserved) * candidate / 100; > + space = get_val(sb, segment_count_main) - reserved - ovp; > if (max_space < space) { > max_space = space; > max_ovp = candidate; > diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c > index 645c2aa..db5348e 100644 > --- a/mkfs/f2fs_format.c > +++ b/mkfs/f2fs_format.c > @@ -83,7 +83,7 @@ static void configure_extension_list(void) > int name_len; > int i = 0; > > - set_sb(extension_count, 0); > + set_val(sb, extension_count, 0); > memset(sb->extension_list, 0, sizeof(sb->extension_list)); > > while (*extlist) { > @@ -91,7 +91,7 @@ static void configure_extension_list(void) > memcpy(sb->extension_list[i++], *extlist, name_len); > extlist++; > } > - set_sb(extension_count, i); > + set_val(sb, extension_count, i); > > if (!ext_str) > return; > @@ -112,7 +112,7 @@ next: > break; > } > > - set_sb(extension_count, i); > + set_val(sb, extension_count, i); > > free(config.extension_list); > } > @@ -132,23 +132,23 @@ static int f2fs_prepare_super_block(void) > u_int32_t max_nat_bitmap_size, max_nat_segments; > u_int32_t total_zones; > > - set_sb(magic, F2FS_SUPER_MAGIC); > - set_sb(major_ver, F2FS_MAJOR_VERSION); > - set_sb(minor_ver, F2FS_MINOR_VERSION); > + set_val(sb, magic, F2FS_SUPER_MAGIC); > + set_val(sb, major_ver, F2FS_MAJOR_VERSION); > + set_val(sb, minor_ver, F2FS_MINOR_VERSION); > > log_sectorsize = log_base_2(config.sector_size); > log_sectors_per_block = log_base_2(config.sectors_per_blk); > log_blocksize = log_sectorsize + log_sectors_per_block; > log_blks_per_seg = log_base_2(config.blks_per_seg); > > - set_sb(log_sectorsize, log_sectorsize); > - set_sb(log_sectors_per_block, log_sectors_per_block); > + set_val(sb, log_sectorsize, log_sectorsize); > + set_val(sb, log_sectors_per_block, log_sectors_per_block); > > - set_sb(log_blocksize, log_blocksize); > - set_sb(log_blocks_per_seg, log_blks_per_seg); > + set_val(sb, log_blocksize, log_blocksize); > + set_val(sb, log_blocks_per_seg, log_blks_per_seg); > > - set_sb(segs_per_sec, config.segs_per_sec); > - set_sb(secs_per_zone, config.secs_per_zone); > + set_val(sb, segs_per_sec, config.segs_per_sec); > + set_val(sb, secs_per_zone, config.secs_per_zone); > > blk_size_bytes = 1 << log_blocksize; > segment_size_bytes = blk_size_bytes * config.blks_per_seg; > @@ -156,9 +156,9 @@ static int f2fs_prepare_super_block(void) > blk_size_bytes * config.secs_per_zone * > config.segs_per_sec * config.blks_per_seg; > > - set_sb(checksum_offset, 0); > + set_val(sb, checksum_offset, 0); > > - set_sb(block_count, config.total_sectors >> log_sectors_per_block); > + set_val(sb, block_count, config.total_sectors >> log_sectors_per_block); > > zone_align_start_offset = > (config.start_sector * config.sector_size + > @@ -174,41 +174,41 @@ static int f2fs_prepare_super_block(void) > config.sectors_per_blk); > } > > - set_sb(segment_count, (config.total_sectors * config.sector_size - > + set_val(sb, segment_count, (config.total_sectors * config.sector_size - > zone_align_start_offset) / segment_size_bytes); > > - set_sb(segment0_blkaddr, zone_align_start_offset / blk_size_bytes); > + set_val(sb, segment0_blkaddr, zone_align_start_offset / blk_size_bytes); > sb->cp_blkaddr = sb->segment0_blkaddr; > > - MSG(0, "Info: zone aligned segment0 blkaddr: %u\n", get_sb(segment0_blkaddr)); > + MSG(0, "Info: zone aligned segment0 blkaddr: %u\n", get_val(sb, segment0_blkaddr)); > > - set_sb(segment_count_ckpt, F2FS_NUMBER_OF_CHECKPOINT_PACK); > + set_val(sb, segment_count_ckpt, F2FS_NUMBER_OF_CHECKPOINT_PACK); > > - set_sb(sit_blkaddr, get_sb(segment0_blkaddr) + get_sb(segment_count_ckpt) * > + set_val(sb, sit_blkaddr, get_val(sb, segment0_blkaddr) + get_val(sb, segment_count_ckpt) * > config.blks_per_seg); > > - blocks_for_sit = ALIGN(get_sb(segment_count), SIT_ENTRY_PER_BLOCK); > + blocks_for_sit = ALIGN(get_val(sb, segment_count), SIT_ENTRY_PER_BLOCK); > > sit_segments = SEG_ALIGN(blocks_for_sit); > > - set_sb(segment_count_sit, sit_segments * 2); > + set_val(sb, segment_count_sit, sit_segments * 2); > > - set_sb(nat_blkaddr, get_sb(sit_blkaddr) + get_sb(segment_count_sit) * > + set_val(sb, nat_blkaddr, get_val(sb, sit_blkaddr) + get_val(sb, segment_count_sit) * > config.blks_per_seg); > > - total_valid_blks_available = (get_sb(segment_count) - > - (get_sb(segment_count_ckpt) + get_sb(segment_count_sit))) * > + total_valid_blks_available = (get_val(sb, segment_count) - > + (get_val(sb, segment_count_ckpt) + get_val(sb, segment_count_sit))) * > config.blks_per_seg; > > blocks_for_nat = ALIGN(total_valid_blks_available, NAT_ENTRY_PER_BLOCK); > > - set_sb(segment_count_nat, SEG_ALIGN(blocks_for_nat)); > + set_val(sb, segment_count_nat, SEG_ALIGN(blocks_for_nat)); > /* > * The number of node segments should not be exceeded a "Threshold". > * This number resizes NAT bitmap area in a CP page. > * So the threshold is determined not to overflow one CP page > */ > - sit_bitmap_size = ((get_sb(segment_count_sit) / 2) << > + sit_bitmap_size = ((get_val(sb, segment_count_sit) / 2) << > log_blks_per_seg) / 8; > > if (sit_bitmap_size > MAX_SIT_BITMAP_SIZE) > @@ -223,55 +223,55 @@ static int f2fs_prepare_super_block(void) > if (max_sit_bitmap_size > > (CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1 - 64)) { > max_nat_bitmap_size = CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1; > - set_sb(cp_payload, F2FS_BLK_ALIGN(max_sit_bitmap_size)); > + set_val(sb, cp_payload, F2FS_BLK_ALIGN(max_sit_bitmap_size)); > } else { > max_nat_bitmap_size = CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1 > - max_sit_bitmap_size; > - set_sb(cp_payload, 0); > + set_val(sb, cp_payload, 0); > } > > max_nat_segments = (max_nat_bitmap_size * 8) >> log_blks_per_seg; > > - if (get_sb(segment_count_nat) > max_nat_segments) > - set_sb(segment_count_nat, max_nat_segments); > + if (get_val(sb, segment_count_nat) > max_nat_segments) > + set_val(sb, segment_count_nat, max_nat_segments); > > - set_sb(segment_count_nat, get_sb(segment_count_nat) * 2); > + set_val(sb, segment_count_nat, get_val(sb, segment_count_nat) * 2); > > - set_sb(ssa_blkaddr, get_sb(nat_blkaddr) + get_sb(segment_count_nat) * > + set_val(sb, ssa_blkaddr, get_val(sb, nat_blkaddr) + get_val(sb, segment_count_nat) * > config.blks_per_seg); > > - total_valid_blks_available = (get_sb(segment_count) - > - (get_sb(segment_count_ckpt) + > - get_sb(segment_count_sit) + > - get_sb(segment_count_nat))) * > + total_valid_blks_available = (get_val(sb, segment_count) - > + (get_val(sb, segment_count_ckpt) + > + get_val(sb, segment_count_sit) + > + get_val(sb, segment_count_nat))) * > config.blks_per_seg; > > blocks_for_ssa = total_valid_blks_available / > config.blks_per_seg + 1; > > - set_sb(segment_count_ssa, SEG_ALIGN(blocks_for_ssa)); > + set_val(sb, segment_count_ssa, SEG_ALIGN(blocks_for_ssa)); > > - total_meta_segments = get_sb(segment_count_ckpt) + > - get_sb(segment_count_sit) + > - get_sb(segment_count_nat) + > - get_sb(segment_count_ssa); > + total_meta_segments = get_val(sb, segment_count_ckpt) + > + get_val(sb, segment_count_sit) + > + get_val(sb, segment_count_nat) + > + get_val(sb, segment_count_ssa); > diff = total_meta_segments % (config.segs_per_zone); > if (diff) > - set_sb(segment_count_ssa, get_sb(segment_count_ssa) + > + set_val(sb, segment_count_ssa, get_val(sb, segment_count_ssa) + > (config.segs_per_zone - diff)); > > total_meta_zones = ZONE_ALIGN(total_meta_segments * > config.blks_per_seg); > > - set_sb(main_blkaddr, get_sb(segment0_blkaddr) + total_meta_zones * > + set_val(sb, main_blkaddr, get_val(sb, segment0_blkaddr) + total_meta_zones * > config.segs_per_zone * config.blks_per_seg); > > - total_zones = get_sb(segment_count) / (config.segs_per_zone) - > + total_zones = get_val(sb, segment_count) / (config.segs_per_zone) - > total_meta_zones; > > - set_sb(section_count, total_zones * config.secs_per_zone); > + set_val(sb, section_count, total_zones * config.secs_per_zone); > > - set_sb(segment_count_main, get_sb(section_count) * config.segs_per_sec); > + set_val(sb, segment_count_main, get_val(sb, section_count) * config.segs_per_sec); > > /* Let's determine the best reserved and overprovisioned space */ > if (config.overprovision == 0) > @@ -281,12 +281,12 @@ static int f2fs_prepare_super_block(void) > (2 * (100 / config.overprovision + 1) + 6) > * config.segs_per_sec; > > - if ((get_sb(segment_count_main) - 2) < > + if ((get_val(sb, segment_count_main) - 2) < > config.reserved_segments) { > MSG(1, "\tError: Device size is not sufficient for F2FS volume,\ > more segment needed =%u", > config.reserved_segments - > - (get_sb(segment_count_main) - 2)); > + (get_val(sb, segment_count_main) - 2)); > return -1; > } > > @@ -294,9 +294,9 @@ static int f2fs_prepare_super_block(void) > > utf8_to_utf16(sb->volume_name, (const char *)config.vol_label, > MAX_VOLUME_NAME, strlen(config.vol_label)); > - set_sb(node_ino, 1); > - set_sb(meta_ino, 2); > - set_sb(root_ino, 3); > + set_val(sb, node_ino, 1); > + set_val(sb, meta_ino, 2); > + set_val(sb, root_ino, 3); > > if (total_zones <= 6) { > MSG(1, "\tError: %d zones: Need more zones \ > @@ -346,8 +346,8 @@ static int f2fs_init_sit_area(void) > u_int64_t sit_seg_addr = 0; > u_int8_t *zero_buf = NULL; > > - blk_size = 1 << get_sb(log_blocksize); > - seg_size = (1 << get_sb(log_blocks_per_seg)) * blk_size; > + blk_size = 1 << get_val(sb, log_blocksize); > + seg_size = (1 << get_val(sb, log_blocks_per_seg)) * blk_size; > > zero_buf = calloc(sizeof(u_int8_t), seg_size); > if(zero_buf == NULL) { > @@ -355,11 +355,11 @@ static int f2fs_init_sit_area(void) > return -1; > } > > - sit_seg_addr = get_sb(sit_blkaddr); > + sit_seg_addr = get_val(sb, sit_blkaddr); > sit_seg_addr *= blk_size; > > DBG(1, "\tFilling sit area at offset 0x%08"PRIx64"\n", sit_seg_addr); > - for (index = 0; index < (get_sb(segment_count_sit) / 2); index++) { > + for (index = 0; index < (get_val(sb, segment_count_sit) / 2); index++) { > if (dev_fill(zero_buf, sit_seg_addr, seg_size)) { > MSG(1, "\tError: While zeroing out the sit area \ > on disk!!!\n"); > @@ -380,8 +380,8 @@ static int f2fs_init_nat_area(void) > u_int64_t nat_seg_addr = 0; > u_int8_t *nat_buf = NULL; > > - blk_size = 1 << get_sb(log_blocksize); > - seg_size = (1 << get_sb(log_blocks_per_seg)) * blk_size; > + blk_size = 1 << get_val(sb, log_blocksize); > + seg_size = (1 << get_val(sb, log_blocks_per_seg)) * blk_size; > > nat_buf = calloc(sizeof(u_int8_t), seg_size); > if (nat_buf == NULL) { > @@ -389,11 +389,11 @@ static int f2fs_init_nat_area(void) > return -1; > } > > - nat_seg_addr = get_sb(nat_blkaddr); > + nat_seg_addr = get_val(sb, nat_blkaddr); > nat_seg_addr *= blk_size; > > DBG(1, "\tFilling nat area at offset 0x%08"PRIx64"\n", nat_seg_addr); > - for (index = 0; index < get_sb(segment_count_nat) / 2; index++) { > + for (index = 0; index < get_val(sb, segment_count_nat) / 2; index++) { > if (dev_fill(nat_buf, nat_seg_addr, seg_size)) { > MSG(1, "\tError: While zeroing out the nat area \ > on disk!!!\n"); > @@ -445,58 +445,58 @@ static int f2fs_write_check_point_pack(void) > } > > /* 1. cp page 1 of checkpoint pack 1 */ > - set_cp(checkpoint_ver, 1); > - set_cp(cur_node_segno[0], config.cur_seg[CURSEG_HOT_NODE]); > - set_cp(cur_node_segno[1], config.cur_seg[CURSEG_WARM_NODE]); > - set_cp(cur_node_segno[2], config.cur_seg[CURSEG_COLD_NODE]); > - set_cp(cur_data_segno[0], config.cur_seg[CURSEG_HOT_DATA]); > - set_cp(cur_data_segno[1], config.cur_seg[CURSEG_WARM_DATA]); > - set_cp(cur_data_segno[2], config.cur_seg[CURSEG_COLD_DATA]); > + set_val(cp, checkpoint_ver, 1); > + set_val(cp, cur_node_segno[0], config.cur_seg[CURSEG_HOT_NODE]); > + set_val(cp, cur_node_segno[1], config.cur_seg[CURSEG_WARM_NODE]); > + set_val(cp, cur_node_segno[2], config.cur_seg[CURSEG_COLD_NODE]); > + set_val(cp, cur_data_segno[0], config.cur_seg[CURSEG_HOT_DATA]); > + set_val(cp, cur_data_segno[1], config.cur_seg[CURSEG_WARM_DATA]); > + set_val(cp, cur_data_segno[2], config.cur_seg[CURSEG_COLD_DATA]); > for (i = 3; i < MAX_ACTIVE_NODE_LOGS; i++) { > - set_cp(cur_node_segno[i], 0xffffffff); > - set_cp(cur_data_segno[i], 0xffffffff); > + set_val(cp, cur_node_segno[i], 0xffffffff); > + set_val(cp, cur_data_segno[i], 0xffffffff); > } > > - set_cp(cur_node_blkoff[0], 1); > - set_cp(cur_data_blkoff[0], 1); > - set_cp(valid_block_count, 2); > - set_cp(rsvd_segment_count, config.reserved_segments); > - set_cp(overprov_segment_count, (get_sb(segment_count_main) - > - get_cp(rsvd_segment_count)) * > + set_val(cp, cur_node_blkoff[0], 1); > + set_val(cp, cur_data_blkoff[0], 1); > + set_val(cp, valid_block_count, 2); > + set_val(cp, rsvd_segment_count, config.reserved_segments); > + set_val(cp, overprov_segment_count, (get_val(sb, segment_count_main) - > + get_val(cp, rsvd_segment_count)) * > config.overprovision / 100); > - set_cp(overprov_segment_count, get_cp(overprov_segment_count) + > - get_cp(rsvd_segment_count)); > + set_val(cp, overprov_segment_count, get_val(cp, overprov_segment_count) + > + get_val(cp, rsvd_segment_count)); > > MSG(0, "Info: Overprovision ratio = %.3lf%%\n", config.overprovision); > MSG(0, "Info: Overprovision segments = %u (GC reserved = %u)\n", > - get_cp(overprov_segment_count), > + get_val(cp, overprov_segment_count), > config.reserved_segments); > > /* main segments - reserved segments - (node + data segments) */ > - set_cp(free_segment_count, get_sb(segment_count_main) - 6); > - set_cp(user_block_count, ((get_cp(free_segment_count) + 6 - > - get_cp(overprov_segment_count)) * config.blks_per_seg)); > + set_val(cp, free_segment_count, get_val(sb, segment_count_main) - 6); > + set_val(cp, user_block_count, ((get_val(cp, free_segment_count) + 6 - > + get_val(cp, overprov_segment_count)) * config.blks_per_seg)); > /* cp page (2), data summaries (1), node summaries (3) */ > - set_cp(cp_pack_total_block_count, 6 + get_sb(cp_payload)); > - set_cp(ckpt_flags, CP_UMOUNT_FLAG | CP_COMPACT_SUM_FLAG); > - set_cp(cp_pack_start_sum, 1 + get_sb(cp_payload)); > - set_cp(valid_node_count, 1); > - set_cp(valid_inode_count, 1); > - set_cp(next_free_nid, get_sb(root_ino) + 1); > - set_cp(sit_ver_bitmap_bytesize, ((get_sb(segment_count_sit) / 2) << > - get_sb(log_blocks_per_seg)) / 8); > + set_val(cp, cp_pack_total_block_count, 6 + get_val(sb, cp_payload)); > + set_val(cp, ckpt_flags, CP_UMOUNT_FLAG | CP_COMPACT_SUM_FLAG); > + set_val(cp, cp_pack_start_sum, 1 + get_val(sb, cp_payload)); > + set_val(cp, valid_node_count, 1); > + set_val(cp, valid_inode_count, 1); > + set_val(cp, next_free_nid, get_val(sb, root_ino) + 1); > + set_val(cp, sit_ver_bitmap_bytesize, ((get_val(sb, segment_count_sit) / 2) << > + get_val(sb, log_blocks_per_seg)) / 8); > > - set_cp(nat_ver_bitmap_bytesize, ((get_sb(segment_count_nat) / 2) << > - get_sb(log_blocks_per_seg)) / 8); > + set_val(cp, nat_ver_bitmap_bytesize, ((get_val(sb, segment_count_nat) / 2) << > + get_val(sb, log_blocks_per_seg)) / 8); > > - set_cp(checksum_offset, CHECKSUM_OFFSET); > + set_val(cp, checksum_offset, CHECKSUM_OFFSET); > > crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); > *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = > cpu_to_le32(crc); > > - blk_size_bytes = 1 << get_sb(log_blocksize); > - cp_seg_blk_offset = get_sb(segment0_blkaddr); > + blk_size_bytes = 1 << get_val(sb, log_blocksize); > + cp_seg_blk_offset = get_val(sb, segment0_blkaddr); > cp_seg_blk_offset *= blk_size_bytes; > > DBG(1, "\tWriting main segments, cp at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); > @@ -505,7 +505,7 @@ static int f2fs_write_check_point_pack(void) > goto free_cp_payload; > } > > - for (i = 0; i < get_sb(cp_payload); i++) { > + for (i = 0; i < get_val(sb, cp_payload); i++) { > cp_seg_blk_offset += blk_size_bytes; > if (dev_fill(cp_payload, cp_seg_blk_offset, blk_size_bytes)) { > MSG(1, "\tError: While zeroing out the sit bitmap area \ > @@ -537,8 +537,8 @@ static int f2fs_write_check_point_pack(void) > sum->nat_j.entries[0].ne.version = 0; > sum->nat_j.entries[0].ne.ino = sb->root_ino; > sum->nat_j.entries[0].ne.block_addr = cpu_to_le32( > - get_sb(main_blkaddr) + > - get_cp(cur_node_segno[0]) * config.blks_per_seg); > + get_val(sb, main_blkaddr) + > + get_val(cp, cur_node_segno[0]) * config.blks_per_seg); > > memcpy(sum_compact_p, &sum->n_nats, SUM_JOURNAL_SIZE); > sum_compact_p += SUM_JOURNAL_SIZE; > @@ -635,7 +635,7 @@ static int f2fs_write_check_point_pack(void) > crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); > *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = > cpu_to_le32(crc); > - cp_seg_blk_offset = (get_sb(segment0_blkaddr) + > + cp_seg_blk_offset = (get_val(sb, segment0_blkaddr) + > config.blks_per_seg) * > blk_size_bytes; > DBG(1, "\tWriting cp page 1 of checkpoint pack 2, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); > @@ -644,7 +644,7 @@ static int f2fs_write_check_point_pack(void) > goto free_cp_payload; > } > > - for (i = 0; i < get_sb(cp_payload); i++) { > + for (i = 0; i < get_val(sb, cp_payload); i++) { > cp_seg_blk_offset += blk_size_bytes; > if (dev_fill(cp_payload, cp_seg_blk_offset, blk_size_bytes)) { > MSG(1, "\tError: While zeroing out the sit bitmap area \ > @@ -655,7 +655,7 @@ static int f2fs_write_check_point_pack(void) > > /* cp page 2 of check point pack 2 */ > cp_seg_blk_offset += blk_size_bytes * (le32_to_cpu(cp->cp_pack_total_block_count) > - - get_sb(cp_payload) - 1); > + - get_val(sb, cp_payload) - 1); > DBG(1, "\tWriting cp page 2 of checkpoint pack 2, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); > if (dev_write(cp, cp_seg_blk_offset, blk_size_bytes)) { > MSG(1, "\tError: While writing the cp to disk!!!\n"); > @@ -701,8 +701,8 @@ static int f2fs_write_super_block(void) > static int discard_obsolete_dnode(struct f2fs_node *raw_node, u_int64_t offset) > { > do { > - if (offset < get_sb(main_blkaddr) || > - offset >= get_sb(main_blkaddr) + get_sb(block_count)) > + if (offset < get_val(sb, main_blkaddr) || > + offset >= get_val(sb, main_blkaddr) + get_val(sb, block_count)) > break; > > if (dev_read_block(raw_node, offset)) { > @@ -740,7 +740,7 @@ static int f2fs_write_root_inode(void) > raw_node->footer.ino = sb->root_ino; > raw_node->footer.cp_ver = cpu_to_le64(1); > raw_node->footer.next_blkaddr = cpu_to_le32( > - get_sb(main_blkaddr) + > + get_val(sb, main_blkaddr) + > config.cur_seg[CURSEG_HOT_NODE] * > config.blks_per_seg + 1); > > @@ -749,7 +749,7 @@ static int f2fs_write_root_inode(void) > raw_node->i.i_uid = cpu_to_le32(getuid()); > raw_node->i.i_gid = cpu_to_le32(getgid()); > > - blk_size_bytes = 1 << get_sb(log_blocksize); > + blk_size_bytes = 1 << get_val(sb, log_blocksize); > raw_node->i.i_size = cpu_to_le64(1 * blk_size_bytes); /* dentry */ > raw_node->i.i_blocks = cpu_to_le64(2); > > @@ -765,7 +765,7 @@ static int f2fs_write_root_inode(void) > raw_node->i.i_current_depth = cpu_to_le32(1); > raw_node->i.i_dir_level = DEF_DIR_LEVEL; > > - data_blk_nor = get_sb(main_blkaddr) + > + data_blk_nor = get_val(sb, main_blkaddr) + > config.cur_seg[CURSEG_HOT_DATA] * config.blks_per_seg; > raw_node->i.i_addr[0] = cpu_to_le32(data_blk_nor); > > @@ -773,7 +773,7 @@ static int f2fs_write_root_inode(void) > raw_node->i.i_ext.blk_addr = 0; > raw_node->i.i_ext.len = 0; > > - main_area_node_seg_blk_offset = get_sb(main_blkaddr); > + main_area_node_seg_blk_offset = get_val(sb, main_blkaddr); > main_area_node_seg_blk_offset += config.cur_seg[CURSEG_HOT_NODE] * > config.blks_per_seg; > main_area_node_seg_blk_offset *= blk_size_bytes; > @@ -786,7 +786,7 @@ static int f2fs_write_root_inode(void) > } > > /* avoid power-off-recovery based on roll-forward policy */ > - main_area_node_seg_blk_offset = get_sb(main_blkaddr); > + main_area_node_seg_blk_offset = get_val(sb, main_blkaddr); > main_area_node_seg_blk_offset += config.cur_seg[CURSEG_WARM_NODE] * > config.blks_per_seg; > > @@ -813,21 +813,21 @@ static int f2fs_update_nat_root(void) > } > > /* update root */ > - nat_blk->entries[get_sb(root_ino)].block_addr = cpu_to_le32( > - get_sb(main_blkaddr) + > + nat_blk->entries[get_val(sb, root_ino)].block_addr = cpu_to_le32( > + get_val(sb, main_blkaddr) + > config.cur_seg[CURSEG_HOT_NODE] * config.blks_per_seg); > - nat_blk->entries[get_sb(root_ino)].ino = sb->root_ino; > + nat_blk->entries[get_val(sb, root_ino)].ino = sb->root_ino; > > /* update node nat */ > - nat_blk->entries[get_sb(node_ino)].block_addr = cpu_to_le32(1); > - nat_blk->entries[get_sb(node_ino)].ino = sb->node_ino; > + nat_blk->entries[get_val(sb, node_ino)].block_addr = cpu_to_le32(1); > + nat_blk->entries[get_val(sb, node_ino)].ino = sb->node_ino; > > /* update meta nat */ > - nat_blk->entries[get_sb(meta_ino)].block_addr = cpu_to_le32(1); > - nat_blk->entries[get_sb(meta_ino)].ino = sb->meta_ino; > + nat_blk->entries[get_val(sb, meta_ino)].block_addr = cpu_to_le32(1); > + nat_blk->entries[get_val(sb, meta_ino)].ino = sb->meta_ino; > > - blk_size_bytes = 1 << get_sb(log_blocksize); > - nat_seg_blk_offset = get_sb(nat_blkaddr); > + blk_size_bytes = 1 << get_val(sb, log_blocksize); > + nat_seg_blk_offset = get_val(sb, nat_blkaddr); > nat_seg_blk_offset *= blk_size_bytes; > > DBG(1, "\tWriting nat root, at offset 0x%08"PRIx64"\n", nat_seg_blk_offset); > @@ -867,8 +867,8 @@ static int f2fs_add_default_dentry_root(void) > /* bitmap for . and .. */ > test_and_set_bit_le(0, dent_blk->dentry_bitmap); > test_and_set_bit_le(1, dent_blk->dentry_bitmap); > - blk_size_bytes = 1 << get_sb(log_blocksize); > - data_blk_offset = get_sb(main_blkaddr); > + blk_size_bytes = 1 << get_val(sb, log_blocksize); > + data_blk_offset = get_val(sb, main_blkaddr); > data_blk_offset += config.cur_seg[CURSEG_HOT_DATA] * > config.blks_per_seg; > data_blk_offset *= blk_size_bytes; > -- > 1.9.1 > > > ------------------------------------------------------------------------------ > Site24x7 APM Insight: Get Deep Visibility into Application Performance > APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month > Monitor end-to-end web transactions and take corrective actions now > Troubleshoot faster and improve end-user experience. Signup Now! > http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 > _______________________________________________ > Linux-f2fs-devel mailing list > Linux-f2fs-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC PATCH 1/4] f2fs-tools: simplify get_{sb|cp} and set_{sb|cp} 2016-01-30 1:46 ` Jaegeuk Kim @ 2016-01-30 2:25 ` Sheng Yong 2016-01-30 10:03 ` [RFC PATCH v2] " Sheng Yong 2016-02-02 0:27 ` [RFC PATCH 1/4] " Jaegeuk Kim 0 siblings, 2 replies; 9+ messages in thread From: Sheng Yong @ 2016-01-30 2:25 UTC (permalink / raw) To: Jaegeuk Kim; +Cc: linux-f2fs-devel Hi, Kim On 1/30/2016 9:46 AM, Jaegeuk Kim wrote: > Hi Sheng, > > This is not a good way. > You're asking to change all the pending patches as well. > > Why not just adding two definitions like these? > > #define get_sb(member) get_val(sb, member) > #define set_sb(member, val) set_sb(sb, member, val) > #define get_cp(member) get_val(cp, member) > #define set_cp(member, val) set_sb(cp, member, val) > You mean we should still keep the get_{sb|cp} and set_{sb|cp} for some time but mark them as deprecated? Anyway, this is a trivial cleanup. I think it's ok to keep it as it is now :) thanks, Sheng > Thanks, > > On Sat, Jan 30, 2016 at 09:16:36AM +0000, Sheng Yong wrote: >> * Remove dumplicated definitions of get_{sb|cp} and set_{sb|cp}, and introduce >> micros get_val and set_val instead. >> * Add a new parameter to get_val and set_val so that they are not depended on >> implied definition of `sb' and `cp'. >> >> Signed-off-by: Sheng Yong <shengyong1@huawei.com> >> --- >> fsck/fsck.c | 20 ++--- >> fsck/main.c | 8 +- >> fsck/mount.c | 146 ++++++++++++++++----------------- >> include/f2fs_fs.h | 84 +++++++------------ >> mkfs/f2fs_format.c | 234 ++++++++++++++++++++++++++--------------------------- >> 5 files changed, 232 insertions(+), 260 deletions(-) >> >> diff --git a/fsck/fsck.c b/fsck/fsck.c >> index e7dd02f..4fbb56d 100644 >> --- a/fsck/fsck.c >> +++ b/fsck/fsck.c >> @@ -1191,7 +1191,7 @@ void fsck_chk_orphan_node(struct f2fs_sb_info *sbi) >> if (!is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ORPHAN_PRESENT_FLAG)) >> return; >> >> - start_blk = __start_cp_addr(sbi) + 1 + get_sb(cp_payload); >> + start_blk = __start_cp_addr(sbi) + 1 + get_val(sb, cp_payload); >> orphan_blkaddr = __start_sum_addr(sbi) - 1; >> >> orphan_blk = calloc(BLOCK_SZ, 1); >> @@ -1324,25 +1324,25 @@ static void fix_checkpoint(struct f2fs_sb_info *sbi) >> flags |= CP_ORPHAN_PRESENT_FLAG; >> } >> >> - set_cp(ckpt_flags, flags); >> - set_cp(cp_pack_total_block_count, 8 + orphan_blks + get_sb(cp_payload)); >> + set_val(cp, ckpt_flags, flags); >> + set_val(cp, cp_pack_total_block_count, 8 + orphan_blks + get_val(sb, cp_payload)); >> >> - set_cp(free_segment_count, fsck->chk.free_segs); >> - set_cp(valid_block_count, fsck->chk.valid_blk_cnt); >> - set_cp(valid_node_count, fsck->chk.valid_node_cnt); >> - set_cp(valid_inode_count, fsck->chk.valid_inode_cnt); >> + set_val(cp, free_segment_count, fsck->chk.free_segs); >> + set_val(cp, valid_block_count, fsck->chk.valid_blk_cnt); >> + set_val(cp, valid_node_count, fsck->chk.valid_node_cnt); >> + set_val(cp, valid_inode_count, fsck->chk.valid_inode_cnt); >> >> crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); >> *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); >> >> - cp_blk_no = get_sb(cp_blkaddr); >> + cp_blk_no = get_val(sb, cp_blkaddr); >> if (sbi->cur_cp == 2) >> - cp_blk_no += 1 << get_sb(log_blocks_per_seg); >> + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); >> >> ret = dev_write_block(cp, cp_blk_no++); >> ASSERT(ret >= 0); >> >> - for (i = 0; i < get_sb(cp_payload); i++) { >> + for (i = 0; i < get_val(sb, cp_payload); i++) { >> ret = dev_write_block(((unsigned char *)cp) + i * F2FS_BLKSIZE, >> cp_blk_no++); >> ASSERT(ret >= 0); >> diff --git a/fsck/main.c b/fsck/main.c >> index 54dbb2d..7fcaa5d 100644 >> --- a/fsck/main.c >> +++ b/fsck/main.c >> @@ -255,7 +255,7 @@ static int do_defrag(struct f2fs_sb_info *sbi) >> { >> struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); >> >> - if (config.defrag_start > get_sb(block_count)) >> + if (config.defrag_start > get_val(sb, block_count)) >> goto out_range; >> if (config.defrag_start < SM_I(sbi)->main_blkaddr) >> config.defrag_start = SM_I(sbi)->main_blkaddr; >> @@ -263,8 +263,8 @@ static int do_defrag(struct f2fs_sb_info *sbi) >> if (config.defrag_len == 0) >> config.defrag_len = sbi->blocks_per_seg; >> >> - if (config.defrag_start + config.defrag_len > get_sb(block_count)) >> - config.defrag_len = get_sb(block_count) - config.defrag_start; >> + if (config.defrag_start + config.defrag_len > get_val(sb, block_count)) >> + config.defrag_len = get_val(sb, block_count) - config.defrag_start; >> >> if (config.defrag_target == 0) { >> config.defrag_target = config.defrag_start - 1; >> @@ -273,7 +273,7 @@ static int do_defrag(struct f2fs_sb_info *sbi) >> } >> >> if (config.defrag_target < SM_I(sbi)->main_blkaddr || >> - config.defrag_target > get_sb(block_count)) >> + config.defrag_target > get_val(sb, block_count)) >> goto out_range; >> if (config.defrag_target >= config.defrag_start && >> config.defrag_target < config.defrag_start + config.defrag_len) >> diff --git a/fsck/mount.c b/fsck/mount.c >> index 4c807f9..6e6d230 100644 >> --- a/fsck/mount.c >> +++ b/fsck/mount.c >> @@ -269,21 +269,21 @@ int sanity_check_raw_super(struct f2fs_super_block *sb) >> { >> unsigned int blocksize; >> >> - if (F2FS_SUPER_MAGIC != get_sb(magic)) >> + if (F2FS_SUPER_MAGIC != get_val(sb, magic)) >> return -1; >> >> if (F2FS_BLKSIZE != PAGE_CACHE_SIZE) >> return -1; >> >> - blocksize = 1 << get_sb(log_blocksize); >> + blocksize = 1 << get_val(sb, log_blocksize); >> if (F2FS_BLKSIZE != blocksize) >> return -1; >> >> - if (get_sb(log_sectorsize) > F2FS_MAX_LOG_SECTOR_SIZE || >> - get_sb(log_sectorsize) < F2FS_MIN_LOG_SECTOR_SIZE) >> + if (get_val(sb, log_sectorsize) > F2FS_MAX_LOG_SECTOR_SIZE || >> + get_val(sb, log_sectorsize) < F2FS_MIN_LOG_SECTOR_SIZE) >> return -1; >> >> - if (get_sb(log_sectors_per_block) + get_sb(log_sectorsize) != >> + if (get_val(sb, log_sectors_per_block) + get_val(sb, log_sectorsize) != >> F2FS_MAX_LOG_SECTOR_SIZE) >> return -1; >> >> @@ -350,22 +350,22 @@ int init_sb_info(struct f2fs_sb_info *sbi) >> struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); >> u64 total_sectors; >> >> - sbi->log_sectors_per_block = get_sb(log_sectors_per_block); >> - sbi->log_blocksize = get_sb(log_blocksize); >> + sbi->log_sectors_per_block = get_val(sb, log_sectors_per_block); >> + sbi->log_blocksize = get_val(sb, log_blocksize); >> sbi->blocksize = 1 << sbi->log_blocksize; >> - sbi->log_blocks_per_seg = get_sb(log_blocks_per_seg); >> + sbi->log_blocks_per_seg = get_val(sb, log_blocks_per_seg); >> sbi->blocks_per_seg = 1 << sbi->log_blocks_per_seg; >> - sbi->segs_per_sec = get_sb(segs_per_sec); >> - sbi->secs_per_zone = get_sb(secs_per_zone); >> - sbi->total_sections = get_sb(section_count); >> - sbi->total_node_count = (get_sb(segment_count_nat) / 2) * >> + sbi->segs_per_sec = get_val(sb, segs_per_sec); >> + sbi->secs_per_zone = get_val(sb, secs_per_zone); >> + sbi->total_sections = get_val(sb, section_count); >> + sbi->total_node_count = (get_val(sb, segment_count_nat) / 2) * >> sbi->blocks_per_seg * NAT_ENTRY_PER_BLOCK; >> - sbi->root_ino_num = get_sb(root_ino); >> - sbi->node_ino_num = get_sb(node_ino); >> - sbi->meta_ino_num = get_sb(meta_ino); >> + sbi->root_ino_num = get_val(sb, root_ino); >> + sbi->node_ino_num = get_val(sb, node_ino); >> + sbi->meta_ino_num = get_val(sb, meta_ino); >> sbi->cur_victim_sec = NULL_SEGNO; >> >> - total_sectors = get_sb(block_count) << sbi->log_sectors_per_block; >> + total_sectors = get_val(sb, block_count) << sbi->log_sectors_per_block; >> MSG(0, "Info: total FS sectors = %"PRIu64" (%"PRIu64" MB)\n", >> total_sectors, total_sectors >> 11); >> return 0; >> @@ -387,7 +387,7 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, >> return NULL; >> >> cp = (struct f2fs_checkpoint *)cp_page_1; >> - crc_offset = get_cp(checksum_offset); >> + crc_offset = get_val(cp, checksum_offset); >> if (crc_offset >= blk_size) >> goto invalid_cp1; >> >> @@ -395,17 +395,17 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, >> if (f2fs_crc_valid(crc, cp, crc_offset)) >> goto invalid_cp1; >> >> - pre_version = get_cp(checkpoint_ver); >> + pre_version = get_val(cp, checkpoint_ver); >> >> /* Read the 2nd cp block in this CP pack */ >> cp_page_2 = malloc(PAGE_SIZE); >> - cp_addr += get_cp(cp_pack_total_block_count) - 1; >> + cp_addr += get_val(cp, cp_pack_total_block_count) - 1; >> >> if (dev_read_block(cp_page_2, cp_addr) < 0) >> goto invalid_cp2; >> >> cp = (struct f2fs_checkpoint *)cp_page_2; >> - crc_offset = get_cp(checksum_offset); >> + crc_offset = get_val(cp, checksum_offset); >> if (crc_offset >= blk_size) >> goto invalid_cp2; >> >> @@ -413,7 +413,7 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, >> if (f2fs_crc_valid(crc, cp, crc_offset)) >> goto invalid_cp2; >> >> - cur_version = get_cp(checkpoint_ver); >> + cur_version = get_val(cp, checkpoint_ver); >> >> if (cur_version == pre_version) { >> *version = cur_version; >> @@ -435,7 +435,7 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) >> unsigned long blk_size = sbi->blocksize; >> unsigned long long cp1_version = 0, cp2_version = 0, version; >> unsigned long long cp_start_blk_no; >> - unsigned int cp_blks = 1 + get_sb(cp_payload); >> + unsigned int cp_blks = 1 + get_val(sb, cp_payload); >> int ret; >> >> sbi->ckpt = malloc(cp_blks * blk_size); >> @@ -445,11 +445,11 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) >> * Finding out valid cp block involves read both >> * sets( cp pack1 and cp pack 2) >> */ >> - cp_start_blk_no = get_sb(cp_blkaddr); >> + cp_start_blk_no = get_val(sb, cp_blkaddr); >> cp1 = validate_checkpoint(sbi, cp_start_blk_no, &cp1_version); >> >> /* The second checkpoint pack should start at the next segment */ >> - cp_start_blk_no += 1 << get_sb(log_blocks_per_seg); >> + cp_start_blk_no += 1 << get_val(sb, log_blocks_per_seg); >> cp2 = validate_checkpoint(sbi, cp_start_blk_no, &cp2_version); >> >> if (cp1 && cp2) { >> @@ -481,9 +481,9 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) >> unsigned int i; >> unsigned long long cp_blk_no; >> >> - cp_blk_no = get_sb(cp_blkaddr); >> + cp_blk_no = get_val(sb, cp_blkaddr); >> if (cur_page == cp2) >> - cp_blk_no += 1 << get_sb(log_blocks_per_seg); >> + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); >> >> /* copy sit bitmap */ >> for (i = 1; i < cp_blks; i++) { >> @@ -510,12 +510,12 @@ int sanity_check_ckpt(struct f2fs_sb_info *sbi) >> struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); >> struct f2fs_checkpoint *cp = F2FS_CKPT(sbi); >> >> - total = get_sb(segment_count); >> - fsmeta = get_sb(segment_count_ckpt); >> - fsmeta += get_sb(segment_count_sit); >> - fsmeta += get_sb(segment_count_nat); >> - fsmeta += get_cp(rsvd_segment_count); >> - fsmeta += get_sb(segment_count_ssa); >> + total = get_val(sb, segment_count); >> + fsmeta = get_val(sb, segment_count_ckpt); >> + fsmeta += get_val(sb, segment_count_sit); >> + fsmeta += get_val(sb, segment_count_nat); >> + fsmeta += get_val(cp, rsvd_segment_count); >> + fsmeta += get_val(sb, segment_count_ssa); >> >> if (fsmeta >= total) >> return 1; >> @@ -531,16 +531,16 @@ int init_node_manager(struct f2fs_sb_info *sbi) >> unsigned char *version_bitmap; >> unsigned int nat_segs, nat_blocks; >> >> - nm_i->nat_blkaddr = get_sb(nat_blkaddr); >> + nm_i->nat_blkaddr = get_val(sb, nat_blkaddr); >> >> /* segment_count_nat includes pair segment so divide to 2. */ >> - nat_segs = get_sb(segment_count_nat) >> 1; >> - nat_blocks = nat_segs << get_sb(log_blocks_per_seg); >> + nat_segs = get_val(sb, segment_count_nat) >> 1; >> + nat_blocks = nat_segs << get_val(sb, log_blocks_per_seg); >> nm_i->max_nid = NAT_ENTRY_PER_BLOCK * nat_blocks; >> nm_i->fcnt = 0; >> nm_i->nat_cnt = 0; >> - nm_i->init_scan_nid = get_cp(next_free_nid); >> - nm_i->next_scan_nid = get_cp(next_free_nid); >> + nm_i->init_scan_nid = get_val(cp, next_free_nid); >> + nm_i->next_scan_nid = get_val(cp, next_free_nid); >> >> nm_i->bitmap_size = __bitmap_size(sbi, NAT_BITMAP); >> >> @@ -597,21 +597,21 @@ int build_sit_info(struct f2fs_sb_info *sbi) >> return -ENOMEM; >> } >> >> - sit_segs = get_sb(segment_count_sit) >> 1; >> + sit_segs = get_val(sb, segment_count_sit) >> 1; >> bitmap_size = __bitmap_size(sbi, SIT_BITMAP); >> src_bitmap = __bitmap_ptr(sbi, SIT_BITMAP); >> >> dst_bitmap = malloc(bitmap_size); >> memcpy(dst_bitmap, src_bitmap, bitmap_size); >> >> - sit_i->sit_base_addr = get_sb(sit_blkaddr); >> + sit_i->sit_base_addr = get_val(sb, sit_blkaddr); >> sit_i->sit_blocks = sit_segs << sbi->log_blocks_per_seg; >> - sit_i->written_valid_blocks = get_cp(valid_block_count); >> + sit_i->written_valid_blocks = get_val(cp, valid_block_count); >> sit_i->sit_bitmap = dst_bitmap; >> sit_i->bitmap_size = bitmap_size; >> sit_i->dirty_sentries = 0; >> sit_i->sents_per_block = SIT_ENTRY_PER_BLOCK; >> - sit_i->elapsed_time = get_cp(elapsed_time); >> + sit_i->elapsed_time = get_val(cp, elapsed_time); >> return 0; >> } >> >> @@ -716,13 +716,13 @@ static void read_normal_summaries(struct f2fs_sb_info *sbi, int type) >> int ret; >> >> if (IS_DATASEG(type)) { >> - segno = get_cp(cur_data_segno[type]); >> + segno = get_val(cp, cur_data_segno[type]); >> if (is_set_ckpt_flags(cp, CP_UMOUNT_FLAG)) >> blk_addr = sum_blk_addr(sbi, NR_CURSEG_TYPE, type); >> else >> blk_addr = sum_blk_addr(sbi, NR_CURSEG_DATA_TYPE, type); >> } else { >> - segno = get_cp(cur_node_segno[type - CURSEG_HOT_NODE]); >> + segno = get_val(cp, cur_node_segno[type - CURSEG_HOT_NODE]); >> if (is_set_ckpt_flags(cp, CP_UMOUNT_FLAG)) >> blk_addr = sum_blk_addr(sbi, NR_CURSEG_NODE_TYPE, >> type - CURSEG_HOT_NODE); >> @@ -803,12 +803,12 @@ static void build_curseg(struct f2fs_sb_info *sbi) >> array[i].sum_blk = malloc(PAGE_CACHE_SIZE); >> ASSERT(array[i].sum_blk); >> if (i <= CURSEG_COLD_DATA) { >> - blk_off = get_cp(cur_data_blkoff[i]); >> - segno = get_cp(cur_data_segno[i]); >> + blk_off = get_val(cp, cur_data_blkoff[i]); >> + segno = get_val(cp, cur_data_segno[i]); >> } >> if (i > CURSEG_COLD_DATA) { >> - blk_off = get_cp(cur_node_blkoff[i - CURSEG_HOT_NODE]); >> - segno = get_cp(cur_node_segno[i - CURSEG_HOT_NODE]); >> + blk_off = get_val(cp, cur_node_blkoff[i - CURSEG_HOT_NODE]); >> + segno = get_val(cp, cur_node_segno[i - CURSEG_HOT_NODE]); >> } >> array[i].segno = segno; >> array[i].zone = GET_ZONENO_FROM_SEGNO(sbi, segno); >> @@ -924,7 +924,7 @@ struct f2fs_summary_block *get_sum_block(struct f2fs_sb_info *sbi, >> >> ssa_blk = GET_SUM_BLKADDR(sbi, segno); >> for (type = 0; type < NR_CURSEG_NODE_TYPE; type++) { >> - if (segno == get_cp(cur_node_segno[type])) { >> + if (segno == get_val(cp, cur_node_segno[type])) { >> curseg = CURSEG_I(sbi, CURSEG_HOT_NODE + type); >> if (!IS_SUM_NODE_SEG(curseg->sum_blk->footer)) { >> ASSERT_MSG("segno [0x%x] indicates a data " >> @@ -939,7 +939,7 @@ struct f2fs_summary_block *get_sum_block(struct f2fs_sb_info *sbi, >> } >> >> for (type = 0; type < NR_CURSEG_DATA_TYPE; type++) { >> - if (segno == get_cp(cur_data_segno[type])) { >> + if (segno == get_val(cp, cur_data_segno[type])) { >> curseg = CURSEG_I(sbi, type); >> if (IS_SUM_NODE_SEG(curseg->sum_blk->footer)) { >> ASSERT_MSG("segno [0x%x] indicates a node " >> @@ -1151,13 +1151,13 @@ int build_segment_manager(struct f2fs_sb_info *sbi) >> >> /* init sm info */ >> sbi->sm_info = sm_info; >> - sm_info->seg0_blkaddr = get_sb(segment0_blkaddr); >> - sm_info->main_blkaddr = get_sb(main_blkaddr); >> - sm_info->segment_count = get_sb(segment_count); >> - sm_info->reserved_segments = get_cp(rsvd_segment_count); >> - sm_info->ovp_segments = get_cp(overprov_segment_count); >> - sm_info->main_segments = get_sb(segment_count_main); >> - sm_info->ssa_blkaddr = get_sb(ssa_blkaddr); >> + sm_info->seg0_blkaddr = get_val(sb, segment0_blkaddr); >> + sm_info->main_blkaddr = get_val(sb, main_blkaddr); >> + sm_info->segment_count = get_val(sb, segment_count); >> + sm_info->reserved_segments = get_val(cp, rsvd_segment_count); >> + sm_info->ovp_segments = get_val(cp, overprov_segment_count); >> + sm_info->main_segments = get_val(sb, segment_count_main); >> + sm_info->ssa_blkaddr = get_val(sb, ssa_blkaddr); >> >> build_sit_info(sbi); >> >> @@ -1384,7 +1384,7 @@ void flush_sit_entries(struct f2fs_sb_info *sbi) >> free_segs++; >> } >> >> - set_cp(free_segment_count, free_segs); >> + set_val(cp, free_segment_count, free_segs); >> } >> >> int find_next_free_block(struct f2fs_sb_info *sbi, u64 *to, int left, int type) >> @@ -1487,14 +1487,14 @@ void write_curseg_info(struct f2fs_sb_info *sbi) >> for (i = 0; i < NO_CHECK_TYPE; i++) { >> cp->alloc_type[i] = CURSEG_I(sbi, i)->alloc_type; >> if (i < CURSEG_HOT_NODE) { >> - set_cp(cur_data_segno[i], CURSEG_I(sbi, i)->segno); >> - set_cp(cur_data_blkoff[i], >> + set_val(cp, cur_data_segno[i], CURSEG_I(sbi, i)->segno); >> + set_val(cp, cur_data_blkoff[i], >> CURSEG_I(sbi, i)->next_blkoff); >> } else { >> int n = i - CURSEG_HOT_NODE; >> >> - set_cp(cur_node_segno[n], CURSEG_I(sbi, i)->segno); >> - set_cp(cur_node_blkoff[n], >> + set_val(cp, cur_node_segno[n], CURSEG_I(sbi, i)->segno); >> + set_val(cp, cur_node_blkoff[n], >> CURSEG_I(sbi, i)->next_blkoff); >> } >> } >> @@ -1578,24 +1578,24 @@ void write_checkpoint(struct f2fs_sb_info *sbi) >> flags |= CP_ORPHAN_PRESENT_FLAG; >> } >> >> - set_cp(ckpt_flags, flags); >> + set_val(cp, ckpt_flags, flags); >> >> - set_cp(free_segment_count, get_free_segments(sbi)); >> - set_cp(cp_pack_total_block_count, 8 + orphan_blks + get_sb(cp_payload)); >> + set_val(cp, free_segment_count, get_free_segments(sbi)); >> + set_val(cp, cp_pack_total_block_count, 8 + orphan_blks + get_val(sb, cp_payload)); >> >> crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); >> *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); >> >> - cp_blk_no = get_sb(cp_blkaddr); >> + cp_blk_no = get_val(sb, cp_blkaddr); >> if (sbi->cur_cp == 2) >> - cp_blk_no += 1 << get_sb(log_blocks_per_seg); >> + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); >> >> /* write the first cp */ >> ret = dev_write_block(cp, cp_blk_no++); >> ASSERT(ret >= 0); >> >> /* skip payload */ >> - cp_blk_no += get_sb(cp_payload); >> + cp_blk_no += get_val(sb, cp_payload); >> /* skip orphan blocks */ >> cp_blk_no += orphan_blks; >> >> @@ -1635,7 +1635,7 @@ void build_nat_area_bitmap(struct f2fs_sb_info *sbi) >> ASSERT(nat_block); >> >> /* Alloc & build nat entry bitmap */ >> - nr_nat_blks = (get_sb(segment_count_nat) / 2) << >> + nr_nat_blks = (get_val(sb, segment_count_nat) / 2) << >> sbi->log_blocks_per_seg; >> >> fsck->nr_nat_entries = nr_nat_blks * NAT_ENTRY_PER_BLOCK; >> @@ -1731,7 +1731,7 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi) >> print_ckpt_info(sbi); >> >> if (config.auto_fix) { >> - u32 flag = get_cp(ckpt_flags); >> + u32 flag = get_val(cp, ckpt_flags); >> >> if (flag & CP_FSCK_FLAG) >> config.fix_on = 1; >> @@ -1741,10 +1741,10 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi) >> >> config.bug_on = 0; >> >> - sbi->total_valid_node_count = get_cp(valid_node_count); >> - sbi->total_valid_inode_count = get_cp(valid_inode_count); >> - sbi->user_block_count = get_cp(user_block_count); >> - sbi->total_valid_block_count = get_cp(valid_block_count); >> + sbi->total_valid_node_count = get_val(cp, valid_node_count); >> + sbi->total_valid_inode_count = get_val(cp, valid_inode_count); >> + sbi->user_block_count = get_val(cp, user_block_count); >> + sbi->total_valid_block_count = get_val(cp, valid_block_count); >> sbi->last_valid_block_count = sbi->total_valid_block_count; >> sbi->alloc_valid_block_count = 0; >> >> diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h >> index e1eeb6e..2ab9f49 100644 >> --- a/include/f2fs_fs.h >> +++ b/include/f2fs_fs.h >> @@ -270,60 +270,32 @@ struct f2fs_configuration { >> #define BIT_MASK(nr) (1 << (nr % BITS_PER_LONG)) >> #define BIT_WORD(nr) (nr / BITS_PER_LONG) >> >> -#define set_sb_le64(member, val) (sb->member = cpu_to_le64(val)) >> -#define set_sb_le32(member, val) (sb->member = cpu_to_le32(val)) >> -#define set_sb_le16(member, val) (sb->member = cpu_to_le16(val)) >> -#define get_sb_le64(member) le64_to_cpu(sb->member) >> -#define get_sb_le32(member) le32_to_cpu(sb->member) >> -#define get_sb_le16(member) le16_to_cpu(sb->member) >> - >> -#define set_sb(member, val) \ >> - do { \ >> - typeof(sb->member) t; \ >> - switch (sizeof(t)) { \ >> - case 8: set_sb_le64(member, val); break; \ >> - case 4: set_sb_le32(member, val); break; \ >> - case 2: set_sb_le16(member, val); break; \ >> - } \ >> +#define set_le64(ptr, member, val) ((ptr)->member = cpu_to_le64(val)) >> +#define set_le32(ptr, member, val) ((ptr)->member = cpu_to_le32(val)) >> +#define set_le16(ptr, member, val) ((ptr)->member = cpu_to_le16(val)) >> +#define get_le64(ptr, member) le64_to_cpu((ptr)->member) >> +#define get_le32(ptr, member) le32_to_cpu((ptr)->member) >> +#define get_le16(ptr, member) le16_to_cpu((ptr)->member) >> + >> +#define set_val(ptr, member, val) \ >> + do { \ >> + typeof((ptr)->member) t; \ >> + switch (sizeof(t)) { \ >> + case 8: set_le64(ptr, member, val); break; \ >> + case 4: set_le32(ptr, member, val); break; \ >> + case 2: set_le16(ptr, member, val); break; \ >> + } \ >> } while(0) >> >> -#define get_sb(member) \ >> - ({ \ >> - typeof(sb->member) t; \ >> - switch (sizeof(t)) { \ >> - case 8: t = get_sb_le64(member); break; \ >> - case 4: t = get_sb_le32(member); break; \ >> - case 2: t = get_sb_le16(member); break; \ >> - } \ >> - t; \ >> - }) >> - >> -#define set_cp_le64(member, val) (cp->member = cpu_to_le64(val)) >> -#define set_cp_le32(member, val) (cp->member = cpu_to_le32(val)) >> -#define set_cp_le16(member, val) (cp->member = cpu_to_le16(val)) >> -#define get_cp_le64(member) le64_to_cpu(cp->member) >> -#define get_cp_le32(member) le32_to_cpu(cp->member) >> -#define get_cp_le16(member) le16_to_cpu(cp->member) >> - >> -#define set_cp(member, val) \ >> - do { \ >> - typeof(cp->member) t; \ >> - switch (sizeof(t)) { \ >> - case 8: set_cp_le64(member, val); break; \ >> - case 4: set_cp_le32(member, val); break; \ >> - case 2: set_cp_le16(member, val); break; \ >> - } \ >> - } while(0) >> - >> -#define get_cp(member) \ >> - ({ \ >> - typeof(cp->member) t; \ >> - switch (sizeof(t)) { \ >> - case 8: t = get_cp_le64(member); break; \ >> - case 4: t = get_cp_le32(member); break; \ >> - case 2: t = get_cp_le16(member); break; \ >> - } \ >> - t; \ >> +#define get_val(ptr, member) \ >> + ({ \ >> + typeof((ptr)->member) t; \ >> + switch (sizeof(t)) { \ >> + case 8: t = get_le64(ptr, member); break; \ >> + case 4: t = get_le32(ptr, member); break; \ >> + case 2: t = get_le16(ptr, member); break; \ >> + } \ >> + t; \ >> }) >> >> /* >> @@ -899,7 +871,7 @@ static inline double get_best_overprovision(struct f2fs_super_block *sb) >> double reserved, ovp, candidate, end, diff, space; >> double max_ovp = 0, max_space = 0; >> >> - if (get_sb(segment_count_main) < 256) { >> + if (get_val(sb, segment_count_main) < 256) { >> candidate = 10; >> end = 95; >> diff = 5; >> @@ -911,9 +883,9 @@ static inline double get_best_overprovision(struct f2fs_super_block *sb) >> >> for (; candidate <= end; candidate += diff) { >> reserved = (2 * (100 / candidate + 1) + 6) * >> - get_sb(segs_per_sec); >> - ovp = (get_sb(segment_count_main) - reserved) * candidate / 100; >> - space = get_sb(segment_count_main) - reserved - ovp; >> + get_val(sb, segs_per_sec); >> + ovp = (get_val(sb, segment_count_main) - reserved) * candidate / 100; >> + space = get_val(sb, segment_count_main) - reserved - ovp; >> if (max_space < space) { >> max_space = space; >> max_ovp = candidate; >> diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c >> index 645c2aa..db5348e 100644 >> --- a/mkfs/f2fs_format.c >> +++ b/mkfs/f2fs_format.c >> @@ -83,7 +83,7 @@ static void configure_extension_list(void) >> int name_len; >> int i = 0; >> >> - set_sb(extension_count, 0); >> + set_val(sb, extension_count, 0); >> memset(sb->extension_list, 0, sizeof(sb->extension_list)); >> >> while (*extlist) { >> @@ -91,7 +91,7 @@ static void configure_extension_list(void) >> memcpy(sb->extension_list[i++], *extlist, name_len); >> extlist++; >> } >> - set_sb(extension_count, i); >> + set_val(sb, extension_count, i); >> >> if (!ext_str) >> return; >> @@ -112,7 +112,7 @@ next: >> break; >> } >> >> - set_sb(extension_count, i); >> + set_val(sb, extension_count, i); >> >> free(config.extension_list); >> } >> @@ -132,23 +132,23 @@ static int f2fs_prepare_super_block(void) >> u_int32_t max_nat_bitmap_size, max_nat_segments; >> u_int32_t total_zones; >> >> - set_sb(magic, F2FS_SUPER_MAGIC); >> - set_sb(major_ver, F2FS_MAJOR_VERSION); >> - set_sb(minor_ver, F2FS_MINOR_VERSION); >> + set_val(sb, magic, F2FS_SUPER_MAGIC); >> + set_val(sb, major_ver, F2FS_MAJOR_VERSION); >> + set_val(sb, minor_ver, F2FS_MINOR_VERSION); >> >> log_sectorsize = log_base_2(config.sector_size); >> log_sectors_per_block = log_base_2(config.sectors_per_blk); >> log_blocksize = log_sectorsize + log_sectors_per_block; >> log_blks_per_seg = log_base_2(config.blks_per_seg); >> >> - set_sb(log_sectorsize, log_sectorsize); >> - set_sb(log_sectors_per_block, log_sectors_per_block); >> + set_val(sb, log_sectorsize, log_sectorsize); >> + set_val(sb, log_sectors_per_block, log_sectors_per_block); >> >> - set_sb(log_blocksize, log_blocksize); >> - set_sb(log_blocks_per_seg, log_blks_per_seg); >> + set_val(sb, log_blocksize, log_blocksize); >> + set_val(sb, log_blocks_per_seg, log_blks_per_seg); >> >> - set_sb(segs_per_sec, config.segs_per_sec); >> - set_sb(secs_per_zone, config.secs_per_zone); >> + set_val(sb, segs_per_sec, config.segs_per_sec); >> + set_val(sb, secs_per_zone, config.secs_per_zone); >> >> blk_size_bytes = 1 << log_blocksize; >> segment_size_bytes = blk_size_bytes * config.blks_per_seg; >> @@ -156,9 +156,9 @@ static int f2fs_prepare_super_block(void) >> blk_size_bytes * config.secs_per_zone * >> config.segs_per_sec * config.blks_per_seg; >> >> - set_sb(checksum_offset, 0); >> + set_val(sb, checksum_offset, 0); >> >> - set_sb(block_count, config.total_sectors >> log_sectors_per_block); >> + set_val(sb, block_count, config.total_sectors >> log_sectors_per_block); >> >> zone_align_start_offset = >> (config.start_sector * config.sector_size + >> @@ -174,41 +174,41 @@ static int f2fs_prepare_super_block(void) >> config.sectors_per_blk); >> } >> >> - set_sb(segment_count, (config.total_sectors * config.sector_size - >> + set_val(sb, segment_count, (config.total_sectors * config.sector_size - >> zone_align_start_offset) / segment_size_bytes); >> >> - set_sb(segment0_blkaddr, zone_align_start_offset / blk_size_bytes); >> + set_val(sb, segment0_blkaddr, zone_align_start_offset / blk_size_bytes); >> sb->cp_blkaddr = sb->segment0_blkaddr; >> >> - MSG(0, "Info: zone aligned segment0 blkaddr: %u\n", get_sb(segment0_blkaddr)); >> + MSG(0, "Info: zone aligned segment0 blkaddr: %u\n", get_val(sb, segment0_blkaddr)); >> >> - set_sb(segment_count_ckpt, F2FS_NUMBER_OF_CHECKPOINT_PACK); >> + set_val(sb, segment_count_ckpt, F2FS_NUMBER_OF_CHECKPOINT_PACK); >> >> - set_sb(sit_blkaddr, get_sb(segment0_blkaddr) + get_sb(segment_count_ckpt) * >> + set_val(sb, sit_blkaddr, get_val(sb, segment0_blkaddr) + get_val(sb, segment_count_ckpt) * >> config.blks_per_seg); >> >> - blocks_for_sit = ALIGN(get_sb(segment_count), SIT_ENTRY_PER_BLOCK); >> + blocks_for_sit = ALIGN(get_val(sb, segment_count), SIT_ENTRY_PER_BLOCK); >> >> sit_segments = SEG_ALIGN(blocks_for_sit); >> >> - set_sb(segment_count_sit, sit_segments * 2); >> + set_val(sb, segment_count_sit, sit_segments * 2); >> >> - set_sb(nat_blkaddr, get_sb(sit_blkaddr) + get_sb(segment_count_sit) * >> + set_val(sb, nat_blkaddr, get_val(sb, sit_blkaddr) + get_val(sb, segment_count_sit) * >> config.blks_per_seg); >> >> - total_valid_blks_available = (get_sb(segment_count) - >> - (get_sb(segment_count_ckpt) + get_sb(segment_count_sit))) * >> + total_valid_blks_available = (get_val(sb, segment_count) - >> + (get_val(sb, segment_count_ckpt) + get_val(sb, segment_count_sit))) * >> config.blks_per_seg; >> >> blocks_for_nat = ALIGN(total_valid_blks_available, NAT_ENTRY_PER_BLOCK); >> >> - set_sb(segment_count_nat, SEG_ALIGN(blocks_for_nat)); >> + set_val(sb, segment_count_nat, SEG_ALIGN(blocks_for_nat)); >> /* >> * The number of node segments should not be exceeded a "Threshold". >> * This number resizes NAT bitmap area in a CP page. >> * So the threshold is determined not to overflow one CP page >> */ >> - sit_bitmap_size = ((get_sb(segment_count_sit) / 2) << >> + sit_bitmap_size = ((get_val(sb, segment_count_sit) / 2) << >> log_blks_per_seg) / 8; >> >> if (sit_bitmap_size > MAX_SIT_BITMAP_SIZE) >> @@ -223,55 +223,55 @@ static int f2fs_prepare_super_block(void) >> if (max_sit_bitmap_size > >> (CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1 - 64)) { >> max_nat_bitmap_size = CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1; >> - set_sb(cp_payload, F2FS_BLK_ALIGN(max_sit_bitmap_size)); >> + set_val(sb, cp_payload, F2FS_BLK_ALIGN(max_sit_bitmap_size)); >> } else { >> max_nat_bitmap_size = CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1 >> - max_sit_bitmap_size; >> - set_sb(cp_payload, 0); >> + set_val(sb, cp_payload, 0); >> } >> >> max_nat_segments = (max_nat_bitmap_size * 8) >> log_blks_per_seg; >> >> - if (get_sb(segment_count_nat) > max_nat_segments) >> - set_sb(segment_count_nat, max_nat_segments); >> + if (get_val(sb, segment_count_nat) > max_nat_segments) >> + set_val(sb, segment_count_nat, max_nat_segments); >> >> - set_sb(segment_count_nat, get_sb(segment_count_nat) * 2); >> + set_val(sb, segment_count_nat, get_val(sb, segment_count_nat) * 2); >> >> - set_sb(ssa_blkaddr, get_sb(nat_blkaddr) + get_sb(segment_count_nat) * >> + set_val(sb, ssa_blkaddr, get_val(sb, nat_blkaddr) + get_val(sb, segment_count_nat) * >> config.blks_per_seg); >> >> - total_valid_blks_available = (get_sb(segment_count) - >> - (get_sb(segment_count_ckpt) + >> - get_sb(segment_count_sit) + >> - get_sb(segment_count_nat))) * >> + total_valid_blks_available = (get_val(sb, segment_count) - >> + (get_val(sb, segment_count_ckpt) + >> + get_val(sb, segment_count_sit) + >> + get_val(sb, segment_count_nat))) * >> config.blks_per_seg; >> >> blocks_for_ssa = total_valid_blks_available / >> config.blks_per_seg + 1; >> >> - set_sb(segment_count_ssa, SEG_ALIGN(blocks_for_ssa)); >> + set_val(sb, segment_count_ssa, SEG_ALIGN(blocks_for_ssa)); >> >> - total_meta_segments = get_sb(segment_count_ckpt) + >> - get_sb(segment_count_sit) + >> - get_sb(segment_count_nat) + >> - get_sb(segment_count_ssa); >> + total_meta_segments = get_val(sb, segment_count_ckpt) + >> + get_val(sb, segment_count_sit) + >> + get_val(sb, segment_count_nat) + >> + get_val(sb, segment_count_ssa); >> diff = total_meta_segments % (config.segs_per_zone); >> if (diff) >> - set_sb(segment_count_ssa, get_sb(segment_count_ssa) + >> + set_val(sb, segment_count_ssa, get_val(sb, segment_count_ssa) + >> (config.segs_per_zone - diff)); >> >> total_meta_zones = ZONE_ALIGN(total_meta_segments * >> config.blks_per_seg); >> >> - set_sb(main_blkaddr, get_sb(segment0_blkaddr) + total_meta_zones * >> + set_val(sb, main_blkaddr, get_val(sb, segment0_blkaddr) + total_meta_zones * >> config.segs_per_zone * config.blks_per_seg); >> >> - total_zones = get_sb(segment_count) / (config.segs_per_zone) - >> + total_zones = get_val(sb, segment_count) / (config.segs_per_zone) - >> total_meta_zones; >> >> - set_sb(section_count, total_zones * config.secs_per_zone); >> + set_val(sb, section_count, total_zones * config.secs_per_zone); >> >> - set_sb(segment_count_main, get_sb(section_count) * config.segs_per_sec); >> + set_val(sb, segment_count_main, get_val(sb, section_count) * config.segs_per_sec); >> >> /* Let's determine the best reserved and overprovisioned space */ >> if (config.overprovision == 0) >> @@ -281,12 +281,12 @@ static int f2fs_prepare_super_block(void) >> (2 * (100 / config.overprovision + 1) + 6) >> * config.segs_per_sec; >> >> - if ((get_sb(segment_count_main) - 2) < >> + if ((get_val(sb, segment_count_main) - 2) < >> config.reserved_segments) { >> MSG(1, "\tError: Device size is not sufficient for F2FS volume,\ >> more segment needed =%u", >> config.reserved_segments - >> - (get_sb(segment_count_main) - 2)); >> + (get_val(sb, segment_count_main) - 2)); >> return -1; >> } >> >> @@ -294,9 +294,9 @@ static int f2fs_prepare_super_block(void) >> >> utf8_to_utf16(sb->volume_name, (const char *)config.vol_label, >> MAX_VOLUME_NAME, strlen(config.vol_label)); >> - set_sb(node_ino, 1); >> - set_sb(meta_ino, 2); >> - set_sb(root_ino, 3); >> + set_val(sb, node_ino, 1); >> + set_val(sb, meta_ino, 2); >> + set_val(sb, root_ino, 3); >> >> if (total_zones <= 6) { >> MSG(1, "\tError: %d zones: Need more zones \ >> @@ -346,8 +346,8 @@ static int f2fs_init_sit_area(void) >> u_int64_t sit_seg_addr = 0; >> u_int8_t *zero_buf = NULL; >> >> - blk_size = 1 << get_sb(log_blocksize); >> - seg_size = (1 << get_sb(log_blocks_per_seg)) * blk_size; >> + blk_size = 1 << get_val(sb, log_blocksize); >> + seg_size = (1 << get_val(sb, log_blocks_per_seg)) * blk_size; >> >> zero_buf = calloc(sizeof(u_int8_t), seg_size); >> if(zero_buf == NULL) { >> @@ -355,11 +355,11 @@ static int f2fs_init_sit_area(void) >> return -1; >> } >> >> - sit_seg_addr = get_sb(sit_blkaddr); >> + sit_seg_addr = get_val(sb, sit_blkaddr); >> sit_seg_addr *= blk_size; >> >> DBG(1, "\tFilling sit area at offset 0x%08"PRIx64"\n", sit_seg_addr); >> - for (index = 0; index < (get_sb(segment_count_sit) / 2); index++) { >> + for (index = 0; index < (get_val(sb, segment_count_sit) / 2); index++) { >> if (dev_fill(zero_buf, sit_seg_addr, seg_size)) { >> MSG(1, "\tError: While zeroing out the sit area \ >> on disk!!!\n"); >> @@ -380,8 +380,8 @@ static int f2fs_init_nat_area(void) >> u_int64_t nat_seg_addr = 0; >> u_int8_t *nat_buf = NULL; >> >> - blk_size = 1 << get_sb(log_blocksize); >> - seg_size = (1 << get_sb(log_blocks_per_seg)) * blk_size; >> + blk_size = 1 << get_val(sb, log_blocksize); >> + seg_size = (1 << get_val(sb, log_blocks_per_seg)) * blk_size; >> >> nat_buf = calloc(sizeof(u_int8_t), seg_size); >> if (nat_buf == NULL) { >> @@ -389,11 +389,11 @@ static int f2fs_init_nat_area(void) >> return -1; >> } >> >> - nat_seg_addr = get_sb(nat_blkaddr); >> + nat_seg_addr = get_val(sb, nat_blkaddr); >> nat_seg_addr *= blk_size; >> >> DBG(1, "\tFilling nat area at offset 0x%08"PRIx64"\n", nat_seg_addr); >> - for (index = 0; index < get_sb(segment_count_nat) / 2; index++) { >> + for (index = 0; index < get_val(sb, segment_count_nat) / 2; index++) { >> if (dev_fill(nat_buf, nat_seg_addr, seg_size)) { >> MSG(1, "\tError: While zeroing out the nat area \ >> on disk!!!\n"); >> @@ -445,58 +445,58 @@ static int f2fs_write_check_point_pack(void) >> } >> >> /* 1. cp page 1 of checkpoint pack 1 */ >> - set_cp(checkpoint_ver, 1); >> - set_cp(cur_node_segno[0], config.cur_seg[CURSEG_HOT_NODE]); >> - set_cp(cur_node_segno[1], config.cur_seg[CURSEG_WARM_NODE]); >> - set_cp(cur_node_segno[2], config.cur_seg[CURSEG_COLD_NODE]); >> - set_cp(cur_data_segno[0], config.cur_seg[CURSEG_HOT_DATA]); >> - set_cp(cur_data_segno[1], config.cur_seg[CURSEG_WARM_DATA]); >> - set_cp(cur_data_segno[2], config.cur_seg[CURSEG_COLD_DATA]); >> + set_val(cp, checkpoint_ver, 1); >> + set_val(cp, cur_node_segno[0], config.cur_seg[CURSEG_HOT_NODE]); >> + set_val(cp, cur_node_segno[1], config.cur_seg[CURSEG_WARM_NODE]); >> + set_val(cp, cur_node_segno[2], config.cur_seg[CURSEG_COLD_NODE]); >> + set_val(cp, cur_data_segno[0], config.cur_seg[CURSEG_HOT_DATA]); >> + set_val(cp, cur_data_segno[1], config.cur_seg[CURSEG_WARM_DATA]); >> + set_val(cp, cur_data_segno[2], config.cur_seg[CURSEG_COLD_DATA]); >> for (i = 3; i < MAX_ACTIVE_NODE_LOGS; i++) { >> - set_cp(cur_node_segno[i], 0xffffffff); >> - set_cp(cur_data_segno[i], 0xffffffff); >> + set_val(cp, cur_node_segno[i], 0xffffffff); >> + set_val(cp, cur_data_segno[i], 0xffffffff); >> } >> >> - set_cp(cur_node_blkoff[0], 1); >> - set_cp(cur_data_blkoff[0], 1); >> - set_cp(valid_block_count, 2); >> - set_cp(rsvd_segment_count, config.reserved_segments); >> - set_cp(overprov_segment_count, (get_sb(segment_count_main) - >> - get_cp(rsvd_segment_count)) * >> + set_val(cp, cur_node_blkoff[0], 1); >> + set_val(cp, cur_data_blkoff[0], 1); >> + set_val(cp, valid_block_count, 2); >> + set_val(cp, rsvd_segment_count, config.reserved_segments); >> + set_val(cp, overprov_segment_count, (get_val(sb, segment_count_main) - >> + get_val(cp, rsvd_segment_count)) * >> config.overprovision / 100); >> - set_cp(overprov_segment_count, get_cp(overprov_segment_count) + >> - get_cp(rsvd_segment_count)); >> + set_val(cp, overprov_segment_count, get_val(cp, overprov_segment_count) + >> + get_val(cp, rsvd_segment_count)); >> >> MSG(0, "Info: Overprovision ratio = %.3lf%%\n", config.overprovision); >> MSG(0, "Info: Overprovision segments = %u (GC reserved = %u)\n", >> - get_cp(overprov_segment_count), >> + get_val(cp, overprov_segment_count), >> config.reserved_segments); >> >> /* main segments - reserved segments - (node + data segments) */ >> - set_cp(free_segment_count, get_sb(segment_count_main) - 6); >> - set_cp(user_block_count, ((get_cp(free_segment_count) + 6 - >> - get_cp(overprov_segment_count)) * config.blks_per_seg)); >> + set_val(cp, free_segment_count, get_val(sb, segment_count_main) - 6); >> + set_val(cp, user_block_count, ((get_val(cp, free_segment_count) + 6 - >> + get_val(cp, overprov_segment_count)) * config.blks_per_seg)); >> /* cp page (2), data summaries (1), node summaries (3) */ >> - set_cp(cp_pack_total_block_count, 6 + get_sb(cp_payload)); >> - set_cp(ckpt_flags, CP_UMOUNT_FLAG | CP_COMPACT_SUM_FLAG); >> - set_cp(cp_pack_start_sum, 1 + get_sb(cp_payload)); >> - set_cp(valid_node_count, 1); >> - set_cp(valid_inode_count, 1); >> - set_cp(next_free_nid, get_sb(root_ino) + 1); >> - set_cp(sit_ver_bitmap_bytesize, ((get_sb(segment_count_sit) / 2) << >> - get_sb(log_blocks_per_seg)) / 8); >> + set_val(cp, cp_pack_total_block_count, 6 + get_val(sb, cp_payload)); >> + set_val(cp, ckpt_flags, CP_UMOUNT_FLAG | CP_COMPACT_SUM_FLAG); >> + set_val(cp, cp_pack_start_sum, 1 + get_val(sb, cp_payload)); >> + set_val(cp, valid_node_count, 1); >> + set_val(cp, valid_inode_count, 1); >> + set_val(cp, next_free_nid, get_val(sb, root_ino) + 1); >> + set_val(cp, sit_ver_bitmap_bytesize, ((get_val(sb, segment_count_sit) / 2) << >> + get_val(sb, log_blocks_per_seg)) / 8); >> >> - set_cp(nat_ver_bitmap_bytesize, ((get_sb(segment_count_nat) / 2) << >> - get_sb(log_blocks_per_seg)) / 8); >> + set_val(cp, nat_ver_bitmap_bytesize, ((get_val(sb, segment_count_nat) / 2) << >> + get_val(sb, log_blocks_per_seg)) / 8); >> >> - set_cp(checksum_offset, CHECKSUM_OFFSET); >> + set_val(cp, checksum_offset, CHECKSUM_OFFSET); >> >> crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); >> *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = >> cpu_to_le32(crc); >> >> - blk_size_bytes = 1 << get_sb(log_blocksize); >> - cp_seg_blk_offset = get_sb(segment0_blkaddr); >> + blk_size_bytes = 1 << get_val(sb, log_blocksize); >> + cp_seg_blk_offset = get_val(sb, segment0_blkaddr); >> cp_seg_blk_offset *= blk_size_bytes; >> >> DBG(1, "\tWriting main segments, cp at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); >> @@ -505,7 +505,7 @@ static int f2fs_write_check_point_pack(void) >> goto free_cp_payload; >> } >> >> - for (i = 0; i < get_sb(cp_payload); i++) { >> + for (i = 0; i < get_val(sb, cp_payload); i++) { >> cp_seg_blk_offset += blk_size_bytes; >> if (dev_fill(cp_payload, cp_seg_blk_offset, blk_size_bytes)) { >> MSG(1, "\tError: While zeroing out the sit bitmap area \ >> @@ -537,8 +537,8 @@ static int f2fs_write_check_point_pack(void) >> sum->nat_j.entries[0].ne.version = 0; >> sum->nat_j.entries[0].ne.ino = sb->root_ino; >> sum->nat_j.entries[0].ne.block_addr = cpu_to_le32( >> - get_sb(main_blkaddr) + >> - get_cp(cur_node_segno[0]) * config.blks_per_seg); >> + get_val(sb, main_blkaddr) + >> + get_val(cp, cur_node_segno[0]) * config.blks_per_seg); >> >> memcpy(sum_compact_p, &sum->n_nats, SUM_JOURNAL_SIZE); >> sum_compact_p += SUM_JOURNAL_SIZE; >> @@ -635,7 +635,7 @@ static int f2fs_write_check_point_pack(void) >> crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); >> *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = >> cpu_to_le32(crc); >> - cp_seg_blk_offset = (get_sb(segment0_blkaddr) + >> + cp_seg_blk_offset = (get_val(sb, segment0_blkaddr) + >> config.blks_per_seg) * >> blk_size_bytes; >> DBG(1, "\tWriting cp page 1 of checkpoint pack 2, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); >> @@ -644,7 +644,7 @@ static int f2fs_write_check_point_pack(void) >> goto free_cp_payload; >> } >> >> - for (i = 0; i < get_sb(cp_payload); i++) { >> + for (i = 0; i < get_val(sb, cp_payload); i++) { >> cp_seg_blk_offset += blk_size_bytes; >> if (dev_fill(cp_payload, cp_seg_blk_offset, blk_size_bytes)) { >> MSG(1, "\tError: While zeroing out the sit bitmap area \ >> @@ -655,7 +655,7 @@ static int f2fs_write_check_point_pack(void) >> >> /* cp page 2 of check point pack 2 */ >> cp_seg_blk_offset += blk_size_bytes * (le32_to_cpu(cp->cp_pack_total_block_count) >> - - get_sb(cp_payload) - 1); >> + - get_val(sb, cp_payload) - 1); >> DBG(1, "\tWriting cp page 2 of checkpoint pack 2, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); >> if (dev_write(cp, cp_seg_blk_offset, blk_size_bytes)) { >> MSG(1, "\tError: While writing the cp to disk!!!\n"); >> @@ -701,8 +701,8 @@ static int f2fs_write_super_block(void) >> static int discard_obsolete_dnode(struct f2fs_node *raw_node, u_int64_t offset) >> { >> do { >> - if (offset < get_sb(main_blkaddr) || >> - offset >= get_sb(main_blkaddr) + get_sb(block_count)) >> + if (offset < get_val(sb, main_blkaddr) || >> + offset >= get_val(sb, main_blkaddr) + get_val(sb, block_count)) >> break; >> >> if (dev_read_block(raw_node, offset)) { >> @@ -740,7 +740,7 @@ static int f2fs_write_root_inode(void) >> raw_node->footer.ino = sb->root_ino; >> raw_node->footer.cp_ver = cpu_to_le64(1); >> raw_node->footer.next_blkaddr = cpu_to_le32( >> - get_sb(main_blkaddr) + >> + get_val(sb, main_blkaddr) + >> config.cur_seg[CURSEG_HOT_NODE] * >> config.blks_per_seg + 1); >> >> @@ -749,7 +749,7 @@ static int f2fs_write_root_inode(void) >> raw_node->i.i_uid = cpu_to_le32(getuid()); >> raw_node->i.i_gid = cpu_to_le32(getgid()); >> >> - blk_size_bytes = 1 << get_sb(log_blocksize); >> + blk_size_bytes = 1 << get_val(sb, log_blocksize); >> raw_node->i.i_size = cpu_to_le64(1 * blk_size_bytes); /* dentry */ >> raw_node->i.i_blocks = cpu_to_le64(2); >> >> @@ -765,7 +765,7 @@ static int f2fs_write_root_inode(void) >> raw_node->i.i_current_depth = cpu_to_le32(1); >> raw_node->i.i_dir_level = DEF_DIR_LEVEL; >> >> - data_blk_nor = get_sb(main_blkaddr) + >> + data_blk_nor = get_val(sb, main_blkaddr) + >> config.cur_seg[CURSEG_HOT_DATA] * config.blks_per_seg; >> raw_node->i.i_addr[0] = cpu_to_le32(data_blk_nor); >> >> @@ -773,7 +773,7 @@ static int f2fs_write_root_inode(void) >> raw_node->i.i_ext.blk_addr = 0; >> raw_node->i.i_ext.len = 0; >> >> - main_area_node_seg_blk_offset = get_sb(main_blkaddr); >> + main_area_node_seg_blk_offset = get_val(sb, main_blkaddr); >> main_area_node_seg_blk_offset += config.cur_seg[CURSEG_HOT_NODE] * >> config.blks_per_seg; >> main_area_node_seg_blk_offset *= blk_size_bytes; >> @@ -786,7 +786,7 @@ static int f2fs_write_root_inode(void) >> } >> >> /* avoid power-off-recovery based on roll-forward policy */ >> - main_area_node_seg_blk_offset = get_sb(main_blkaddr); >> + main_area_node_seg_blk_offset = get_val(sb, main_blkaddr); >> main_area_node_seg_blk_offset += config.cur_seg[CURSEG_WARM_NODE] * >> config.blks_per_seg; >> >> @@ -813,21 +813,21 @@ static int f2fs_update_nat_root(void) >> } >> >> /* update root */ >> - nat_blk->entries[get_sb(root_ino)].block_addr = cpu_to_le32( >> - get_sb(main_blkaddr) + >> + nat_blk->entries[get_val(sb, root_ino)].block_addr = cpu_to_le32( >> + get_val(sb, main_blkaddr) + >> config.cur_seg[CURSEG_HOT_NODE] * config.blks_per_seg); >> - nat_blk->entries[get_sb(root_ino)].ino = sb->root_ino; >> + nat_blk->entries[get_val(sb, root_ino)].ino = sb->root_ino; >> >> /* update node nat */ >> - nat_blk->entries[get_sb(node_ino)].block_addr = cpu_to_le32(1); >> - nat_blk->entries[get_sb(node_ino)].ino = sb->node_ino; >> + nat_blk->entries[get_val(sb, node_ino)].block_addr = cpu_to_le32(1); >> + nat_blk->entries[get_val(sb, node_ino)].ino = sb->node_ino; >> >> /* update meta nat */ >> - nat_blk->entries[get_sb(meta_ino)].block_addr = cpu_to_le32(1); >> - nat_blk->entries[get_sb(meta_ino)].ino = sb->meta_ino; >> + nat_blk->entries[get_val(sb, meta_ino)].block_addr = cpu_to_le32(1); >> + nat_blk->entries[get_val(sb, meta_ino)].ino = sb->meta_ino; >> >> - blk_size_bytes = 1 << get_sb(log_blocksize); >> - nat_seg_blk_offset = get_sb(nat_blkaddr); >> + blk_size_bytes = 1 << get_val(sb, log_blocksize); >> + nat_seg_blk_offset = get_val(sb, nat_blkaddr); >> nat_seg_blk_offset *= blk_size_bytes; >> >> DBG(1, "\tWriting nat root, at offset 0x%08"PRIx64"\n", nat_seg_blk_offset); >> @@ -867,8 +867,8 @@ static int f2fs_add_default_dentry_root(void) >> /* bitmap for . and .. */ >> test_and_set_bit_le(0, dent_blk->dentry_bitmap); >> test_and_set_bit_le(1, dent_blk->dentry_bitmap); >> - blk_size_bytes = 1 << get_sb(log_blocksize); >> - data_blk_offset = get_sb(main_blkaddr); >> + blk_size_bytes = 1 << get_val(sb, log_blocksize); >> + data_blk_offset = get_val(sb, main_blkaddr); >> data_blk_offset += config.cur_seg[CURSEG_HOT_DATA] * >> config.blks_per_seg; >> data_blk_offset *= blk_size_bytes; >> -- >> 1.9.1 >> >> >> ------------------------------------------------------------------------------ >> Site24x7 APM Insight: Get Deep Visibility into Application Performance >> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month >> Monitor end-to-end web transactions and take corrective actions now >> Troubleshoot faster and improve end-user experience. Signup Now! >> http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 >> _______________________________________________ >> Linux-f2fs-devel mailing list >> Linux-f2fs-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel > > . > ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [RFC PATCH v2] f2fs-tools: simplify get_{sb|cp} and set_{sb|cp} 2016-01-30 2:25 ` Sheng Yong @ 2016-01-30 10:03 ` Sheng Yong 2016-02-02 0:27 ` [RFC PATCH 1/4] " Jaegeuk Kim 1 sibling, 0 replies; 9+ messages in thread From: Sheng Yong @ 2016-01-30 10:03 UTC (permalink / raw) To: Jaegeuk Kim; +Cc: linux-f2fs-devel * Remove dumplicated definitions of get_{sb|cp} and set_{sb|cp}, and introduce micros get_val and set_val instead. * Add a new parameter to get_val and set_val so that they do not depended on implied definition of `sb' and `cp'. * Keep get_{sb|cp} and set_{sb|cp} for compatible reason. Signed-off-by: Sheng Yong <shengyong1@huawei.com> --- fsck/fsck.c | 20 ++--- fsck/main.c | 8 +- fsck/mount.c | 146 ++++++++++++++++----------------- include/f2fs_fs.h | 88 ++++++++------------ mkfs/f2fs_format.c | 234 ++++++++++++++++++++++++++--------------------------- 5 files changed, 237 insertions(+), 259 deletions(-) diff --git a/fsck/fsck.c b/fsck/fsck.c index e7dd02f..4fbb56d 100644 --- a/fsck/fsck.c +++ b/fsck/fsck.c @@ -1191,7 +1191,7 @@ void fsck_chk_orphan_node(struct f2fs_sb_info *sbi) if (!is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ORPHAN_PRESENT_FLAG)) return; - start_blk = __start_cp_addr(sbi) + 1 + get_sb(cp_payload); + start_blk = __start_cp_addr(sbi) + 1 + get_val(sb, cp_payload); orphan_blkaddr = __start_sum_addr(sbi) - 1; orphan_blk = calloc(BLOCK_SZ, 1); @@ -1324,25 +1324,25 @@ static void fix_checkpoint(struct f2fs_sb_info *sbi) flags |= CP_ORPHAN_PRESENT_FLAG; } - set_cp(ckpt_flags, flags); - set_cp(cp_pack_total_block_count, 8 + orphan_blks + get_sb(cp_payload)); + set_val(cp, ckpt_flags, flags); + set_val(cp, cp_pack_total_block_count, 8 + orphan_blks + get_val(sb, cp_payload)); - set_cp(free_segment_count, fsck->chk.free_segs); - set_cp(valid_block_count, fsck->chk.valid_blk_cnt); - set_cp(valid_node_count, fsck->chk.valid_node_cnt); - set_cp(valid_inode_count, fsck->chk.valid_inode_cnt); + set_val(cp, free_segment_count, fsck->chk.free_segs); + set_val(cp, valid_block_count, fsck->chk.valid_blk_cnt); + set_val(cp, valid_node_count, fsck->chk.valid_node_cnt); + set_val(cp, valid_inode_count, fsck->chk.valid_inode_cnt); crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); - cp_blk_no = get_sb(cp_blkaddr); + cp_blk_no = get_val(sb, cp_blkaddr); if (sbi->cur_cp == 2) - cp_blk_no += 1 << get_sb(log_blocks_per_seg); + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); ret = dev_write_block(cp, cp_blk_no++); ASSERT(ret >= 0); - for (i = 0; i < get_sb(cp_payload); i++) { + for (i = 0; i < get_val(sb, cp_payload); i++) { ret = dev_write_block(((unsigned char *)cp) + i * F2FS_BLKSIZE, cp_blk_no++); ASSERT(ret >= 0); diff --git a/fsck/main.c b/fsck/main.c index 54dbb2d..7fcaa5d 100644 --- a/fsck/main.c +++ b/fsck/main.c @@ -255,7 +255,7 @@ static int do_defrag(struct f2fs_sb_info *sbi) { struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); - if (config.defrag_start > get_sb(block_count)) + if (config.defrag_start > get_val(sb, block_count)) goto out_range; if (config.defrag_start < SM_I(sbi)->main_blkaddr) config.defrag_start = SM_I(sbi)->main_blkaddr; @@ -263,8 +263,8 @@ static int do_defrag(struct f2fs_sb_info *sbi) if (config.defrag_len == 0) config.defrag_len = sbi->blocks_per_seg; - if (config.defrag_start + config.defrag_len > get_sb(block_count)) - config.defrag_len = get_sb(block_count) - config.defrag_start; + if (config.defrag_start + config.defrag_len > get_val(sb, block_count)) + config.defrag_len = get_val(sb, block_count) - config.defrag_start; if (config.defrag_target == 0) { config.defrag_target = config.defrag_start - 1; @@ -273,7 +273,7 @@ static int do_defrag(struct f2fs_sb_info *sbi) } if (config.defrag_target < SM_I(sbi)->main_blkaddr || - config.defrag_target > get_sb(block_count)) + config.defrag_target > get_val(sb, block_count)) goto out_range; if (config.defrag_target >= config.defrag_start && config.defrag_target < config.defrag_start + config.defrag_len) diff --git a/fsck/mount.c b/fsck/mount.c index 4c807f9..6e6d230 100644 --- a/fsck/mount.c +++ b/fsck/mount.c @@ -269,21 +269,21 @@ int sanity_check_raw_super(struct f2fs_super_block *sb) { unsigned int blocksize; - if (F2FS_SUPER_MAGIC != get_sb(magic)) + if (F2FS_SUPER_MAGIC != get_val(sb, magic)) return -1; if (F2FS_BLKSIZE != PAGE_CACHE_SIZE) return -1; - blocksize = 1 << get_sb(log_blocksize); + blocksize = 1 << get_val(sb, log_blocksize); if (F2FS_BLKSIZE != blocksize) return -1; - if (get_sb(log_sectorsize) > F2FS_MAX_LOG_SECTOR_SIZE || - get_sb(log_sectorsize) < F2FS_MIN_LOG_SECTOR_SIZE) + if (get_val(sb, log_sectorsize) > F2FS_MAX_LOG_SECTOR_SIZE || + get_val(sb, log_sectorsize) < F2FS_MIN_LOG_SECTOR_SIZE) return -1; - if (get_sb(log_sectors_per_block) + get_sb(log_sectorsize) != + if (get_val(sb, log_sectors_per_block) + get_val(sb, log_sectorsize) != F2FS_MAX_LOG_SECTOR_SIZE) return -1; @@ -350,22 +350,22 @@ int init_sb_info(struct f2fs_sb_info *sbi) struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); u64 total_sectors; - sbi->log_sectors_per_block = get_sb(log_sectors_per_block); - sbi->log_blocksize = get_sb(log_blocksize); + sbi->log_sectors_per_block = get_val(sb, log_sectors_per_block); + sbi->log_blocksize = get_val(sb, log_blocksize); sbi->blocksize = 1 << sbi->log_blocksize; - sbi->log_blocks_per_seg = get_sb(log_blocks_per_seg); + sbi->log_blocks_per_seg = get_val(sb, log_blocks_per_seg); sbi->blocks_per_seg = 1 << sbi->log_blocks_per_seg; - sbi->segs_per_sec = get_sb(segs_per_sec); - sbi->secs_per_zone = get_sb(secs_per_zone); - sbi->total_sections = get_sb(section_count); - sbi->total_node_count = (get_sb(segment_count_nat) / 2) * + sbi->segs_per_sec = get_val(sb, segs_per_sec); + sbi->secs_per_zone = get_val(sb, secs_per_zone); + sbi->total_sections = get_val(sb, section_count); + sbi->total_node_count = (get_val(sb, segment_count_nat) / 2) * sbi->blocks_per_seg * NAT_ENTRY_PER_BLOCK; - sbi->root_ino_num = get_sb(root_ino); - sbi->node_ino_num = get_sb(node_ino); - sbi->meta_ino_num = get_sb(meta_ino); + sbi->root_ino_num = get_val(sb, root_ino); + sbi->node_ino_num = get_val(sb, node_ino); + sbi->meta_ino_num = get_val(sb, meta_ino); sbi->cur_victim_sec = NULL_SEGNO; - total_sectors = get_sb(block_count) << sbi->log_sectors_per_block; + total_sectors = get_val(sb, block_count) << sbi->log_sectors_per_block; MSG(0, "Info: total FS sectors = %"PRIu64" (%"PRIu64" MB)\n", total_sectors, total_sectors >> 11); return 0; @@ -387,7 +387,7 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, return NULL; cp = (struct f2fs_checkpoint *)cp_page_1; - crc_offset = get_cp(checksum_offset); + crc_offset = get_val(cp, checksum_offset); if (crc_offset >= blk_size) goto invalid_cp1; @@ -395,17 +395,17 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, if (f2fs_crc_valid(crc, cp, crc_offset)) goto invalid_cp1; - pre_version = get_cp(checkpoint_ver); + pre_version = get_val(cp, checkpoint_ver); /* Read the 2nd cp block in this CP pack */ cp_page_2 = malloc(PAGE_SIZE); - cp_addr += get_cp(cp_pack_total_block_count) - 1; + cp_addr += get_val(cp, cp_pack_total_block_count) - 1; if (dev_read_block(cp_page_2, cp_addr) < 0) goto invalid_cp2; cp = (struct f2fs_checkpoint *)cp_page_2; - crc_offset = get_cp(checksum_offset); + crc_offset = get_val(cp, checksum_offset); if (crc_offset >= blk_size) goto invalid_cp2; @@ -413,7 +413,7 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, if (f2fs_crc_valid(crc, cp, crc_offset)) goto invalid_cp2; - cur_version = get_cp(checkpoint_ver); + cur_version = get_val(cp, checkpoint_ver); if (cur_version == pre_version) { *version = cur_version; @@ -435,7 +435,7 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) unsigned long blk_size = sbi->blocksize; unsigned long long cp1_version = 0, cp2_version = 0, version; unsigned long long cp_start_blk_no; - unsigned int cp_blks = 1 + get_sb(cp_payload); + unsigned int cp_blks = 1 + get_val(sb, cp_payload); int ret; sbi->ckpt = malloc(cp_blks * blk_size); @@ -445,11 +445,11 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) * Finding out valid cp block involves read both * sets( cp pack1 and cp pack 2) */ - cp_start_blk_no = get_sb(cp_blkaddr); + cp_start_blk_no = get_val(sb, cp_blkaddr); cp1 = validate_checkpoint(sbi, cp_start_blk_no, &cp1_version); /* The second checkpoint pack should start at the next segment */ - cp_start_blk_no += 1 << get_sb(log_blocks_per_seg); + cp_start_blk_no += 1 << get_val(sb, log_blocks_per_seg); cp2 = validate_checkpoint(sbi, cp_start_blk_no, &cp2_version); if (cp1 && cp2) { @@ -481,9 +481,9 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) unsigned int i; unsigned long long cp_blk_no; - cp_blk_no = get_sb(cp_blkaddr); + cp_blk_no = get_val(sb, cp_blkaddr); if (cur_page == cp2) - cp_blk_no += 1 << get_sb(log_blocks_per_seg); + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); /* copy sit bitmap */ for (i = 1; i < cp_blks; i++) { @@ -510,12 +510,12 @@ int sanity_check_ckpt(struct f2fs_sb_info *sbi) struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); struct f2fs_checkpoint *cp = F2FS_CKPT(sbi); - total = get_sb(segment_count); - fsmeta = get_sb(segment_count_ckpt); - fsmeta += get_sb(segment_count_sit); - fsmeta += get_sb(segment_count_nat); - fsmeta += get_cp(rsvd_segment_count); - fsmeta += get_sb(segment_count_ssa); + total = get_val(sb, segment_count); + fsmeta = get_val(sb, segment_count_ckpt); + fsmeta += get_val(sb, segment_count_sit); + fsmeta += get_val(sb, segment_count_nat); + fsmeta += get_val(cp, rsvd_segment_count); + fsmeta += get_val(sb, segment_count_ssa); if (fsmeta >= total) return 1; @@ -531,16 +531,16 @@ int init_node_manager(struct f2fs_sb_info *sbi) unsigned char *version_bitmap; unsigned int nat_segs, nat_blocks; - nm_i->nat_blkaddr = get_sb(nat_blkaddr); + nm_i->nat_blkaddr = get_val(sb, nat_blkaddr); /* segment_count_nat includes pair segment so divide to 2. */ - nat_segs = get_sb(segment_count_nat) >> 1; - nat_blocks = nat_segs << get_sb(log_blocks_per_seg); + nat_segs = get_val(sb, segment_count_nat) >> 1; + nat_blocks = nat_segs << get_val(sb, log_blocks_per_seg); nm_i->max_nid = NAT_ENTRY_PER_BLOCK * nat_blocks; nm_i->fcnt = 0; nm_i->nat_cnt = 0; - nm_i->init_scan_nid = get_cp(next_free_nid); - nm_i->next_scan_nid = get_cp(next_free_nid); + nm_i->init_scan_nid = get_val(cp, next_free_nid); + nm_i->next_scan_nid = get_val(cp, next_free_nid); nm_i->bitmap_size = __bitmap_size(sbi, NAT_BITMAP); @@ -597,21 +597,21 @@ int build_sit_info(struct f2fs_sb_info *sbi) return -ENOMEM; } - sit_segs = get_sb(segment_count_sit) >> 1; + sit_segs = get_val(sb, segment_count_sit) >> 1; bitmap_size = __bitmap_size(sbi, SIT_BITMAP); src_bitmap = __bitmap_ptr(sbi, SIT_BITMAP); dst_bitmap = malloc(bitmap_size); memcpy(dst_bitmap, src_bitmap, bitmap_size); - sit_i->sit_base_addr = get_sb(sit_blkaddr); + sit_i->sit_base_addr = get_val(sb, sit_blkaddr); sit_i->sit_blocks = sit_segs << sbi->log_blocks_per_seg; - sit_i->written_valid_blocks = get_cp(valid_block_count); + sit_i->written_valid_blocks = get_val(cp, valid_block_count); sit_i->sit_bitmap = dst_bitmap; sit_i->bitmap_size = bitmap_size; sit_i->dirty_sentries = 0; sit_i->sents_per_block = SIT_ENTRY_PER_BLOCK; - sit_i->elapsed_time = get_cp(elapsed_time); + sit_i->elapsed_time = get_val(cp, elapsed_time); return 0; } @@ -716,13 +716,13 @@ static void read_normal_summaries(struct f2fs_sb_info *sbi, int type) int ret; if (IS_DATASEG(type)) { - segno = get_cp(cur_data_segno[type]); + segno = get_val(cp, cur_data_segno[type]); if (is_set_ckpt_flags(cp, CP_UMOUNT_FLAG)) blk_addr = sum_blk_addr(sbi, NR_CURSEG_TYPE, type); else blk_addr = sum_blk_addr(sbi, NR_CURSEG_DATA_TYPE, type); } else { - segno = get_cp(cur_node_segno[type - CURSEG_HOT_NODE]); + segno = get_val(cp, cur_node_segno[type - CURSEG_HOT_NODE]); if (is_set_ckpt_flags(cp, CP_UMOUNT_FLAG)) blk_addr = sum_blk_addr(sbi, NR_CURSEG_NODE_TYPE, type - CURSEG_HOT_NODE); @@ -803,12 +803,12 @@ static void build_curseg(struct f2fs_sb_info *sbi) array[i].sum_blk = malloc(PAGE_CACHE_SIZE); ASSERT(array[i].sum_blk); if (i <= CURSEG_COLD_DATA) { - blk_off = get_cp(cur_data_blkoff[i]); - segno = get_cp(cur_data_segno[i]); + blk_off = get_val(cp, cur_data_blkoff[i]); + segno = get_val(cp, cur_data_segno[i]); } if (i > CURSEG_COLD_DATA) { - blk_off = get_cp(cur_node_blkoff[i - CURSEG_HOT_NODE]); - segno = get_cp(cur_node_segno[i - CURSEG_HOT_NODE]); + blk_off = get_val(cp, cur_node_blkoff[i - CURSEG_HOT_NODE]); + segno = get_val(cp, cur_node_segno[i - CURSEG_HOT_NODE]); } array[i].segno = segno; array[i].zone = GET_ZONENO_FROM_SEGNO(sbi, segno); @@ -924,7 +924,7 @@ struct f2fs_summary_block *get_sum_block(struct f2fs_sb_info *sbi, ssa_blk = GET_SUM_BLKADDR(sbi, segno); for (type = 0; type < NR_CURSEG_NODE_TYPE; type++) { - if (segno == get_cp(cur_node_segno[type])) { + if (segno == get_val(cp, cur_node_segno[type])) { curseg = CURSEG_I(sbi, CURSEG_HOT_NODE + type); if (!IS_SUM_NODE_SEG(curseg->sum_blk->footer)) { ASSERT_MSG("segno [0x%x] indicates a data " @@ -939,7 +939,7 @@ struct f2fs_summary_block *get_sum_block(struct f2fs_sb_info *sbi, } for (type = 0; type < NR_CURSEG_DATA_TYPE; type++) { - if (segno == get_cp(cur_data_segno[type])) { + if (segno == get_val(cp, cur_data_segno[type])) { curseg = CURSEG_I(sbi, type); if (IS_SUM_NODE_SEG(curseg->sum_blk->footer)) { ASSERT_MSG("segno [0x%x] indicates a node " @@ -1151,13 +1151,13 @@ int build_segment_manager(struct f2fs_sb_info *sbi) /* init sm info */ sbi->sm_info = sm_info; - sm_info->seg0_blkaddr = get_sb(segment0_blkaddr); - sm_info->main_blkaddr = get_sb(main_blkaddr); - sm_info->segment_count = get_sb(segment_count); - sm_info->reserved_segments = get_cp(rsvd_segment_count); - sm_info->ovp_segments = get_cp(overprov_segment_count); - sm_info->main_segments = get_sb(segment_count_main); - sm_info->ssa_blkaddr = get_sb(ssa_blkaddr); + sm_info->seg0_blkaddr = get_val(sb, segment0_blkaddr); + sm_info->main_blkaddr = get_val(sb, main_blkaddr); + sm_info->segment_count = get_val(sb, segment_count); + sm_info->reserved_segments = get_val(cp, rsvd_segment_count); + sm_info->ovp_segments = get_val(cp, overprov_segment_count); + sm_info->main_segments = get_val(sb, segment_count_main); + sm_info->ssa_blkaddr = get_val(sb, ssa_blkaddr); build_sit_info(sbi); @@ -1384,7 +1384,7 @@ void flush_sit_entries(struct f2fs_sb_info *sbi) free_segs++; } - set_cp(free_segment_count, free_segs); + set_val(cp, free_segment_count, free_segs); } int find_next_free_block(struct f2fs_sb_info *sbi, u64 *to, int left, int type) @@ -1487,14 +1487,14 @@ void write_curseg_info(struct f2fs_sb_info *sbi) for (i = 0; i < NO_CHECK_TYPE; i++) { cp->alloc_type[i] = CURSEG_I(sbi, i)->alloc_type; if (i < CURSEG_HOT_NODE) { - set_cp(cur_data_segno[i], CURSEG_I(sbi, i)->segno); - set_cp(cur_data_blkoff[i], + set_val(cp, cur_data_segno[i], CURSEG_I(sbi, i)->segno); + set_val(cp, cur_data_blkoff[i], CURSEG_I(sbi, i)->next_blkoff); } else { int n = i - CURSEG_HOT_NODE; - set_cp(cur_node_segno[n], CURSEG_I(sbi, i)->segno); - set_cp(cur_node_blkoff[n], + set_val(cp, cur_node_segno[n], CURSEG_I(sbi, i)->segno); + set_val(cp, cur_node_blkoff[n], CURSEG_I(sbi, i)->next_blkoff); } } @@ -1578,24 +1578,24 @@ void write_checkpoint(struct f2fs_sb_info *sbi) flags |= CP_ORPHAN_PRESENT_FLAG; } - set_cp(ckpt_flags, flags); + set_val(cp, ckpt_flags, flags); - set_cp(free_segment_count, get_free_segments(sbi)); - set_cp(cp_pack_total_block_count, 8 + orphan_blks + get_sb(cp_payload)); + set_val(cp, free_segment_count, get_free_segments(sbi)); + set_val(cp, cp_pack_total_block_count, 8 + orphan_blks + get_val(sb, cp_payload)); crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); - cp_blk_no = get_sb(cp_blkaddr); + cp_blk_no = get_val(sb, cp_blkaddr); if (sbi->cur_cp == 2) - cp_blk_no += 1 << get_sb(log_blocks_per_seg); + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); /* write the first cp */ ret = dev_write_block(cp, cp_blk_no++); ASSERT(ret >= 0); /* skip payload */ - cp_blk_no += get_sb(cp_payload); + cp_blk_no += get_val(sb, cp_payload); /* skip orphan blocks */ cp_blk_no += orphan_blks; @@ -1635,7 +1635,7 @@ void build_nat_area_bitmap(struct f2fs_sb_info *sbi) ASSERT(nat_block); /* Alloc & build nat entry bitmap */ - nr_nat_blks = (get_sb(segment_count_nat) / 2) << + nr_nat_blks = (get_val(sb, segment_count_nat) / 2) << sbi->log_blocks_per_seg; fsck->nr_nat_entries = nr_nat_blks * NAT_ENTRY_PER_BLOCK; @@ -1731,7 +1731,7 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi) print_ckpt_info(sbi); if (config.auto_fix) { - u32 flag = get_cp(ckpt_flags); + u32 flag = get_val(cp, ckpt_flags); if (flag & CP_FSCK_FLAG) config.fix_on = 1; @@ -1741,10 +1741,10 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi) config.bug_on = 0; - sbi->total_valid_node_count = get_cp(valid_node_count); - sbi->total_valid_inode_count = get_cp(valid_inode_count); - sbi->user_block_count = get_cp(user_block_count); - sbi->total_valid_block_count = get_cp(valid_block_count); + sbi->total_valid_node_count = get_val(cp, valid_node_count); + sbi->total_valid_inode_count = get_val(cp, valid_inode_count); + sbi->user_block_count = get_val(cp, user_block_count); + sbi->total_valid_block_count = get_val(cp, valid_block_count); sbi->last_valid_block_count = sbi->total_valid_block_count; sbi->alloc_valid_block_count = 0; diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h index e1eeb6e..dcea541 100644 --- a/include/f2fs_fs.h +++ b/include/f2fs_fs.h @@ -270,61 +270,39 @@ struct f2fs_configuration { #define BIT_MASK(nr) (1 << (nr % BITS_PER_LONG)) #define BIT_WORD(nr) (nr / BITS_PER_LONG) -#define set_sb_le64(member, val) (sb->member = cpu_to_le64(val)) -#define set_sb_le32(member, val) (sb->member = cpu_to_le32(val)) -#define set_sb_le16(member, val) (sb->member = cpu_to_le16(val)) -#define get_sb_le64(member) le64_to_cpu(sb->member) -#define get_sb_le32(member) le32_to_cpu(sb->member) -#define get_sb_le16(member) le16_to_cpu(sb->member) - -#define set_sb(member, val) \ - do { \ - typeof(sb->member) t; \ - switch (sizeof(t)) { \ - case 8: set_sb_le64(member, val); break; \ - case 4: set_sb_le32(member, val); break; \ - case 2: set_sb_le16(member, val); break; \ - } \ +#define set_le64(ptr, member, val) ((ptr)->member = cpu_to_le64(val)) +#define set_le32(ptr, member, val) ((ptr)->member = cpu_to_le32(val)) +#define set_le16(ptr, member, val) ((ptr)->member = cpu_to_le16(val)) +#define get_le64(ptr, member) le64_to_cpu((ptr)->member) +#define get_le32(ptr, member) le32_to_cpu((ptr)->member) +#define get_le16(ptr, member) le16_to_cpu((ptr)->member) + +#define set_val(ptr, member, val) \ + do { \ + typeof((ptr)->member) t; \ + switch (sizeof(t)) { \ + case 8: set_le64(ptr, member, val); break; \ + case 4: set_le32(ptr, member, val); break; \ + case 2: set_le16(ptr, member, val); break; \ + } \ } while(0) -#define get_sb(member) \ - ({ \ - typeof(sb->member) t; \ - switch (sizeof(t)) { \ - case 8: t = get_sb_le64(member); break; \ - case 4: t = get_sb_le32(member); break; \ - case 2: t = get_sb_le16(member); break; \ - } \ - t; \ +#define get_val(ptr, member) \ + ({ \ + typeof((ptr)->member) t; \ + switch (sizeof(t)) { \ + case 8: t = get_le64(ptr, member); break; \ + case 4: t = get_le32(ptr, member); break; \ + case 2: t = get_le16(ptr, member); break; \ + } \ + t; \ }) -#define set_cp_le64(member, val) (cp->member = cpu_to_le64(val)) -#define set_cp_le32(member, val) (cp->member = cpu_to_le32(val)) -#define set_cp_le16(member, val) (cp->member = cpu_to_le16(val)) -#define get_cp_le64(member) le64_to_cpu(cp->member) -#define get_cp_le32(member) le32_to_cpu(cp->member) -#define get_cp_le16(member) le16_to_cpu(cp->member) - -#define set_cp(member, val) \ - do { \ - typeof(cp->member) t; \ - switch (sizeof(t)) { \ - case 8: set_cp_le64(member, val); break; \ - case 4: set_cp_le32(member, val); break; \ - case 2: set_cp_le16(member, val); break; \ - } \ - } while(0) - -#define get_cp(member) \ - ({ \ - typeof(cp->member) t; \ - switch (sizeof(t)) { \ - case 8: t = get_cp_le64(member); break; \ - case 4: t = get_cp_le32(member); break; \ - case 2: t = get_cp_le16(member); break; \ - } \ - t; \ - }) +/* These are deprecated, please use get_val and set_val */ +#define get_sb(member) get_val(sb, member) +#define set_sb(member) set_val(sb, member) +#define get_cp(member) get_val(cp, member) +#define set_cp(member) set_val(cp, member) /* * Copied from include/linux/kernel.h @@ -899,7 +877,7 @@ static inline double get_best_overprovision(struct f2fs_super_block *sb) double reserved, ovp, candidate, end, diff, space; double max_ovp = 0, max_space = 0; - if (get_sb(segment_count_main) < 256) { + if (get_val(sb, segment_count_main) < 256) { candidate = 10; end = 95; diff = 5; @@ -911,9 +889,9 @@ static inline double get_best_overprovision(struct f2fs_super_block *sb) for (; candidate <= end; candidate += diff) { reserved = (2 * (100 / candidate + 1) + 6) * - get_sb(segs_per_sec); - ovp = (get_sb(segment_count_main) - reserved) * candidate / 100; - space = get_sb(segment_count_main) - reserved - ovp; + get_val(sb, segs_per_sec); + ovp = (get_val(sb, segment_count_main) - reserved) * candidate / 100; + space = get_val(sb, segment_count_main) - reserved - ovp; if (max_space < space) { max_space = space; max_ovp = candidate; diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c index 645c2aa..db5348e 100644 --- a/mkfs/f2fs_format.c +++ b/mkfs/f2fs_format.c @@ -83,7 +83,7 @@ static void configure_extension_list(void) int name_len; int i = 0; - set_sb(extension_count, 0); + set_val(sb, extension_count, 0); memset(sb->extension_list, 0, sizeof(sb->extension_list)); while (*extlist) { @@ -91,7 +91,7 @@ static void configure_extension_list(void) memcpy(sb->extension_list[i++], *extlist, name_len); extlist++; } - set_sb(extension_count, i); + set_val(sb, extension_count, i); if (!ext_str) return; @@ -112,7 +112,7 @@ next: break; } - set_sb(extension_count, i); + set_val(sb, extension_count, i); free(config.extension_list); } @@ -132,23 +132,23 @@ static int f2fs_prepare_super_block(void) u_int32_t max_nat_bitmap_size, max_nat_segments; u_int32_t total_zones; - set_sb(magic, F2FS_SUPER_MAGIC); - set_sb(major_ver, F2FS_MAJOR_VERSION); - set_sb(minor_ver, F2FS_MINOR_VERSION); + set_val(sb, magic, F2FS_SUPER_MAGIC); + set_val(sb, major_ver, F2FS_MAJOR_VERSION); + set_val(sb, minor_ver, F2FS_MINOR_VERSION); log_sectorsize = log_base_2(config.sector_size); log_sectors_per_block = log_base_2(config.sectors_per_blk); log_blocksize = log_sectorsize + log_sectors_per_block; log_blks_per_seg = log_base_2(config.blks_per_seg); - set_sb(log_sectorsize, log_sectorsize); - set_sb(log_sectors_per_block, log_sectors_per_block); + set_val(sb, log_sectorsize, log_sectorsize); + set_val(sb, log_sectors_per_block, log_sectors_per_block); - set_sb(log_blocksize, log_blocksize); - set_sb(log_blocks_per_seg, log_blks_per_seg); + set_val(sb, log_blocksize, log_blocksize); + set_val(sb, log_blocks_per_seg, log_blks_per_seg); - set_sb(segs_per_sec, config.segs_per_sec); - set_sb(secs_per_zone, config.secs_per_zone); + set_val(sb, segs_per_sec, config.segs_per_sec); + set_val(sb, secs_per_zone, config.secs_per_zone); blk_size_bytes = 1 << log_blocksize; segment_size_bytes = blk_size_bytes * config.blks_per_seg; @@ -156,9 +156,9 @@ static int f2fs_prepare_super_block(void) blk_size_bytes * config.secs_per_zone * config.segs_per_sec * config.blks_per_seg; - set_sb(checksum_offset, 0); + set_val(sb, checksum_offset, 0); - set_sb(block_count, config.total_sectors >> log_sectors_per_block); + set_val(sb, block_count, config.total_sectors >> log_sectors_per_block); zone_align_start_offset = (config.start_sector * config.sector_size + @@ -174,41 +174,41 @@ static int f2fs_prepare_super_block(void) config.sectors_per_blk); } - set_sb(segment_count, (config.total_sectors * config.sector_size - + set_val(sb, segment_count, (config.total_sectors * config.sector_size - zone_align_start_offset) / segment_size_bytes); - set_sb(segment0_blkaddr, zone_align_start_offset / blk_size_bytes); + set_val(sb, segment0_blkaddr, zone_align_start_offset / blk_size_bytes); sb->cp_blkaddr = sb->segment0_blkaddr; - MSG(0, "Info: zone aligned segment0 blkaddr: %u\n", get_sb(segment0_blkaddr)); + MSG(0, "Info: zone aligned segment0 blkaddr: %u\n", get_val(sb, segment0_blkaddr)); - set_sb(segment_count_ckpt, F2FS_NUMBER_OF_CHECKPOINT_PACK); + set_val(sb, segment_count_ckpt, F2FS_NUMBER_OF_CHECKPOINT_PACK); - set_sb(sit_blkaddr, get_sb(segment0_blkaddr) + get_sb(segment_count_ckpt) * + set_val(sb, sit_blkaddr, get_val(sb, segment0_blkaddr) + get_val(sb, segment_count_ckpt) * config.blks_per_seg); - blocks_for_sit = ALIGN(get_sb(segment_count), SIT_ENTRY_PER_BLOCK); + blocks_for_sit = ALIGN(get_val(sb, segment_count), SIT_ENTRY_PER_BLOCK); sit_segments = SEG_ALIGN(blocks_for_sit); - set_sb(segment_count_sit, sit_segments * 2); + set_val(sb, segment_count_sit, sit_segments * 2); - set_sb(nat_blkaddr, get_sb(sit_blkaddr) + get_sb(segment_count_sit) * + set_val(sb, nat_blkaddr, get_val(sb, sit_blkaddr) + get_val(sb, segment_count_sit) * config.blks_per_seg); - total_valid_blks_available = (get_sb(segment_count) - - (get_sb(segment_count_ckpt) + get_sb(segment_count_sit))) * + total_valid_blks_available = (get_val(sb, segment_count) - + (get_val(sb, segment_count_ckpt) + get_val(sb, segment_count_sit))) * config.blks_per_seg; blocks_for_nat = ALIGN(total_valid_blks_available, NAT_ENTRY_PER_BLOCK); - set_sb(segment_count_nat, SEG_ALIGN(blocks_for_nat)); + set_val(sb, segment_count_nat, SEG_ALIGN(blocks_for_nat)); /* * The number of node segments should not be exceeded a "Threshold". * This number resizes NAT bitmap area in a CP page. * So the threshold is determined not to overflow one CP page */ - sit_bitmap_size = ((get_sb(segment_count_sit) / 2) << + sit_bitmap_size = ((get_val(sb, segment_count_sit) / 2) << log_blks_per_seg) / 8; if (sit_bitmap_size > MAX_SIT_BITMAP_SIZE) @@ -223,55 +223,55 @@ static int f2fs_prepare_super_block(void) if (max_sit_bitmap_size > (CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1 - 64)) { max_nat_bitmap_size = CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1; - set_sb(cp_payload, F2FS_BLK_ALIGN(max_sit_bitmap_size)); + set_val(sb, cp_payload, F2FS_BLK_ALIGN(max_sit_bitmap_size)); } else { max_nat_bitmap_size = CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1 - max_sit_bitmap_size; - set_sb(cp_payload, 0); + set_val(sb, cp_payload, 0); } max_nat_segments = (max_nat_bitmap_size * 8) >> log_blks_per_seg; - if (get_sb(segment_count_nat) > max_nat_segments) - set_sb(segment_count_nat, max_nat_segments); + if (get_val(sb, segment_count_nat) > max_nat_segments) + set_val(sb, segment_count_nat, max_nat_segments); - set_sb(segment_count_nat, get_sb(segment_count_nat) * 2); + set_val(sb, segment_count_nat, get_val(sb, segment_count_nat) * 2); - set_sb(ssa_blkaddr, get_sb(nat_blkaddr) + get_sb(segment_count_nat) * + set_val(sb, ssa_blkaddr, get_val(sb, nat_blkaddr) + get_val(sb, segment_count_nat) * config.blks_per_seg); - total_valid_blks_available = (get_sb(segment_count) - - (get_sb(segment_count_ckpt) + - get_sb(segment_count_sit) + - get_sb(segment_count_nat))) * + total_valid_blks_available = (get_val(sb, segment_count) - + (get_val(sb, segment_count_ckpt) + + get_val(sb, segment_count_sit) + + get_val(sb, segment_count_nat))) * config.blks_per_seg; blocks_for_ssa = total_valid_blks_available / config.blks_per_seg + 1; - set_sb(segment_count_ssa, SEG_ALIGN(blocks_for_ssa)); + set_val(sb, segment_count_ssa, SEG_ALIGN(blocks_for_ssa)); - total_meta_segments = get_sb(segment_count_ckpt) + - get_sb(segment_count_sit) + - get_sb(segment_count_nat) + - get_sb(segment_count_ssa); + total_meta_segments = get_val(sb, segment_count_ckpt) + + get_val(sb, segment_count_sit) + + get_val(sb, segment_count_nat) + + get_val(sb, segment_count_ssa); diff = total_meta_segments % (config.segs_per_zone); if (diff) - set_sb(segment_count_ssa, get_sb(segment_count_ssa) + + set_val(sb, segment_count_ssa, get_val(sb, segment_count_ssa) + (config.segs_per_zone - diff)); total_meta_zones = ZONE_ALIGN(total_meta_segments * config.blks_per_seg); - set_sb(main_blkaddr, get_sb(segment0_blkaddr) + total_meta_zones * + set_val(sb, main_blkaddr, get_val(sb, segment0_blkaddr) + total_meta_zones * config.segs_per_zone * config.blks_per_seg); - total_zones = get_sb(segment_count) / (config.segs_per_zone) - + total_zones = get_val(sb, segment_count) / (config.segs_per_zone) - total_meta_zones; - set_sb(section_count, total_zones * config.secs_per_zone); + set_val(sb, section_count, total_zones * config.secs_per_zone); - set_sb(segment_count_main, get_sb(section_count) * config.segs_per_sec); + set_val(sb, segment_count_main, get_val(sb, section_count) * config.segs_per_sec); /* Let's determine the best reserved and overprovisioned space */ if (config.overprovision == 0) @@ -281,12 +281,12 @@ static int f2fs_prepare_super_block(void) (2 * (100 / config.overprovision + 1) + 6) * config.segs_per_sec; - if ((get_sb(segment_count_main) - 2) < + if ((get_val(sb, segment_count_main) - 2) < config.reserved_segments) { MSG(1, "\tError: Device size is not sufficient for F2FS volume,\ more segment needed =%u", config.reserved_segments - - (get_sb(segment_count_main) - 2)); + (get_val(sb, segment_count_main) - 2)); return -1; } @@ -294,9 +294,9 @@ static int f2fs_prepare_super_block(void) utf8_to_utf16(sb->volume_name, (const char *)config.vol_label, MAX_VOLUME_NAME, strlen(config.vol_label)); - set_sb(node_ino, 1); - set_sb(meta_ino, 2); - set_sb(root_ino, 3); + set_val(sb, node_ino, 1); + set_val(sb, meta_ino, 2); + set_val(sb, root_ino, 3); if (total_zones <= 6) { MSG(1, "\tError: %d zones: Need more zones \ @@ -346,8 +346,8 @@ static int f2fs_init_sit_area(void) u_int64_t sit_seg_addr = 0; u_int8_t *zero_buf = NULL; - blk_size = 1 << get_sb(log_blocksize); - seg_size = (1 << get_sb(log_blocks_per_seg)) * blk_size; + blk_size = 1 << get_val(sb, log_blocksize); + seg_size = (1 << get_val(sb, log_blocks_per_seg)) * blk_size; zero_buf = calloc(sizeof(u_int8_t), seg_size); if(zero_buf == NULL) { @@ -355,11 +355,11 @@ static int f2fs_init_sit_area(void) return -1; } - sit_seg_addr = get_sb(sit_blkaddr); + sit_seg_addr = get_val(sb, sit_blkaddr); sit_seg_addr *= blk_size; DBG(1, "\tFilling sit area at offset 0x%08"PRIx64"\n", sit_seg_addr); - for (index = 0; index < (get_sb(segment_count_sit) / 2); index++) { + for (index = 0; index < (get_val(sb, segment_count_sit) / 2); index++) { if (dev_fill(zero_buf, sit_seg_addr, seg_size)) { MSG(1, "\tError: While zeroing out the sit area \ on disk!!!\n"); @@ -380,8 +380,8 @@ static int f2fs_init_nat_area(void) u_int64_t nat_seg_addr = 0; u_int8_t *nat_buf = NULL; - blk_size = 1 << get_sb(log_blocksize); - seg_size = (1 << get_sb(log_blocks_per_seg)) * blk_size; + blk_size = 1 << get_val(sb, log_blocksize); + seg_size = (1 << get_val(sb, log_blocks_per_seg)) * blk_size; nat_buf = calloc(sizeof(u_int8_t), seg_size); if (nat_buf == NULL) { @@ -389,11 +389,11 @@ static int f2fs_init_nat_area(void) return -1; } - nat_seg_addr = get_sb(nat_blkaddr); + nat_seg_addr = get_val(sb, nat_blkaddr); nat_seg_addr *= blk_size; DBG(1, "\tFilling nat area at offset 0x%08"PRIx64"\n", nat_seg_addr); - for (index = 0; index < get_sb(segment_count_nat) / 2; index++) { + for (index = 0; index < get_val(sb, segment_count_nat) / 2; index++) { if (dev_fill(nat_buf, nat_seg_addr, seg_size)) { MSG(1, "\tError: While zeroing out the nat area \ on disk!!!\n"); @@ -445,58 +445,58 @@ static int f2fs_write_check_point_pack(void) } /* 1. cp page 1 of checkpoint pack 1 */ - set_cp(checkpoint_ver, 1); - set_cp(cur_node_segno[0], config.cur_seg[CURSEG_HOT_NODE]); - set_cp(cur_node_segno[1], config.cur_seg[CURSEG_WARM_NODE]); - set_cp(cur_node_segno[2], config.cur_seg[CURSEG_COLD_NODE]); - set_cp(cur_data_segno[0], config.cur_seg[CURSEG_HOT_DATA]); - set_cp(cur_data_segno[1], config.cur_seg[CURSEG_WARM_DATA]); - set_cp(cur_data_segno[2], config.cur_seg[CURSEG_COLD_DATA]); + set_val(cp, checkpoint_ver, 1); + set_val(cp, cur_node_segno[0], config.cur_seg[CURSEG_HOT_NODE]); + set_val(cp, cur_node_segno[1], config.cur_seg[CURSEG_WARM_NODE]); + set_val(cp, cur_node_segno[2], config.cur_seg[CURSEG_COLD_NODE]); + set_val(cp, cur_data_segno[0], config.cur_seg[CURSEG_HOT_DATA]); + set_val(cp, cur_data_segno[1], config.cur_seg[CURSEG_WARM_DATA]); + set_val(cp, cur_data_segno[2], config.cur_seg[CURSEG_COLD_DATA]); for (i = 3; i < MAX_ACTIVE_NODE_LOGS; i++) { - set_cp(cur_node_segno[i], 0xffffffff); - set_cp(cur_data_segno[i], 0xffffffff); + set_val(cp, cur_node_segno[i], 0xffffffff); + set_val(cp, cur_data_segno[i], 0xffffffff); } - set_cp(cur_node_blkoff[0], 1); - set_cp(cur_data_blkoff[0], 1); - set_cp(valid_block_count, 2); - set_cp(rsvd_segment_count, config.reserved_segments); - set_cp(overprov_segment_count, (get_sb(segment_count_main) - - get_cp(rsvd_segment_count)) * + set_val(cp, cur_node_blkoff[0], 1); + set_val(cp, cur_data_blkoff[0], 1); + set_val(cp, valid_block_count, 2); + set_val(cp, rsvd_segment_count, config.reserved_segments); + set_val(cp, overprov_segment_count, (get_val(sb, segment_count_main) - + get_val(cp, rsvd_segment_count)) * config.overprovision / 100); - set_cp(overprov_segment_count, get_cp(overprov_segment_count) + - get_cp(rsvd_segment_count)); + set_val(cp, overprov_segment_count, get_val(cp, overprov_segment_count) + + get_val(cp, rsvd_segment_count)); MSG(0, "Info: Overprovision ratio = %.3lf%%\n", config.overprovision); MSG(0, "Info: Overprovision segments = %u (GC reserved = %u)\n", - get_cp(overprov_segment_count), + get_val(cp, overprov_segment_count), config.reserved_segments); /* main segments - reserved segments - (node + data segments) */ - set_cp(free_segment_count, get_sb(segment_count_main) - 6); - set_cp(user_block_count, ((get_cp(free_segment_count) + 6 - - get_cp(overprov_segment_count)) * config.blks_per_seg)); + set_val(cp, free_segment_count, get_val(sb, segment_count_main) - 6); + set_val(cp, user_block_count, ((get_val(cp, free_segment_count) + 6 - + get_val(cp, overprov_segment_count)) * config.blks_per_seg)); /* cp page (2), data summaries (1), node summaries (3) */ - set_cp(cp_pack_total_block_count, 6 + get_sb(cp_payload)); - set_cp(ckpt_flags, CP_UMOUNT_FLAG | CP_COMPACT_SUM_FLAG); - set_cp(cp_pack_start_sum, 1 + get_sb(cp_payload)); - set_cp(valid_node_count, 1); - set_cp(valid_inode_count, 1); - set_cp(next_free_nid, get_sb(root_ino) + 1); - set_cp(sit_ver_bitmap_bytesize, ((get_sb(segment_count_sit) / 2) << - get_sb(log_blocks_per_seg)) / 8); + set_val(cp, cp_pack_total_block_count, 6 + get_val(sb, cp_payload)); + set_val(cp, ckpt_flags, CP_UMOUNT_FLAG | CP_COMPACT_SUM_FLAG); + set_val(cp, cp_pack_start_sum, 1 + get_val(sb, cp_payload)); + set_val(cp, valid_node_count, 1); + set_val(cp, valid_inode_count, 1); + set_val(cp, next_free_nid, get_val(sb, root_ino) + 1); + set_val(cp, sit_ver_bitmap_bytesize, ((get_val(sb, segment_count_sit) / 2) << + get_val(sb, log_blocks_per_seg)) / 8); - set_cp(nat_ver_bitmap_bytesize, ((get_sb(segment_count_nat) / 2) << - get_sb(log_blocks_per_seg)) / 8); + set_val(cp, nat_ver_bitmap_bytesize, ((get_val(sb, segment_count_nat) / 2) << + get_val(sb, log_blocks_per_seg)) / 8); - set_cp(checksum_offset, CHECKSUM_OFFSET); + set_val(cp, checksum_offset, CHECKSUM_OFFSET); crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); - blk_size_bytes = 1 << get_sb(log_blocksize); - cp_seg_blk_offset = get_sb(segment0_blkaddr); + blk_size_bytes = 1 << get_val(sb, log_blocksize); + cp_seg_blk_offset = get_val(sb, segment0_blkaddr); cp_seg_blk_offset *= blk_size_bytes; DBG(1, "\tWriting main segments, cp at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); @@ -505,7 +505,7 @@ static int f2fs_write_check_point_pack(void) goto free_cp_payload; } - for (i = 0; i < get_sb(cp_payload); i++) { + for (i = 0; i < get_val(sb, cp_payload); i++) { cp_seg_blk_offset += blk_size_bytes; if (dev_fill(cp_payload, cp_seg_blk_offset, blk_size_bytes)) { MSG(1, "\tError: While zeroing out the sit bitmap area \ @@ -537,8 +537,8 @@ static int f2fs_write_check_point_pack(void) sum->nat_j.entries[0].ne.version = 0; sum->nat_j.entries[0].ne.ino = sb->root_ino; sum->nat_j.entries[0].ne.block_addr = cpu_to_le32( - get_sb(main_blkaddr) + - get_cp(cur_node_segno[0]) * config.blks_per_seg); + get_val(sb, main_blkaddr) + + get_val(cp, cur_node_segno[0]) * config.blks_per_seg); memcpy(sum_compact_p, &sum->n_nats, SUM_JOURNAL_SIZE); sum_compact_p += SUM_JOURNAL_SIZE; @@ -635,7 +635,7 @@ static int f2fs_write_check_point_pack(void) crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); - cp_seg_blk_offset = (get_sb(segment0_blkaddr) + + cp_seg_blk_offset = (get_val(sb, segment0_blkaddr) + config.blks_per_seg) * blk_size_bytes; DBG(1, "\tWriting cp page 1 of checkpoint pack 2, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); @@ -644,7 +644,7 @@ static int f2fs_write_check_point_pack(void) goto free_cp_payload; } - for (i = 0; i < get_sb(cp_payload); i++) { + for (i = 0; i < get_val(sb, cp_payload); i++) { cp_seg_blk_offset += blk_size_bytes; if (dev_fill(cp_payload, cp_seg_blk_offset, blk_size_bytes)) { MSG(1, "\tError: While zeroing out the sit bitmap area \ @@ -655,7 +655,7 @@ static int f2fs_write_check_point_pack(void) /* cp page 2 of check point pack 2 */ cp_seg_blk_offset += blk_size_bytes * (le32_to_cpu(cp->cp_pack_total_block_count) - - get_sb(cp_payload) - 1); + - get_val(sb, cp_payload) - 1); DBG(1, "\tWriting cp page 2 of checkpoint pack 2, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); if (dev_write(cp, cp_seg_blk_offset, blk_size_bytes)) { MSG(1, "\tError: While writing the cp to disk!!!\n"); @@ -701,8 +701,8 @@ static int f2fs_write_super_block(void) static int discard_obsolete_dnode(struct f2fs_node *raw_node, u_int64_t offset) { do { - if (offset < get_sb(main_blkaddr) || - offset >= get_sb(main_blkaddr) + get_sb(block_count)) + if (offset < get_val(sb, main_blkaddr) || + offset >= get_val(sb, main_blkaddr) + get_val(sb, block_count)) break; if (dev_read_block(raw_node, offset)) { @@ -740,7 +740,7 @@ static int f2fs_write_root_inode(void) raw_node->footer.ino = sb->root_ino; raw_node->footer.cp_ver = cpu_to_le64(1); raw_node->footer.next_blkaddr = cpu_to_le32( - get_sb(main_blkaddr) + + get_val(sb, main_blkaddr) + config.cur_seg[CURSEG_HOT_NODE] * config.blks_per_seg + 1); @@ -749,7 +749,7 @@ static int f2fs_write_root_inode(void) raw_node->i.i_uid = cpu_to_le32(getuid()); raw_node->i.i_gid = cpu_to_le32(getgid()); - blk_size_bytes = 1 << get_sb(log_blocksize); + blk_size_bytes = 1 << get_val(sb, log_blocksize); raw_node->i.i_size = cpu_to_le64(1 * blk_size_bytes); /* dentry */ raw_node->i.i_blocks = cpu_to_le64(2); @@ -765,7 +765,7 @@ static int f2fs_write_root_inode(void) raw_node->i.i_current_depth = cpu_to_le32(1); raw_node->i.i_dir_level = DEF_DIR_LEVEL; - data_blk_nor = get_sb(main_blkaddr) + + data_blk_nor = get_val(sb, main_blkaddr) + config.cur_seg[CURSEG_HOT_DATA] * config.blks_per_seg; raw_node->i.i_addr[0] = cpu_to_le32(data_blk_nor); @@ -773,7 +773,7 @@ static int f2fs_write_root_inode(void) raw_node->i.i_ext.blk_addr = 0; raw_node->i.i_ext.len = 0; - main_area_node_seg_blk_offset = get_sb(main_blkaddr); + main_area_node_seg_blk_offset = get_val(sb, main_blkaddr); main_area_node_seg_blk_offset += config.cur_seg[CURSEG_HOT_NODE] * config.blks_per_seg; main_area_node_seg_blk_offset *= blk_size_bytes; @@ -786,7 +786,7 @@ static int f2fs_write_root_inode(void) } /* avoid power-off-recovery based on roll-forward policy */ - main_area_node_seg_blk_offset = get_sb(main_blkaddr); + main_area_node_seg_blk_offset = get_val(sb, main_blkaddr); main_area_node_seg_blk_offset += config.cur_seg[CURSEG_WARM_NODE] * config.blks_per_seg; @@ -813,21 +813,21 @@ static int f2fs_update_nat_root(void) } /* update root */ - nat_blk->entries[get_sb(root_ino)].block_addr = cpu_to_le32( - get_sb(main_blkaddr) + + nat_blk->entries[get_val(sb, root_ino)].block_addr = cpu_to_le32( + get_val(sb, main_blkaddr) + config.cur_seg[CURSEG_HOT_NODE] * config.blks_per_seg); - nat_blk->entries[get_sb(root_ino)].ino = sb->root_ino; + nat_blk->entries[get_val(sb, root_ino)].ino = sb->root_ino; /* update node nat */ - nat_blk->entries[get_sb(node_ino)].block_addr = cpu_to_le32(1); - nat_blk->entries[get_sb(node_ino)].ino = sb->node_ino; + nat_blk->entries[get_val(sb, node_ino)].block_addr = cpu_to_le32(1); + nat_blk->entries[get_val(sb, node_ino)].ino = sb->node_ino; /* update meta nat */ - nat_blk->entries[get_sb(meta_ino)].block_addr = cpu_to_le32(1); - nat_blk->entries[get_sb(meta_ino)].ino = sb->meta_ino; + nat_blk->entries[get_val(sb, meta_ino)].block_addr = cpu_to_le32(1); + nat_blk->entries[get_val(sb, meta_ino)].ino = sb->meta_ino; - blk_size_bytes = 1 << get_sb(log_blocksize); - nat_seg_blk_offset = get_sb(nat_blkaddr); + blk_size_bytes = 1 << get_val(sb, log_blocksize); + nat_seg_blk_offset = get_val(sb, nat_blkaddr); nat_seg_blk_offset *= blk_size_bytes; DBG(1, "\tWriting nat root, at offset 0x%08"PRIx64"\n", nat_seg_blk_offset); @@ -867,8 +867,8 @@ static int f2fs_add_default_dentry_root(void) /* bitmap for . and .. */ test_and_set_bit_le(0, dent_blk->dentry_bitmap); test_and_set_bit_le(1, dent_blk->dentry_bitmap); - blk_size_bytes = 1 << get_sb(log_blocksize); - data_blk_offset = get_sb(main_blkaddr); + blk_size_bytes = 1 << get_val(sb, log_blocksize); + data_blk_offset = get_val(sb, main_blkaddr); data_blk_offset += config.cur_seg[CURSEG_HOT_DATA] * config.blks_per_seg; data_blk_offset *= blk_size_bytes; -- 1.9.1 ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [RFC PATCH 1/4] f2fs-tools: simplify get_{sb|cp} and set_{sb|cp} 2016-01-30 2:25 ` Sheng Yong 2016-01-30 10:03 ` [RFC PATCH v2] " Sheng Yong @ 2016-02-02 0:27 ` Jaegeuk Kim 1 sibling, 0 replies; 9+ messages in thread From: Jaegeuk Kim @ 2016-02-02 0:27 UTC (permalink / raw) To: Sheng Yong; +Cc: linux-f2fs-devel Hello, On Sat, Jan 30, 2016 at 10:25:05AM +0800, Sheng Yong wrote: > Hi, Kim > > On 1/30/2016 9:46 AM, Jaegeuk Kim wrote: > > Hi Sheng, > > > > This is not a good way. > > You're asking to change all the pending patches as well. > > > > Why not just adding two definitions like these? > > > > #define get_sb(member) get_val(sb, member) > > #define set_sb(member, val) set_sb(sb, member, val) > > #define get_cp(member) get_val(cp, member) > > #define set_cp(member, val) set_sb(cp, member, val) > > > You mean we should still keep the get_{sb|cp} and set_{sb|cp} for some time but > mark them as deprecated? Anyway, this is a trivial cleanup. I think it's ok to > keep it as it is now :) No, I don't agree. IMO, there is no reason to remove get_{sb|cp} and set_{sb|cp}. What benefits can you describe in this patch? I just thought that you tried to remove redundant macros in f2fs_fs.h. If so, the only worthy change looks like adding wrapper macros like above. Thanks, > > thanks, > Sheng > > Thanks, > > > > On Sat, Jan 30, 2016 at 09:16:36AM +0000, Sheng Yong wrote: > >> * Remove dumplicated definitions of get_{sb|cp} and set_{sb|cp}, and introduce > >> micros get_val and set_val instead. > >> * Add a new parameter to get_val and set_val so that they are not depended on > >> implied definition of `sb' and `cp'. > >> > >> Signed-off-by: Sheng Yong <shengyong1@huawei.com> > >> --- > >> fsck/fsck.c | 20 ++--- > >> fsck/main.c | 8 +- > >> fsck/mount.c | 146 ++++++++++++++++----------------- > >> include/f2fs_fs.h | 84 +++++++------------ > >> mkfs/f2fs_format.c | 234 ++++++++++++++++++++++++++--------------------------- > >> 5 files changed, 232 insertions(+), 260 deletions(-) > >> > >> diff --git a/fsck/fsck.c b/fsck/fsck.c > >> index e7dd02f..4fbb56d 100644 > >> --- a/fsck/fsck.c > >> +++ b/fsck/fsck.c > >> @@ -1191,7 +1191,7 @@ void fsck_chk_orphan_node(struct f2fs_sb_info *sbi) > >> if (!is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ORPHAN_PRESENT_FLAG)) > >> return; > >> > >> - start_blk = __start_cp_addr(sbi) + 1 + get_sb(cp_payload); > >> + start_blk = __start_cp_addr(sbi) + 1 + get_val(sb, cp_payload); > >> orphan_blkaddr = __start_sum_addr(sbi) - 1; > >> > >> orphan_blk = calloc(BLOCK_SZ, 1); > >> @@ -1324,25 +1324,25 @@ static void fix_checkpoint(struct f2fs_sb_info *sbi) > >> flags |= CP_ORPHAN_PRESENT_FLAG; > >> } > >> > >> - set_cp(ckpt_flags, flags); > >> - set_cp(cp_pack_total_block_count, 8 + orphan_blks + get_sb(cp_payload)); > >> + set_val(cp, ckpt_flags, flags); > >> + set_val(cp, cp_pack_total_block_count, 8 + orphan_blks + get_val(sb, cp_payload)); > >> > >> - set_cp(free_segment_count, fsck->chk.free_segs); > >> - set_cp(valid_block_count, fsck->chk.valid_blk_cnt); > >> - set_cp(valid_node_count, fsck->chk.valid_node_cnt); > >> - set_cp(valid_inode_count, fsck->chk.valid_inode_cnt); > >> + set_val(cp, free_segment_count, fsck->chk.free_segs); > >> + set_val(cp, valid_block_count, fsck->chk.valid_blk_cnt); > >> + set_val(cp, valid_node_count, fsck->chk.valid_node_cnt); > >> + set_val(cp, valid_inode_count, fsck->chk.valid_inode_cnt); > >> > >> crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); > >> *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); > >> > >> - cp_blk_no = get_sb(cp_blkaddr); > >> + cp_blk_no = get_val(sb, cp_blkaddr); > >> if (sbi->cur_cp == 2) > >> - cp_blk_no += 1 << get_sb(log_blocks_per_seg); > >> + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); > >> > >> ret = dev_write_block(cp, cp_blk_no++); > >> ASSERT(ret >= 0); > >> > >> - for (i = 0; i < get_sb(cp_payload); i++) { > >> + for (i = 0; i < get_val(sb, cp_payload); i++) { > >> ret = dev_write_block(((unsigned char *)cp) + i * F2FS_BLKSIZE, > >> cp_blk_no++); > >> ASSERT(ret >= 0); > >> diff --git a/fsck/main.c b/fsck/main.c > >> index 54dbb2d..7fcaa5d 100644 > >> --- a/fsck/main.c > >> +++ b/fsck/main.c > >> @@ -255,7 +255,7 @@ static int do_defrag(struct f2fs_sb_info *sbi) > >> { > >> struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); > >> > >> - if (config.defrag_start > get_sb(block_count)) > >> + if (config.defrag_start > get_val(sb, block_count)) > >> goto out_range; > >> if (config.defrag_start < SM_I(sbi)->main_blkaddr) > >> config.defrag_start = SM_I(sbi)->main_blkaddr; > >> @@ -263,8 +263,8 @@ static int do_defrag(struct f2fs_sb_info *sbi) > >> if (config.defrag_len == 0) > >> config.defrag_len = sbi->blocks_per_seg; > >> > >> - if (config.defrag_start + config.defrag_len > get_sb(block_count)) > >> - config.defrag_len = get_sb(block_count) - config.defrag_start; > >> + if (config.defrag_start + config.defrag_len > get_val(sb, block_count)) > >> + config.defrag_len = get_val(sb, block_count) - config.defrag_start; > >> > >> if (config.defrag_target == 0) { > >> config.defrag_target = config.defrag_start - 1; > >> @@ -273,7 +273,7 @@ static int do_defrag(struct f2fs_sb_info *sbi) > >> } > >> > >> if (config.defrag_target < SM_I(sbi)->main_blkaddr || > >> - config.defrag_target > get_sb(block_count)) > >> + config.defrag_target > get_val(sb, block_count)) > >> goto out_range; > >> if (config.defrag_target >= config.defrag_start && > >> config.defrag_target < config.defrag_start + config.defrag_len) > >> diff --git a/fsck/mount.c b/fsck/mount.c > >> index 4c807f9..6e6d230 100644 > >> --- a/fsck/mount.c > >> +++ b/fsck/mount.c > >> @@ -269,21 +269,21 @@ int sanity_check_raw_super(struct f2fs_super_block *sb) > >> { > >> unsigned int blocksize; > >> > >> - if (F2FS_SUPER_MAGIC != get_sb(magic)) > >> + if (F2FS_SUPER_MAGIC != get_val(sb, magic)) > >> return -1; > >> > >> if (F2FS_BLKSIZE != PAGE_CACHE_SIZE) > >> return -1; > >> > >> - blocksize = 1 << get_sb(log_blocksize); > >> + blocksize = 1 << get_val(sb, log_blocksize); > >> if (F2FS_BLKSIZE != blocksize) > >> return -1; > >> > >> - if (get_sb(log_sectorsize) > F2FS_MAX_LOG_SECTOR_SIZE || > >> - get_sb(log_sectorsize) < F2FS_MIN_LOG_SECTOR_SIZE) > >> + if (get_val(sb, log_sectorsize) > F2FS_MAX_LOG_SECTOR_SIZE || > >> + get_val(sb, log_sectorsize) < F2FS_MIN_LOG_SECTOR_SIZE) > >> return -1; > >> > >> - if (get_sb(log_sectors_per_block) + get_sb(log_sectorsize) != > >> + if (get_val(sb, log_sectors_per_block) + get_val(sb, log_sectorsize) != > >> F2FS_MAX_LOG_SECTOR_SIZE) > >> return -1; > >> > >> @@ -350,22 +350,22 @@ int init_sb_info(struct f2fs_sb_info *sbi) > >> struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); > >> u64 total_sectors; > >> > >> - sbi->log_sectors_per_block = get_sb(log_sectors_per_block); > >> - sbi->log_blocksize = get_sb(log_blocksize); > >> + sbi->log_sectors_per_block = get_val(sb, log_sectors_per_block); > >> + sbi->log_blocksize = get_val(sb, log_blocksize); > >> sbi->blocksize = 1 << sbi->log_blocksize; > >> - sbi->log_blocks_per_seg = get_sb(log_blocks_per_seg); > >> + sbi->log_blocks_per_seg = get_val(sb, log_blocks_per_seg); > >> sbi->blocks_per_seg = 1 << sbi->log_blocks_per_seg; > >> - sbi->segs_per_sec = get_sb(segs_per_sec); > >> - sbi->secs_per_zone = get_sb(secs_per_zone); > >> - sbi->total_sections = get_sb(section_count); > >> - sbi->total_node_count = (get_sb(segment_count_nat) / 2) * > >> + sbi->segs_per_sec = get_val(sb, segs_per_sec); > >> + sbi->secs_per_zone = get_val(sb, secs_per_zone); > >> + sbi->total_sections = get_val(sb, section_count); > >> + sbi->total_node_count = (get_val(sb, segment_count_nat) / 2) * > >> sbi->blocks_per_seg * NAT_ENTRY_PER_BLOCK; > >> - sbi->root_ino_num = get_sb(root_ino); > >> - sbi->node_ino_num = get_sb(node_ino); > >> - sbi->meta_ino_num = get_sb(meta_ino); > >> + sbi->root_ino_num = get_val(sb, root_ino); > >> + sbi->node_ino_num = get_val(sb, node_ino); > >> + sbi->meta_ino_num = get_val(sb, meta_ino); > >> sbi->cur_victim_sec = NULL_SEGNO; > >> > >> - total_sectors = get_sb(block_count) << sbi->log_sectors_per_block; > >> + total_sectors = get_val(sb, block_count) << sbi->log_sectors_per_block; > >> MSG(0, "Info: total FS sectors = %"PRIu64" (%"PRIu64" MB)\n", > >> total_sectors, total_sectors >> 11); > >> return 0; > >> @@ -387,7 +387,7 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, > >> return NULL; > >> > >> cp = (struct f2fs_checkpoint *)cp_page_1; > >> - crc_offset = get_cp(checksum_offset); > >> + crc_offset = get_val(cp, checksum_offset); > >> if (crc_offset >= blk_size) > >> goto invalid_cp1; > >> > >> @@ -395,17 +395,17 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, > >> if (f2fs_crc_valid(crc, cp, crc_offset)) > >> goto invalid_cp1; > >> > >> - pre_version = get_cp(checkpoint_ver); > >> + pre_version = get_val(cp, checkpoint_ver); > >> > >> /* Read the 2nd cp block in this CP pack */ > >> cp_page_2 = malloc(PAGE_SIZE); > >> - cp_addr += get_cp(cp_pack_total_block_count) - 1; > >> + cp_addr += get_val(cp, cp_pack_total_block_count) - 1; > >> > >> if (dev_read_block(cp_page_2, cp_addr) < 0) > >> goto invalid_cp2; > >> > >> cp = (struct f2fs_checkpoint *)cp_page_2; > >> - crc_offset = get_cp(checksum_offset); > >> + crc_offset = get_val(cp, checksum_offset); > >> if (crc_offset >= blk_size) > >> goto invalid_cp2; > >> > >> @@ -413,7 +413,7 @@ void *validate_checkpoint(struct f2fs_sb_info *sbi, block_t cp_addr, > >> if (f2fs_crc_valid(crc, cp, crc_offset)) > >> goto invalid_cp2; > >> > >> - cur_version = get_cp(checkpoint_ver); > >> + cur_version = get_val(cp, checkpoint_ver); > >> > >> if (cur_version == pre_version) { > >> *version = cur_version; > >> @@ -435,7 +435,7 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) > >> unsigned long blk_size = sbi->blocksize; > >> unsigned long long cp1_version = 0, cp2_version = 0, version; > >> unsigned long long cp_start_blk_no; > >> - unsigned int cp_blks = 1 + get_sb(cp_payload); > >> + unsigned int cp_blks = 1 + get_val(sb, cp_payload); > >> int ret; > >> > >> sbi->ckpt = malloc(cp_blks * blk_size); > >> @@ -445,11 +445,11 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) > >> * Finding out valid cp block involves read both > >> * sets( cp pack1 and cp pack 2) > >> */ > >> - cp_start_blk_no = get_sb(cp_blkaddr); > >> + cp_start_blk_no = get_val(sb, cp_blkaddr); > >> cp1 = validate_checkpoint(sbi, cp_start_blk_no, &cp1_version); > >> > >> /* The second checkpoint pack should start at the next segment */ > >> - cp_start_blk_no += 1 << get_sb(log_blocks_per_seg); > >> + cp_start_blk_no += 1 << get_val(sb, log_blocks_per_seg); > >> cp2 = validate_checkpoint(sbi, cp_start_blk_no, &cp2_version); > >> > >> if (cp1 && cp2) { > >> @@ -481,9 +481,9 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi) > >> unsigned int i; > >> unsigned long long cp_blk_no; > >> > >> - cp_blk_no = get_sb(cp_blkaddr); > >> + cp_blk_no = get_val(sb, cp_blkaddr); > >> if (cur_page == cp2) > >> - cp_blk_no += 1 << get_sb(log_blocks_per_seg); > >> + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); > >> > >> /* copy sit bitmap */ > >> for (i = 1; i < cp_blks; i++) { > >> @@ -510,12 +510,12 @@ int sanity_check_ckpt(struct f2fs_sb_info *sbi) > >> struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); > >> struct f2fs_checkpoint *cp = F2FS_CKPT(sbi); > >> > >> - total = get_sb(segment_count); > >> - fsmeta = get_sb(segment_count_ckpt); > >> - fsmeta += get_sb(segment_count_sit); > >> - fsmeta += get_sb(segment_count_nat); > >> - fsmeta += get_cp(rsvd_segment_count); > >> - fsmeta += get_sb(segment_count_ssa); > >> + total = get_val(sb, segment_count); > >> + fsmeta = get_val(sb, segment_count_ckpt); > >> + fsmeta += get_val(sb, segment_count_sit); > >> + fsmeta += get_val(sb, segment_count_nat); > >> + fsmeta += get_val(cp, rsvd_segment_count); > >> + fsmeta += get_val(sb, segment_count_ssa); > >> > >> if (fsmeta >= total) > >> return 1; > >> @@ -531,16 +531,16 @@ int init_node_manager(struct f2fs_sb_info *sbi) > >> unsigned char *version_bitmap; > >> unsigned int nat_segs, nat_blocks; > >> > >> - nm_i->nat_blkaddr = get_sb(nat_blkaddr); > >> + nm_i->nat_blkaddr = get_val(sb, nat_blkaddr); > >> > >> /* segment_count_nat includes pair segment so divide to 2. */ > >> - nat_segs = get_sb(segment_count_nat) >> 1; > >> - nat_blocks = nat_segs << get_sb(log_blocks_per_seg); > >> + nat_segs = get_val(sb, segment_count_nat) >> 1; > >> + nat_blocks = nat_segs << get_val(sb, log_blocks_per_seg); > >> nm_i->max_nid = NAT_ENTRY_PER_BLOCK * nat_blocks; > >> nm_i->fcnt = 0; > >> nm_i->nat_cnt = 0; > >> - nm_i->init_scan_nid = get_cp(next_free_nid); > >> - nm_i->next_scan_nid = get_cp(next_free_nid); > >> + nm_i->init_scan_nid = get_val(cp, next_free_nid); > >> + nm_i->next_scan_nid = get_val(cp, next_free_nid); > >> > >> nm_i->bitmap_size = __bitmap_size(sbi, NAT_BITMAP); > >> > >> @@ -597,21 +597,21 @@ int build_sit_info(struct f2fs_sb_info *sbi) > >> return -ENOMEM; > >> } > >> > >> - sit_segs = get_sb(segment_count_sit) >> 1; > >> + sit_segs = get_val(sb, segment_count_sit) >> 1; > >> bitmap_size = __bitmap_size(sbi, SIT_BITMAP); > >> src_bitmap = __bitmap_ptr(sbi, SIT_BITMAP); > >> > >> dst_bitmap = malloc(bitmap_size); > >> memcpy(dst_bitmap, src_bitmap, bitmap_size); > >> > >> - sit_i->sit_base_addr = get_sb(sit_blkaddr); > >> + sit_i->sit_base_addr = get_val(sb, sit_blkaddr); > >> sit_i->sit_blocks = sit_segs << sbi->log_blocks_per_seg; > >> - sit_i->written_valid_blocks = get_cp(valid_block_count); > >> + sit_i->written_valid_blocks = get_val(cp, valid_block_count); > >> sit_i->sit_bitmap = dst_bitmap; > >> sit_i->bitmap_size = bitmap_size; > >> sit_i->dirty_sentries = 0; > >> sit_i->sents_per_block = SIT_ENTRY_PER_BLOCK; > >> - sit_i->elapsed_time = get_cp(elapsed_time); > >> + sit_i->elapsed_time = get_val(cp, elapsed_time); > >> return 0; > >> } > >> > >> @@ -716,13 +716,13 @@ static void read_normal_summaries(struct f2fs_sb_info *sbi, int type) > >> int ret; > >> > >> if (IS_DATASEG(type)) { > >> - segno = get_cp(cur_data_segno[type]); > >> + segno = get_val(cp, cur_data_segno[type]); > >> if (is_set_ckpt_flags(cp, CP_UMOUNT_FLAG)) > >> blk_addr = sum_blk_addr(sbi, NR_CURSEG_TYPE, type); > >> else > >> blk_addr = sum_blk_addr(sbi, NR_CURSEG_DATA_TYPE, type); > >> } else { > >> - segno = get_cp(cur_node_segno[type - CURSEG_HOT_NODE]); > >> + segno = get_val(cp, cur_node_segno[type - CURSEG_HOT_NODE]); > >> if (is_set_ckpt_flags(cp, CP_UMOUNT_FLAG)) > >> blk_addr = sum_blk_addr(sbi, NR_CURSEG_NODE_TYPE, > >> type - CURSEG_HOT_NODE); > >> @@ -803,12 +803,12 @@ static void build_curseg(struct f2fs_sb_info *sbi) > >> array[i].sum_blk = malloc(PAGE_CACHE_SIZE); > >> ASSERT(array[i].sum_blk); > >> if (i <= CURSEG_COLD_DATA) { > >> - blk_off = get_cp(cur_data_blkoff[i]); > >> - segno = get_cp(cur_data_segno[i]); > >> + blk_off = get_val(cp, cur_data_blkoff[i]); > >> + segno = get_val(cp, cur_data_segno[i]); > >> } > >> if (i > CURSEG_COLD_DATA) { > >> - blk_off = get_cp(cur_node_blkoff[i - CURSEG_HOT_NODE]); > >> - segno = get_cp(cur_node_segno[i - CURSEG_HOT_NODE]); > >> + blk_off = get_val(cp, cur_node_blkoff[i - CURSEG_HOT_NODE]); > >> + segno = get_val(cp, cur_node_segno[i - CURSEG_HOT_NODE]); > >> } > >> array[i].segno = segno; > >> array[i].zone = GET_ZONENO_FROM_SEGNO(sbi, segno); > >> @@ -924,7 +924,7 @@ struct f2fs_summary_block *get_sum_block(struct f2fs_sb_info *sbi, > >> > >> ssa_blk = GET_SUM_BLKADDR(sbi, segno); > >> for (type = 0; type < NR_CURSEG_NODE_TYPE; type++) { > >> - if (segno == get_cp(cur_node_segno[type])) { > >> + if (segno == get_val(cp, cur_node_segno[type])) { > >> curseg = CURSEG_I(sbi, CURSEG_HOT_NODE + type); > >> if (!IS_SUM_NODE_SEG(curseg->sum_blk->footer)) { > >> ASSERT_MSG("segno [0x%x] indicates a data " > >> @@ -939,7 +939,7 @@ struct f2fs_summary_block *get_sum_block(struct f2fs_sb_info *sbi, > >> } > >> > >> for (type = 0; type < NR_CURSEG_DATA_TYPE; type++) { > >> - if (segno == get_cp(cur_data_segno[type])) { > >> + if (segno == get_val(cp, cur_data_segno[type])) { > >> curseg = CURSEG_I(sbi, type); > >> if (IS_SUM_NODE_SEG(curseg->sum_blk->footer)) { > >> ASSERT_MSG("segno [0x%x] indicates a node " > >> @@ -1151,13 +1151,13 @@ int build_segment_manager(struct f2fs_sb_info *sbi) > >> > >> /* init sm info */ > >> sbi->sm_info = sm_info; > >> - sm_info->seg0_blkaddr = get_sb(segment0_blkaddr); > >> - sm_info->main_blkaddr = get_sb(main_blkaddr); > >> - sm_info->segment_count = get_sb(segment_count); > >> - sm_info->reserved_segments = get_cp(rsvd_segment_count); > >> - sm_info->ovp_segments = get_cp(overprov_segment_count); > >> - sm_info->main_segments = get_sb(segment_count_main); > >> - sm_info->ssa_blkaddr = get_sb(ssa_blkaddr); > >> + sm_info->seg0_blkaddr = get_val(sb, segment0_blkaddr); > >> + sm_info->main_blkaddr = get_val(sb, main_blkaddr); > >> + sm_info->segment_count = get_val(sb, segment_count); > >> + sm_info->reserved_segments = get_val(cp, rsvd_segment_count); > >> + sm_info->ovp_segments = get_val(cp, overprov_segment_count); > >> + sm_info->main_segments = get_val(sb, segment_count_main); > >> + sm_info->ssa_blkaddr = get_val(sb, ssa_blkaddr); > >> > >> build_sit_info(sbi); > >> > >> @@ -1384,7 +1384,7 @@ void flush_sit_entries(struct f2fs_sb_info *sbi) > >> free_segs++; > >> } > >> > >> - set_cp(free_segment_count, free_segs); > >> + set_val(cp, free_segment_count, free_segs); > >> } > >> > >> int find_next_free_block(struct f2fs_sb_info *sbi, u64 *to, int left, int type) > >> @@ -1487,14 +1487,14 @@ void write_curseg_info(struct f2fs_sb_info *sbi) > >> for (i = 0; i < NO_CHECK_TYPE; i++) { > >> cp->alloc_type[i] = CURSEG_I(sbi, i)->alloc_type; > >> if (i < CURSEG_HOT_NODE) { > >> - set_cp(cur_data_segno[i], CURSEG_I(sbi, i)->segno); > >> - set_cp(cur_data_blkoff[i], > >> + set_val(cp, cur_data_segno[i], CURSEG_I(sbi, i)->segno); > >> + set_val(cp, cur_data_blkoff[i], > >> CURSEG_I(sbi, i)->next_blkoff); > >> } else { > >> int n = i - CURSEG_HOT_NODE; > >> > >> - set_cp(cur_node_segno[n], CURSEG_I(sbi, i)->segno); > >> - set_cp(cur_node_blkoff[n], > >> + set_val(cp, cur_node_segno[n], CURSEG_I(sbi, i)->segno); > >> + set_val(cp, cur_node_blkoff[n], > >> CURSEG_I(sbi, i)->next_blkoff); > >> } > >> } > >> @@ -1578,24 +1578,24 @@ void write_checkpoint(struct f2fs_sb_info *sbi) > >> flags |= CP_ORPHAN_PRESENT_FLAG; > >> } > >> > >> - set_cp(ckpt_flags, flags); > >> + set_val(cp, ckpt_flags, flags); > >> > >> - set_cp(free_segment_count, get_free_segments(sbi)); > >> - set_cp(cp_pack_total_block_count, 8 + orphan_blks + get_sb(cp_payload)); > >> + set_val(cp, free_segment_count, get_free_segments(sbi)); > >> + set_val(cp, cp_pack_total_block_count, 8 + orphan_blks + get_val(sb, cp_payload)); > >> > >> crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); > >> *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = cpu_to_le32(crc); > >> > >> - cp_blk_no = get_sb(cp_blkaddr); > >> + cp_blk_no = get_val(sb, cp_blkaddr); > >> if (sbi->cur_cp == 2) > >> - cp_blk_no += 1 << get_sb(log_blocks_per_seg); > >> + cp_blk_no += 1 << get_val(sb, log_blocks_per_seg); > >> > >> /* write the first cp */ > >> ret = dev_write_block(cp, cp_blk_no++); > >> ASSERT(ret >= 0); > >> > >> /* skip payload */ > >> - cp_blk_no += get_sb(cp_payload); > >> + cp_blk_no += get_val(sb, cp_payload); > >> /* skip orphan blocks */ > >> cp_blk_no += orphan_blks; > >> > >> @@ -1635,7 +1635,7 @@ void build_nat_area_bitmap(struct f2fs_sb_info *sbi) > >> ASSERT(nat_block); > >> > >> /* Alloc & build nat entry bitmap */ > >> - nr_nat_blks = (get_sb(segment_count_nat) / 2) << > >> + nr_nat_blks = (get_val(sb, segment_count_nat) / 2) << > >> sbi->log_blocks_per_seg; > >> > >> fsck->nr_nat_entries = nr_nat_blks * NAT_ENTRY_PER_BLOCK; > >> @@ -1731,7 +1731,7 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi) > >> print_ckpt_info(sbi); > >> > >> if (config.auto_fix) { > >> - u32 flag = get_cp(ckpt_flags); > >> + u32 flag = get_val(cp, ckpt_flags); > >> > >> if (flag & CP_FSCK_FLAG) > >> config.fix_on = 1; > >> @@ -1741,10 +1741,10 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi) > >> > >> config.bug_on = 0; > >> > >> - sbi->total_valid_node_count = get_cp(valid_node_count); > >> - sbi->total_valid_inode_count = get_cp(valid_inode_count); > >> - sbi->user_block_count = get_cp(user_block_count); > >> - sbi->total_valid_block_count = get_cp(valid_block_count); > >> + sbi->total_valid_node_count = get_val(cp, valid_node_count); > >> + sbi->total_valid_inode_count = get_val(cp, valid_inode_count); > >> + sbi->user_block_count = get_val(cp, user_block_count); > >> + sbi->total_valid_block_count = get_val(cp, valid_block_count); > >> sbi->last_valid_block_count = sbi->total_valid_block_count; > >> sbi->alloc_valid_block_count = 0; > >> > >> diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h > >> index e1eeb6e..2ab9f49 100644 > >> --- a/include/f2fs_fs.h > >> +++ b/include/f2fs_fs.h > >> @@ -270,60 +270,32 @@ struct f2fs_configuration { > >> #define BIT_MASK(nr) (1 << (nr % BITS_PER_LONG)) > >> #define BIT_WORD(nr) (nr / BITS_PER_LONG) > >> > >> -#define set_sb_le64(member, val) (sb->member = cpu_to_le64(val)) > >> -#define set_sb_le32(member, val) (sb->member = cpu_to_le32(val)) > >> -#define set_sb_le16(member, val) (sb->member = cpu_to_le16(val)) > >> -#define get_sb_le64(member) le64_to_cpu(sb->member) > >> -#define get_sb_le32(member) le32_to_cpu(sb->member) > >> -#define get_sb_le16(member) le16_to_cpu(sb->member) > >> - > >> -#define set_sb(member, val) \ > >> - do { \ > >> - typeof(sb->member) t; \ > >> - switch (sizeof(t)) { \ > >> - case 8: set_sb_le64(member, val); break; \ > >> - case 4: set_sb_le32(member, val); break; \ > >> - case 2: set_sb_le16(member, val); break; \ > >> - } \ > >> +#define set_le64(ptr, member, val) ((ptr)->member = cpu_to_le64(val)) > >> +#define set_le32(ptr, member, val) ((ptr)->member = cpu_to_le32(val)) > >> +#define set_le16(ptr, member, val) ((ptr)->member = cpu_to_le16(val)) > >> +#define get_le64(ptr, member) le64_to_cpu((ptr)->member) > >> +#define get_le32(ptr, member) le32_to_cpu((ptr)->member) > >> +#define get_le16(ptr, member) le16_to_cpu((ptr)->member) > >> + > >> +#define set_val(ptr, member, val) \ > >> + do { \ > >> + typeof((ptr)->member) t; \ > >> + switch (sizeof(t)) { \ > >> + case 8: set_le64(ptr, member, val); break; \ > >> + case 4: set_le32(ptr, member, val); break; \ > >> + case 2: set_le16(ptr, member, val); break; \ > >> + } \ > >> } while(0) > >> > >> -#define get_sb(member) \ > >> - ({ \ > >> - typeof(sb->member) t; \ > >> - switch (sizeof(t)) { \ > >> - case 8: t = get_sb_le64(member); break; \ > >> - case 4: t = get_sb_le32(member); break; \ > >> - case 2: t = get_sb_le16(member); break; \ > >> - } \ > >> - t; \ > >> - }) > >> - > >> -#define set_cp_le64(member, val) (cp->member = cpu_to_le64(val)) > >> -#define set_cp_le32(member, val) (cp->member = cpu_to_le32(val)) > >> -#define set_cp_le16(member, val) (cp->member = cpu_to_le16(val)) > >> -#define get_cp_le64(member) le64_to_cpu(cp->member) > >> -#define get_cp_le32(member) le32_to_cpu(cp->member) > >> -#define get_cp_le16(member) le16_to_cpu(cp->member) > >> - > >> -#define set_cp(member, val) \ > >> - do { \ > >> - typeof(cp->member) t; \ > >> - switch (sizeof(t)) { \ > >> - case 8: set_cp_le64(member, val); break; \ > >> - case 4: set_cp_le32(member, val); break; \ > >> - case 2: set_cp_le16(member, val); break; \ > >> - } \ > >> - } while(0) > >> - > >> -#define get_cp(member) \ > >> - ({ \ > >> - typeof(cp->member) t; \ > >> - switch (sizeof(t)) { \ > >> - case 8: t = get_cp_le64(member); break; \ > >> - case 4: t = get_cp_le32(member); break; \ > >> - case 2: t = get_cp_le16(member); break; \ > >> - } \ > >> - t; \ > >> +#define get_val(ptr, member) \ > >> + ({ \ > >> + typeof((ptr)->member) t; \ > >> + switch (sizeof(t)) { \ > >> + case 8: t = get_le64(ptr, member); break; \ > >> + case 4: t = get_le32(ptr, member); break; \ > >> + case 2: t = get_le16(ptr, member); break; \ > >> + } \ > >> + t; \ > >> }) > >> > >> /* > >> @@ -899,7 +871,7 @@ static inline double get_best_overprovision(struct f2fs_super_block *sb) > >> double reserved, ovp, candidate, end, diff, space; > >> double max_ovp = 0, max_space = 0; > >> > >> - if (get_sb(segment_count_main) < 256) { > >> + if (get_val(sb, segment_count_main) < 256) { > >> candidate = 10; > >> end = 95; > >> diff = 5; > >> @@ -911,9 +883,9 @@ static inline double get_best_overprovision(struct f2fs_super_block *sb) > >> > >> for (; candidate <= end; candidate += diff) { > >> reserved = (2 * (100 / candidate + 1) + 6) * > >> - get_sb(segs_per_sec); > >> - ovp = (get_sb(segment_count_main) - reserved) * candidate / 100; > >> - space = get_sb(segment_count_main) - reserved - ovp; > >> + get_val(sb, segs_per_sec); > >> + ovp = (get_val(sb, segment_count_main) - reserved) * candidate / 100; > >> + space = get_val(sb, segment_count_main) - reserved - ovp; > >> if (max_space < space) { > >> max_space = space; > >> max_ovp = candidate; > >> diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c > >> index 645c2aa..db5348e 100644 > >> --- a/mkfs/f2fs_format.c > >> +++ b/mkfs/f2fs_format.c > >> @@ -83,7 +83,7 @@ static void configure_extension_list(void) > >> int name_len; > >> int i = 0; > >> > >> - set_sb(extension_count, 0); > >> + set_val(sb, extension_count, 0); > >> memset(sb->extension_list, 0, sizeof(sb->extension_list)); > >> > >> while (*extlist) { > >> @@ -91,7 +91,7 @@ static void configure_extension_list(void) > >> memcpy(sb->extension_list[i++], *extlist, name_len); > >> extlist++; > >> } > >> - set_sb(extension_count, i); > >> + set_val(sb, extension_count, i); > >> > >> if (!ext_str) > >> return; > >> @@ -112,7 +112,7 @@ next: > >> break; > >> } > >> > >> - set_sb(extension_count, i); > >> + set_val(sb, extension_count, i); > >> > >> free(config.extension_list); > >> } > >> @@ -132,23 +132,23 @@ static int f2fs_prepare_super_block(void) > >> u_int32_t max_nat_bitmap_size, max_nat_segments; > >> u_int32_t total_zones; > >> > >> - set_sb(magic, F2FS_SUPER_MAGIC); > >> - set_sb(major_ver, F2FS_MAJOR_VERSION); > >> - set_sb(minor_ver, F2FS_MINOR_VERSION); > >> + set_val(sb, magic, F2FS_SUPER_MAGIC); > >> + set_val(sb, major_ver, F2FS_MAJOR_VERSION); > >> + set_val(sb, minor_ver, F2FS_MINOR_VERSION); > >> > >> log_sectorsize = log_base_2(config.sector_size); > >> log_sectors_per_block = log_base_2(config.sectors_per_blk); > >> log_blocksize = log_sectorsize + log_sectors_per_block; > >> log_blks_per_seg = log_base_2(config.blks_per_seg); > >> > >> - set_sb(log_sectorsize, log_sectorsize); > >> - set_sb(log_sectors_per_block, log_sectors_per_block); > >> + set_val(sb, log_sectorsize, log_sectorsize); > >> + set_val(sb, log_sectors_per_block, log_sectors_per_block); > >> > >> - set_sb(log_blocksize, log_blocksize); > >> - set_sb(log_blocks_per_seg, log_blks_per_seg); > >> + set_val(sb, log_blocksize, log_blocksize); > >> + set_val(sb, log_blocks_per_seg, log_blks_per_seg); > >> > >> - set_sb(segs_per_sec, config.segs_per_sec); > >> - set_sb(secs_per_zone, config.secs_per_zone); > >> + set_val(sb, segs_per_sec, config.segs_per_sec); > >> + set_val(sb, secs_per_zone, config.secs_per_zone); > >> > >> blk_size_bytes = 1 << log_blocksize; > >> segment_size_bytes = blk_size_bytes * config.blks_per_seg; > >> @@ -156,9 +156,9 @@ static int f2fs_prepare_super_block(void) > >> blk_size_bytes * config.secs_per_zone * > >> config.segs_per_sec * config.blks_per_seg; > >> > >> - set_sb(checksum_offset, 0); > >> + set_val(sb, checksum_offset, 0); > >> > >> - set_sb(block_count, config.total_sectors >> log_sectors_per_block); > >> + set_val(sb, block_count, config.total_sectors >> log_sectors_per_block); > >> > >> zone_align_start_offset = > >> (config.start_sector * config.sector_size + > >> @@ -174,41 +174,41 @@ static int f2fs_prepare_super_block(void) > >> config.sectors_per_blk); > >> } > >> > >> - set_sb(segment_count, (config.total_sectors * config.sector_size - > >> + set_val(sb, segment_count, (config.total_sectors * config.sector_size - > >> zone_align_start_offset) / segment_size_bytes); > >> > >> - set_sb(segment0_blkaddr, zone_align_start_offset / blk_size_bytes); > >> + set_val(sb, segment0_blkaddr, zone_align_start_offset / blk_size_bytes); > >> sb->cp_blkaddr = sb->segment0_blkaddr; > >> > >> - MSG(0, "Info: zone aligned segment0 blkaddr: %u\n", get_sb(segment0_blkaddr)); > >> + MSG(0, "Info: zone aligned segment0 blkaddr: %u\n", get_val(sb, segment0_blkaddr)); > >> > >> - set_sb(segment_count_ckpt, F2FS_NUMBER_OF_CHECKPOINT_PACK); > >> + set_val(sb, segment_count_ckpt, F2FS_NUMBER_OF_CHECKPOINT_PACK); > >> > >> - set_sb(sit_blkaddr, get_sb(segment0_blkaddr) + get_sb(segment_count_ckpt) * > >> + set_val(sb, sit_blkaddr, get_val(sb, segment0_blkaddr) + get_val(sb, segment_count_ckpt) * > >> config.blks_per_seg); > >> > >> - blocks_for_sit = ALIGN(get_sb(segment_count), SIT_ENTRY_PER_BLOCK); > >> + blocks_for_sit = ALIGN(get_val(sb, segment_count), SIT_ENTRY_PER_BLOCK); > >> > >> sit_segments = SEG_ALIGN(blocks_for_sit); > >> > >> - set_sb(segment_count_sit, sit_segments * 2); > >> + set_val(sb, segment_count_sit, sit_segments * 2); > >> > >> - set_sb(nat_blkaddr, get_sb(sit_blkaddr) + get_sb(segment_count_sit) * > >> + set_val(sb, nat_blkaddr, get_val(sb, sit_blkaddr) + get_val(sb, segment_count_sit) * > >> config.blks_per_seg); > >> > >> - total_valid_blks_available = (get_sb(segment_count) - > >> - (get_sb(segment_count_ckpt) + get_sb(segment_count_sit))) * > >> + total_valid_blks_available = (get_val(sb, segment_count) - > >> + (get_val(sb, segment_count_ckpt) + get_val(sb, segment_count_sit))) * > >> config.blks_per_seg; > >> > >> blocks_for_nat = ALIGN(total_valid_blks_available, NAT_ENTRY_PER_BLOCK); > >> > >> - set_sb(segment_count_nat, SEG_ALIGN(blocks_for_nat)); > >> + set_val(sb, segment_count_nat, SEG_ALIGN(blocks_for_nat)); > >> /* > >> * The number of node segments should not be exceeded a "Threshold". > >> * This number resizes NAT bitmap area in a CP page. > >> * So the threshold is determined not to overflow one CP page > >> */ > >> - sit_bitmap_size = ((get_sb(segment_count_sit) / 2) << > >> + sit_bitmap_size = ((get_val(sb, segment_count_sit) / 2) << > >> log_blks_per_seg) / 8; > >> > >> if (sit_bitmap_size > MAX_SIT_BITMAP_SIZE) > >> @@ -223,55 +223,55 @@ static int f2fs_prepare_super_block(void) > >> if (max_sit_bitmap_size > > >> (CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1 - 64)) { > >> max_nat_bitmap_size = CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1; > >> - set_sb(cp_payload, F2FS_BLK_ALIGN(max_sit_bitmap_size)); > >> + set_val(sb, cp_payload, F2FS_BLK_ALIGN(max_sit_bitmap_size)); > >> } else { > >> max_nat_bitmap_size = CHECKSUM_OFFSET - sizeof(struct f2fs_checkpoint) + 1 > >> - max_sit_bitmap_size; > >> - set_sb(cp_payload, 0); > >> + set_val(sb, cp_payload, 0); > >> } > >> > >> max_nat_segments = (max_nat_bitmap_size * 8) >> log_blks_per_seg; > >> > >> - if (get_sb(segment_count_nat) > max_nat_segments) > >> - set_sb(segment_count_nat, max_nat_segments); > >> + if (get_val(sb, segment_count_nat) > max_nat_segments) > >> + set_val(sb, segment_count_nat, max_nat_segments); > >> > >> - set_sb(segment_count_nat, get_sb(segment_count_nat) * 2); > >> + set_val(sb, segment_count_nat, get_val(sb, segment_count_nat) * 2); > >> > >> - set_sb(ssa_blkaddr, get_sb(nat_blkaddr) + get_sb(segment_count_nat) * > >> + set_val(sb, ssa_blkaddr, get_val(sb, nat_blkaddr) + get_val(sb, segment_count_nat) * > >> config.blks_per_seg); > >> > >> - total_valid_blks_available = (get_sb(segment_count) - > >> - (get_sb(segment_count_ckpt) + > >> - get_sb(segment_count_sit) + > >> - get_sb(segment_count_nat))) * > >> + total_valid_blks_available = (get_val(sb, segment_count) - > >> + (get_val(sb, segment_count_ckpt) + > >> + get_val(sb, segment_count_sit) + > >> + get_val(sb, segment_count_nat))) * > >> config.blks_per_seg; > >> > >> blocks_for_ssa = total_valid_blks_available / > >> config.blks_per_seg + 1; > >> > >> - set_sb(segment_count_ssa, SEG_ALIGN(blocks_for_ssa)); > >> + set_val(sb, segment_count_ssa, SEG_ALIGN(blocks_for_ssa)); > >> > >> - total_meta_segments = get_sb(segment_count_ckpt) + > >> - get_sb(segment_count_sit) + > >> - get_sb(segment_count_nat) + > >> - get_sb(segment_count_ssa); > >> + total_meta_segments = get_val(sb, segment_count_ckpt) + > >> + get_val(sb, segment_count_sit) + > >> + get_val(sb, segment_count_nat) + > >> + get_val(sb, segment_count_ssa); > >> diff = total_meta_segments % (config.segs_per_zone); > >> if (diff) > >> - set_sb(segment_count_ssa, get_sb(segment_count_ssa) + > >> + set_val(sb, segment_count_ssa, get_val(sb, segment_count_ssa) + > >> (config.segs_per_zone - diff)); > >> > >> total_meta_zones = ZONE_ALIGN(total_meta_segments * > >> config.blks_per_seg); > >> > >> - set_sb(main_blkaddr, get_sb(segment0_blkaddr) + total_meta_zones * > >> + set_val(sb, main_blkaddr, get_val(sb, segment0_blkaddr) + total_meta_zones * > >> config.segs_per_zone * config.blks_per_seg); > >> > >> - total_zones = get_sb(segment_count) / (config.segs_per_zone) - > >> + total_zones = get_val(sb, segment_count) / (config.segs_per_zone) - > >> total_meta_zones; > >> > >> - set_sb(section_count, total_zones * config.secs_per_zone); > >> + set_val(sb, section_count, total_zones * config.secs_per_zone); > >> > >> - set_sb(segment_count_main, get_sb(section_count) * config.segs_per_sec); > >> + set_val(sb, segment_count_main, get_val(sb, section_count) * config.segs_per_sec); > >> > >> /* Let's determine the best reserved and overprovisioned space */ > >> if (config.overprovision == 0) > >> @@ -281,12 +281,12 @@ static int f2fs_prepare_super_block(void) > >> (2 * (100 / config.overprovision + 1) + 6) > >> * config.segs_per_sec; > >> > >> - if ((get_sb(segment_count_main) - 2) < > >> + if ((get_val(sb, segment_count_main) - 2) < > >> config.reserved_segments) { > >> MSG(1, "\tError: Device size is not sufficient for F2FS volume,\ > >> more segment needed =%u", > >> config.reserved_segments - > >> - (get_sb(segment_count_main) - 2)); > >> + (get_val(sb, segment_count_main) - 2)); > >> return -1; > >> } > >> > >> @@ -294,9 +294,9 @@ static int f2fs_prepare_super_block(void) > >> > >> utf8_to_utf16(sb->volume_name, (const char *)config.vol_label, > >> MAX_VOLUME_NAME, strlen(config.vol_label)); > >> - set_sb(node_ino, 1); > >> - set_sb(meta_ino, 2); > >> - set_sb(root_ino, 3); > >> + set_val(sb, node_ino, 1); > >> + set_val(sb, meta_ino, 2); > >> + set_val(sb, root_ino, 3); > >> > >> if (total_zones <= 6) { > >> MSG(1, "\tError: %d zones: Need more zones \ > >> @@ -346,8 +346,8 @@ static int f2fs_init_sit_area(void) > >> u_int64_t sit_seg_addr = 0; > >> u_int8_t *zero_buf = NULL; > >> > >> - blk_size = 1 << get_sb(log_blocksize); > >> - seg_size = (1 << get_sb(log_blocks_per_seg)) * blk_size; > >> + blk_size = 1 << get_val(sb, log_blocksize); > >> + seg_size = (1 << get_val(sb, log_blocks_per_seg)) * blk_size; > >> > >> zero_buf = calloc(sizeof(u_int8_t), seg_size); > >> if(zero_buf == NULL) { > >> @@ -355,11 +355,11 @@ static int f2fs_init_sit_area(void) > >> return -1; > >> } > >> > >> - sit_seg_addr = get_sb(sit_blkaddr); > >> + sit_seg_addr = get_val(sb, sit_blkaddr); > >> sit_seg_addr *= blk_size; > >> > >> DBG(1, "\tFilling sit area at offset 0x%08"PRIx64"\n", sit_seg_addr); > >> - for (index = 0; index < (get_sb(segment_count_sit) / 2); index++) { > >> + for (index = 0; index < (get_val(sb, segment_count_sit) / 2); index++) { > >> if (dev_fill(zero_buf, sit_seg_addr, seg_size)) { > >> MSG(1, "\tError: While zeroing out the sit area \ > >> on disk!!!\n"); > >> @@ -380,8 +380,8 @@ static int f2fs_init_nat_area(void) > >> u_int64_t nat_seg_addr = 0; > >> u_int8_t *nat_buf = NULL; > >> > >> - blk_size = 1 << get_sb(log_blocksize); > >> - seg_size = (1 << get_sb(log_blocks_per_seg)) * blk_size; > >> + blk_size = 1 << get_val(sb, log_blocksize); > >> + seg_size = (1 << get_val(sb, log_blocks_per_seg)) * blk_size; > >> > >> nat_buf = calloc(sizeof(u_int8_t), seg_size); > >> if (nat_buf == NULL) { > >> @@ -389,11 +389,11 @@ static int f2fs_init_nat_area(void) > >> return -1; > >> } > >> > >> - nat_seg_addr = get_sb(nat_blkaddr); > >> + nat_seg_addr = get_val(sb, nat_blkaddr); > >> nat_seg_addr *= blk_size; > >> > >> DBG(1, "\tFilling nat area at offset 0x%08"PRIx64"\n", nat_seg_addr); > >> - for (index = 0; index < get_sb(segment_count_nat) / 2; index++) { > >> + for (index = 0; index < get_val(sb, segment_count_nat) / 2; index++) { > >> if (dev_fill(nat_buf, nat_seg_addr, seg_size)) { > >> MSG(1, "\tError: While zeroing out the nat area \ > >> on disk!!!\n"); > >> @@ -445,58 +445,58 @@ static int f2fs_write_check_point_pack(void) > >> } > >> > >> /* 1. cp page 1 of checkpoint pack 1 */ > >> - set_cp(checkpoint_ver, 1); > >> - set_cp(cur_node_segno[0], config.cur_seg[CURSEG_HOT_NODE]); > >> - set_cp(cur_node_segno[1], config.cur_seg[CURSEG_WARM_NODE]); > >> - set_cp(cur_node_segno[2], config.cur_seg[CURSEG_COLD_NODE]); > >> - set_cp(cur_data_segno[0], config.cur_seg[CURSEG_HOT_DATA]); > >> - set_cp(cur_data_segno[1], config.cur_seg[CURSEG_WARM_DATA]); > >> - set_cp(cur_data_segno[2], config.cur_seg[CURSEG_COLD_DATA]); > >> + set_val(cp, checkpoint_ver, 1); > >> + set_val(cp, cur_node_segno[0], config.cur_seg[CURSEG_HOT_NODE]); > >> + set_val(cp, cur_node_segno[1], config.cur_seg[CURSEG_WARM_NODE]); > >> + set_val(cp, cur_node_segno[2], config.cur_seg[CURSEG_COLD_NODE]); > >> + set_val(cp, cur_data_segno[0], config.cur_seg[CURSEG_HOT_DATA]); > >> + set_val(cp, cur_data_segno[1], config.cur_seg[CURSEG_WARM_DATA]); > >> + set_val(cp, cur_data_segno[2], config.cur_seg[CURSEG_COLD_DATA]); > >> for (i = 3; i < MAX_ACTIVE_NODE_LOGS; i++) { > >> - set_cp(cur_node_segno[i], 0xffffffff); > >> - set_cp(cur_data_segno[i], 0xffffffff); > >> + set_val(cp, cur_node_segno[i], 0xffffffff); > >> + set_val(cp, cur_data_segno[i], 0xffffffff); > >> } > >> > >> - set_cp(cur_node_blkoff[0], 1); > >> - set_cp(cur_data_blkoff[0], 1); > >> - set_cp(valid_block_count, 2); > >> - set_cp(rsvd_segment_count, config.reserved_segments); > >> - set_cp(overprov_segment_count, (get_sb(segment_count_main) - > >> - get_cp(rsvd_segment_count)) * > >> + set_val(cp, cur_node_blkoff[0], 1); > >> + set_val(cp, cur_data_blkoff[0], 1); > >> + set_val(cp, valid_block_count, 2); > >> + set_val(cp, rsvd_segment_count, config.reserved_segments); > >> + set_val(cp, overprov_segment_count, (get_val(sb, segment_count_main) - > >> + get_val(cp, rsvd_segment_count)) * > >> config.overprovision / 100); > >> - set_cp(overprov_segment_count, get_cp(overprov_segment_count) + > >> - get_cp(rsvd_segment_count)); > >> + set_val(cp, overprov_segment_count, get_val(cp, overprov_segment_count) + > >> + get_val(cp, rsvd_segment_count)); > >> > >> MSG(0, "Info: Overprovision ratio = %.3lf%%\n", config.overprovision); > >> MSG(0, "Info: Overprovision segments = %u (GC reserved = %u)\n", > >> - get_cp(overprov_segment_count), > >> + get_val(cp, overprov_segment_count), > >> config.reserved_segments); > >> > >> /* main segments - reserved segments - (node + data segments) */ > >> - set_cp(free_segment_count, get_sb(segment_count_main) - 6); > >> - set_cp(user_block_count, ((get_cp(free_segment_count) + 6 - > >> - get_cp(overprov_segment_count)) * config.blks_per_seg)); > >> + set_val(cp, free_segment_count, get_val(sb, segment_count_main) - 6); > >> + set_val(cp, user_block_count, ((get_val(cp, free_segment_count) + 6 - > >> + get_val(cp, overprov_segment_count)) * config.blks_per_seg)); > >> /* cp page (2), data summaries (1), node summaries (3) */ > >> - set_cp(cp_pack_total_block_count, 6 + get_sb(cp_payload)); > >> - set_cp(ckpt_flags, CP_UMOUNT_FLAG | CP_COMPACT_SUM_FLAG); > >> - set_cp(cp_pack_start_sum, 1 + get_sb(cp_payload)); > >> - set_cp(valid_node_count, 1); > >> - set_cp(valid_inode_count, 1); > >> - set_cp(next_free_nid, get_sb(root_ino) + 1); > >> - set_cp(sit_ver_bitmap_bytesize, ((get_sb(segment_count_sit) / 2) << > >> - get_sb(log_blocks_per_seg)) / 8); > >> + set_val(cp, cp_pack_total_block_count, 6 + get_val(sb, cp_payload)); > >> + set_val(cp, ckpt_flags, CP_UMOUNT_FLAG | CP_COMPACT_SUM_FLAG); > >> + set_val(cp, cp_pack_start_sum, 1 + get_val(sb, cp_payload)); > >> + set_val(cp, valid_node_count, 1); > >> + set_val(cp, valid_inode_count, 1); > >> + set_val(cp, next_free_nid, get_val(sb, root_ino) + 1); > >> + set_val(cp, sit_ver_bitmap_bytesize, ((get_val(sb, segment_count_sit) / 2) << > >> + get_val(sb, log_blocks_per_seg)) / 8); > >> > >> - set_cp(nat_ver_bitmap_bytesize, ((get_sb(segment_count_nat) / 2) << > >> - get_sb(log_blocks_per_seg)) / 8); > >> + set_val(cp, nat_ver_bitmap_bytesize, ((get_val(sb, segment_count_nat) / 2) << > >> + get_val(sb, log_blocks_per_seg)) / 8); > >> > >> - set_cp(checksum_offset, CHECKSUM_OFFSET); > >> + set_val(cp, checksum_offset, CHECKSUM_OFFSET); > >> > >> crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); > >> *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = > >> cpu_to_le32(crc); > >> > >> - blk_size_bytes = 1 << get_sb(log_blocksize); > >> - cp_seg_blk_offset = get_sb(segment0_blkaddr); > >> + blk_size_bytes = 1 << get_val(sb, log_blocksize); > >> + cp_seg_blk_offset = get_val(sb, segment0_blkaddr); > >> cp_seg_blk_offset *= blk_size_bytes; > >> > >> DBG(1, "\tWriting main segments, cp at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); > >> @@ -505,7 +505,7 @@ static int f2fs_write_check_point_pack(void) > >> goto free_cp_payload; > >> } > >> > >> - for (i = 0; i < get_sb(cp_payload); i++) { > >> + for (i = 0; i < get_val(sb, cp_payload); i++) { > >> cp_seg_blk_offset += blk_size_bytes; > >> if (dev_fill(cp_payload, cp_seg_blk_offset, blk_size_bytes)) { > >> MSG(1, "\tError: While zeroing out the sit bitmap area \ > >> @@ -537,8 +537,8 @@ static int f2fs_write_check_point_pack(void) > >> sum->nat_j.entries[0].ne.version = 0; > >> sum->nat_j.entries[0].ne.ino = sb->root_ino; > >> sum->nat_j.entries[0].ne.block_addr = cpu_to_le32( > >> - get_sb(main_blkaddr) + > >> - get_cp(cur_node_segno[0]) * config.blks_per_seg); > >> + get_val(sb, main_blkaddr) + > >> + get_val(cp, cur_node_segno[0]) * config.blks_per_seg); > >> > >> memcpy(sum_compact_p, &sum->n_nats, SUM_JOURNAL_SIZE); > >> sum_compact_p += SUM_JOURNAL_SIZE; > >> @@ -635,7 +635,7 @@ static int f2fs_write_check_point_pack(void) > >> crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, cp, CHECKSUM_OFFSET); > >> *((__le32 *)((unsigned char *)cp + CHECKSUM_OFFSET)) = > >> cpu_to_le32(crc); > >> - cp_seg_blk_offset = (get_sb(segment0_blkaddr) + > >> + cp_seg_blk_offset = (get_val(sb, segment0_blkaddr) + > >> config.blks_per_seg) * > >> blk_size_bytes; > >> DBG(1, "\tWriting cp page 1 of checkpoint pack 2, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); > >> @@ -644,7 +644,7 @@ static int f2fs_write_check_point_pack(void) > >> goto free_cp_payload; > >> } > >> > >> - for (i = 0; i < get_sb(cp_payload); i++) { > >> + for (i = 0; i < get_val(sb, cp_payload); i++) { > >> cp_seg_blk_offset += blk_size_bytes; > >> if (dev_fill(cp_payload, cp_seg_blk_offset, blk_size_bytes)) { > >> MSG(1, "\tError: While zeroing out the sit bitmap area \ > >> @@ -655,7 +655,7 @@ static int f2fs_write_check_point_pack(void) > >> > >> /* cp page 2 of check point pack 2 */ > >> cp_seg_blk_offset += blk_size_bytes * (le32_to_cpu(cp->cp_pack_total_block_count) > >> - - get_sb(cp_payload) - 1); > >> + - get_val(sb, cp_payload) - 1); > >> DBG(1, "\tWriting cp page 2 of checkpoint pack 2, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); > >> if (dev_write(cp, cp_seg_blk_offset, blk_size_bytes)) { > >> MSG(1, "\tError: While writing the cp to disk!!!\n"); > >> @@ -701,8 +701,8 @@ static int f2fs_write_super_block(void) > >> static int discard_obsolete_dnode(struct f2fs_node *raw_node, u_int64_t offset) > >> { > >> do { > >> - if (offset < get_sb(main_blkaddr) || > >> - offset >= get_sb(main_blkaddr) + get_sb(block_count)) > >> + if (offset < get_val(sb, main_blkaddr) || > >> + offset >= get_val(sb, main_blkaddr) + get_val(sb, block_count)) > >> break; > >> > >> if (dev_read_block(raw_node, offset)) { > >> @@ -740,7 +740,7 @@ static int f2fs_write_root_inode(void) > >> raw_node->footer.ino = sb->root_ino; > >> raw_node->footer.cp_ver = cpu_to_le64(1); > >> raw_node->footer.next_blkaddr = cpu_to_le32( > >> - get_sb(main_blkaddr) + > >> + get_val(sb, main_blkaddr) + > >> config.cur_seg[CURSEG_HOT_NODE] * > >> config.blks_per_seg + 1); > >> > >> @@ -749,7 +749,7 @@ static int f2fs_write_root_inode(void) > >> raw_node->i.i_uid = cpu_to_le32(getuid()); > >> raw_node->i.i_gid = cpu_to_le32(getgid()); > >> > >> - blk_size_bytes = 1 << get_sb(log_blocksize); > >> + blk_size_bytes = 1 << get_val(sb, log_blocksize); > >> raw_node->i.i_size = cpu_to_le64(1 * blk_size_bytes); /* dentry */ > >> raw_node->i.i_blocks = cpu_to_le64(2); > >> > >> @@ -765,7 +765,7 @@ static int f2fs_write_root_inode(void) > >> raw_node->i.i_current_depth = cpu_to_le32(1); > >> raw_node->i.i_dir_level = DEF_DIR_LEVEL; > >> > >> - data_blk_nor = get_sb(main_blkaddr) + > >> + data_blk_nor = get_val(sb, main_blkaddr) + > >> config.cur_seg[CURSEG_HOT_DATA] * config.blks_per_seg; > >> raw_node->i.i_addr[0] = cpu_to_le32(data_blk_nor); > >> > >> @@ -773,7 +773,7 @@ static int f2fs_write_root_inode(void) > >> raw_node->i.i_ext.blk_addr = 0; > >> raw_node->i.i_ext.len = 0; > >> > >> - main_area_node_seg_blk_offset = get_sb(main_blkaddr); > >> + main_area_node_seg_blk_offset = get_val(sb, main_blkaddr); > >> main_area_node_seg_blk_offset += config.cur_seg[CURSEG_HOT_NODE] * > >> config.blks_per_seg; > >> main_area_node_seg_blk_offset *= blk_size_bytes; > >> @@ -786,7 +786,7 @@ static int f2fs_write_root_inode(void) > >> } > >> > >> /* avoid power-off-recovery based on roll-forward policy */ > >> - main_area_node_seg_blk_offset = get_sb(main_blkaddr); > >> + main_area_node_seg_blk_offset = get_val(sb, main_blkaddr); > >> main_area_node_seg_blk_offset += config.cur_seg[CURSEG_WARM_NODE] * > >> config.blks_per_seg; > >> > >> @@ -813,21 +813,21 @@ static int f2fs_update_nat_root(void) > >> } > >> > >> /* update root */ > >> - nat_blk->entries[get_sb(root_ino)].block_addr = cpu_to_le32( > >> - get_sb(main_blkaddr) + > >> + nat_blk->entries[get_val(sb, root_ino)].block_addr = cpu_to_le32( > >> + get_val(sb, main_blkaddr) + > >> config.cur_seg[CURSEG_HOT_NODE] * config.blks_per_seg); > >> - nat_blk->entries[get_sb(root_ino)].ino = sb->root_ino; > >> + nat_blk->entries[get_val(sb, root_ino)].ino = sb->root_ino; > >> > >> /* update node nat */ > >> - nat_blk->entries[get_sb(node_ino)].block_addr = cpu_to_le32(1); > >> - nat_blk->entries[get_sb(node_ino)].ino = sb->node_ino; > >> + nat_blk->entries[get_val(sb, node_ino)].block_addr = cpu_to_le32(1); > >> + nat_blk->entries[get_val(sb, node_ino)].ino = sb->node_ino; > >> > >> /* update meta nat */ > >> - nat_blk->entries[get_sb(meta_ino)].block_addr = cpu_to_le32(1); > >> - nat_blk->entries[get_sb(meta_ino)].ino = sb->meta_ino; > >> + nat_blk->entries[get_val(sb, meta_ino)].block_addr = cpu_to_le32(1); > >> + nat_blk->entries[get_val(sb, meta_ino)].ino = sb->meta_ino; > >> > >> - blk_size_bytes = 1 << get_sb(log_blocksize); > >> - nat_seg_blk_offset = get_sb(nat_blkaddr); > >> + blk_size_bytes = 1 << get_val(sb, log_blocksize); > >> + nat_seg_blk_offset = get_val(sb, nat_blkaddr); > >> nat_seg_blk_offset *= blk_size_bytes; > >> > >> DBG(1, "\tWriting nat root, at offset 0x%08"PRIx64"\n", nat_seg_blk_offset); > >> @@ -867,8 +867,8 @@ static int f2fs_add_default_dentry_root(void) > >> /* bitmap for . and .. */ > >> test_and_set_bit_le(0, dent_blk->dentry_bitmap); > >> test_and_set_bit_le(1, dent_blk->dentry_bitmap); > >> - blk_size_bytes = 1 << get_sb(log_blocksize); > >> - data_blk_offset = get_sb(main_blkaddr); > >> + blk_size_bytes = 1 << get_val(sb, log_blocksize); > >> + data_blk_offset = get_val(sb, main_blkaddr); > >> data_blk_offset += config.cur_seg[CURSEG_HOT_DATA] * > >> config.blks_per_seg; > >> data_blk_offset *= blk_size_bytes; > >> -- > >> 1.9.1 > >> > >> > >> ------------------------------------------------------------------------------ > >> Site24x7 APM Insight: Get Deep Visibility into Application Performance > >> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month > >> Monitor end-to-end web transactions and take corrective actions now > >> Troubleshoot faster and improve end-user experience. Signup Now! > >> http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 > >> _______________________________________________ > >> Linux-f2fs-devel mailing list > >> Linux-f2fs-devel@lists.sourceforge.net > >> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel > > > > . > > ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [RFC PATCH 2/4] f2fs-tools: fix endianness of on-disk check_sum in summary_footer 2016-01-30 9:16 [RFC PATCH 0/4] do more check in sanity_check_nid and clean up Sheng Yong 2016-01-30 9:16 ` [RFC PATCH 1/4] f2fs-tools: simplify get_{sb|cp} and set_{sb|cp} Sheng Yong @ 2016-01-30 9:16 ` Sheng Yong 2016-01-30 9:16 ` [RFC PATCH 3/4] fsck.f2fs: check ino of an used nat entry Sheng Yong 2016-01-30 9:16 ` [RFC PATCH 4/4] fsck.f2fs: check ino of an inode Sheng Yong 3 siblings, 0 replies; 9+ messages in thread From: Sheng Yong @ 2016-01-30 9:16 UTC (permalink / raw) To: jaegeuk, chao2.yu; +Cc: linux-f2fs-devel Signed-off-by: Sheng Yong <shengyong1@huawei.com> --- include/f2fs_fs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h index 2ab9f49..1b02d16 100644 --- a/include/f2fs_fs.h +++ b/include/f2fs_fs.h @@ -677,7 +677,7 @@ struct f2fs_summary { struct summary_footer { unsigned char entry_type; /* SUM_TYPE_XXX */ - __u32 check_sum; /* summary checksum */ + __le32 check_sum; /* summary checksum */ } __attribute__((packed)); #define SUM_JOURNAL_SIZE (F2FS_BLKSIZE - SUM_FOOTER_SIZE -\ -- 1.9.1 ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [RFC PATCH 3/4] fsck.f2fs: check ino of an used nat entry 2016-01-30 9:16 [RFC PATCH 0/4] do more check in sanity_check_nid and clean up Sheng Yong 2016-01-30 9:16 ` [RFC PATCH 1/4] f2fs-tools: simplify get_{sb|cp} and set_{sb|cp} Sheng Yong 2016-01-30 9:16 ` [RFC PATCH 2/4] f2fs-tools: fix endianness of on-disk check_sum in summary_footer Sheng Yong @ 2016-01-30 9:16 ` Sheng Yong 2016-01-30 9:16 ` [RFC PATCH 4/4] fsck.f2fs: check ino of an inode Sheng Yong 3 siblings, 0 replies; 9+ messages in thread From: Sheng Yong @ 2016-01-30 9:16 UTC (permalink / raw) To: jaegeuk, chao2.yu; +Cc: linux-f2fs-devel If a nid is valid, the ino in its nat entry should record its parent nid. However if the ino is zero, we should drop the node. Signed-off-by: Sheng Yong <shengyong1@huawei.com> Signed-off-by: Xue Liu <liuxueliu.liu@huawei.com> --- fsck/fsck.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fsck/fsck.c b/fsck/fsck.c index 4fbb56d..c018d3a 100644 --- a/fsck/fsck.c +++ b/fsck/fsck.c @@ -342,6 +342,11 @@ static int sanity_check_nid(struct f2fs_sb_info *sbi, u32 nid, } get_node_info(sbi, nid, ni); + if (ni->ino == 0) { + ASSERT_MSG("nid[0x%x] ino is 0", nid); + return -EINVAL; + } + if (ni->blk_addr == NEW_ADDR) { ASSERT_MSG("nid is NEW_ADDR. [0x%x]", nid); return -EINVAL; -- 1.9.1 ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [RFC PATCH 4/4] fsck.f2fs: check ino of an inode 2016-01-30 9:16 [RFC PATCH 0/4] do more check in sanity_check_nid and clean up Sheng Yong ` (2 preceding siblings ...) 2016-01-30 9:16 ` [RFC PATCH 3/4] fsck.f2fs: check ino of an used nat entry Sheng Yong @ 2016-01-30 9:16 ` Sheng Yong 3 siblings, 0 replies; 9+ messages in thread From: Sheng Yong @ 2016-01-30 9:16 UTC (permalink / raw) To: jaegeuk, chao2.yu; +Cc: linux-f2fs-devel If the node is an inode, its ino in the nat entry should be equal to the ino in its node footer. Otherwise, we drop the file. Signed-off-by: Sheng Yong <shengyong1@huawei.com> Signed-off-by: Xue Liu <liuxueliu.liu@huawei.com> --- fsck/fsck.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fsck/fsck.c b/fsck/fsck.c index c018d3a..312583e 100644 --- a/fsck/fsck.c +++ b/fsck/fsck.c @@ -372,6 +372,11 @@ static int sanity_check_nid(struct f2fs_sb_info *sbi, u32 nid, le32_to_cpu(node_blk->footer.ino)); return -EINVAL; } + if (ntype == TYPE_INODE && ni->ino != node_blk->footer.ino) { + ASSERT_MSG("nid[0x%x] TYPE_INODE nat_entry->ino[0x%x] footer.ino[0x%x]", + nid, ni->ino, le32_to_cpu(node_blk->footer.ino)); + return -EINVAL; + } if (ntype != TYPE_INODE && node_blk->footer.nid == node_blk->footer.ino) { ASSERT_MSG("nid[0x%x] footer.nid[0x%x] footer.ino[0x%x]", -- 1.9.1 ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 ^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2016-02-02 0:27 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-01-30 9:16 [RFC PATCH 0/4] do more check in sanity_check_nid and clean up Sheng Yong 2016-01-30 9:16 ` [RFC PATCH 1/4] f2fs-tools: simplify get_{sb|cp} and set_{sb|cp} Sheng Yong 2016-01-30 1:46 ` Jaegeuk Kim 2016-01-30 2:25 ` Sheng Yong 2016-01-30 10:03 ` [RFC PATCH v2] " Sheng Yong 2016-02-02 0:27 ` [RFC PATCH 1/4] " Jaegeuk Kim 2016-01-30 9:16 ` [RFC PATCH 2/4] f2fs-tools: fix endianness of on-disk check_sum in summary_footer Sheng Yong 2016-01-30 9:16 ` [RFC PATCH 3/4] fsck.f2fs: check ino of an used nat entry Sheng Yong 2016-01-30 9:16 ` [RFC PATCH 4/4] fsck.f2fs: check ino of an inode Sheng Yong
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).