f2fs: fix a mount fail for wrong next_scan_nid
authorYunlei He <heyunlei@huawei.com>
Wed, 26 Apr 2017 07:56:52 +0000 (15:56 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Thu, 4 May 2017 02:00:30 +0000 (19:00 -0700)
-write_checkpoint
   -do_checkpoint
      -next_free_nid    <--- something wrong with next free nid

-f2fs_fill_super
   -build_node_manager
      -build_free_nids
          -get_current_nat_page
             -__get_meta_page   <--- attempt to access beyond end of device

Signed-off-by: Yunlei He <heyunlei@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/node.c

index b99e318..98351a4 100644 (file)
@@ -1955,6 +1955,9 @@ static void __build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount)
        int i = 0;
        nid_t nid = nm_i->next_scan_nid;
 
+       if (unlikely(nid >= nm_i->max_nid))
+               nid = 0;
+
        /* Enough entries */
        if (nm_i->nid_cnt[FREE_NID_LIST] >= NAT_ENTRY_PER_BLOCK)
                return;