This fixes out-of memory boundary on nat_bitmap, when resizing small to large partition.
Signed-off-by: Jaegeuk Kim <jaeg...@kernel.org> --- fsck/f2fs.h | 1 + fsck/mount.c | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/fsck/f2fs.h b/fsck/f2fs.h index 8a5ce36..d0e08aa 100644 --- a/fsck/f2fs.h +++ b/fsck/f2fs.h @@ -50,6 +50,7 @@ struct node_info { struct f2fs_nm_info { block_t nat_blkaddr; + block_t nat_blocks; nid_t max_nid; nid_t init_scan_nid; nid_t next_scan_nid; diff --git a/fsck/mount.c b/fsck/mount.c index 545f862..a925bb9 100644 --- a/fsck/mount.c +++ b/fsck/mount.c @@ -998,7 +998,12 @@ void write_nat_bits(struct f2fs_sb_info *sbi, (seg_off << get_sb(log_blocks_per_seg) << 1) + (i & ((1 << get_sb(log_blocks_per_seg)) - 1))); - if (f2fs_test_bit(i, nm_i->nat_bitmap)) + /* + * Should consider new nat_blocks is larger than old + * nm_i->nat_blocks, since nm_i->nat_bitmap is based on + * old one. + */ + if (i < nm_i->nat_blocks && f2fs_test_bit(i, nm_i->nat_bitmap)) blkaddr += (1 << get_sb(log_blocks_per_seg)); ret = dev_read_block(nat_block, blkaddr); @@ -1037,14 +1042,14 @@ int init_node_manager(struct f2fs_sb_info *sbi) struct f2fs_checkpoint *cp = F2FS_CKPT(sbi); struct f2fs_nm_info *nm_i = NM_I(sbi); unsigned char *version_bitmap; - unsigned int nat_segs, nat_blocks; + unsigned int nat_segs; nm_i->nat_blkaddr = get_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); - nm_i->max_nid = NAT_ENTRY_PER_BLOCK * nat_blocks; + nm_i->nat_blocks = nat_segs << get_sb(log_blocks_per_seg); + nm_i->max_nid = NAT_ENTRY_PER_BLOCK * nm_i->nat_blocks; nm_i->fcnt = 0; nm_i->nat_cnt = 0; nm_i->init_scan_nid = get_cp(next_free_nid); -- 2.15.0.531.g2ccb3012c9-goog ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel