|
@@ -992,7 +992,6 @@ static void wait_on_all_pages_writeback(struct f2fs_sb_info *sbi)
|
|
static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
|
|
static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
|
|
{
|
|
{
|
|
struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
|
|
struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
|
|
- struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_WARM_NODE);
|
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
unsigned long orphan_num = sbi->im[ORPHAN_INO].ino_num;
|
|
unsigned long orphan_num = sbi->im[ORPHAN_INO].ino_num;
|
|
nid_t last_nid = nm_i->next_scan_nid;
|
|
nid_t last_nid = nm_i->next_scan_nid;
|
|
@@ -1001,19 +1000,10 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
|
|
__u32 crc32 = 0;
|
|
__u32 crc32 = 0;
|
|
int i;
|
|
int i;
|
|
int cp_payload_blks = __cp_payload(sbi);
|
|
int cp_payload_blks = __cp_payload(sbi);
|
|
- block_t discard_blk = NEXT_FREE_BLKADDR(sbi, curseg);
|
|
|
|
- bool invalidate = false;
|
|
|
|
struct super_block *sb = sbi->sb;
|
|
struct super_block *sb = sbi->sb;
|
|
struct curseg_info *seg_i = CURSEG_I(sbi, CURSEG_HOT_NODE);
|
|
struct curseg_info *seg_i = CURSEG_I(sbi, CURSEG_HOT_NODE);
|
|
u64 kbytes_written;
|
|
u64 kbytes_written;
|
|
|
|
|
|
- /*
|
|
|
|
- * This avoids to conduct wrong roll-forward operations and uses
|
|
|
|
- * metapages, so should be called prior to sync_meta_pages below.
|
|
|
|
- */
|
|
|
|
- if (!test_opt(sbi, LFS) && discard_next_dnode(sbi, discard_blk))
|
|
|
|
- invalidate = true;
|
|
|
|
-
|
|
|
|
/* Flush all the NAT/SIT pages */
|
|
/* Flush all the NAT/SIT pages */
|
|
while (get_pages(sbi, F2FS_DIRTY_META)) {
|
|
while (get_pages(sbi, F2FS_DIRTY_META)) {
|
|
sync_meta_pages(sbi, META, LONG_MAX);
|
|
sync_meta_pages(sbi, META, LONG_MAX);
|
|
@@ -1089,6 +1079,9 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
|
|
if (is_sbi_flag_set(sbi, SBI_NEED_FSCK))
|
|
if (is_sbi_flag_set(sbi, SBI_NEED_FSCK))
|
|
set_ckpt_flags(ckpt, CP_FSCK_FLAG);
|
|
set_ckpt_flags(ckpt, CP_FSCK_FLAG);
|
|
|
|
|
|
|
|
+ /* set this flag to activate crc|cp_ver for recovery */
|
|
|
|
+ set_ckpt_flags(ckpt, CP_CRC_RECOVERY_FLAG);
|
|
|
|
+
|
|
/* update SIT/NAT bitmap */
|
|
/* update SIT/NAT bitmap */
|
|
get_sit_bitmap(sbi, __bitmap_ptr(sbi, SIT_BITMAP));
|
|
get_sit_bitmap(sbi, __bitmap_ptr(sbi, SIT_BITMAP));
|
|
get_nat_bitmap(sbi, __bitmap_ptr(sbi, NAT_BITMAP));
|
|
get_nat_bitmap(sbi, __bitmap_ptr(sbi, NAT_BITMAP));
|
|
@@ -1154,14 +1147,6 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
|
|
/* wait for previous submitted meta pages writeback */
|
|
/* wait for previous submitted meta pages writeback */
|
|
wait_on_all_pages_writeback(sbi);
|
|
wait_on_all_pages_writeback(sbi);
|
|
|
|
|
|
- /*
|
|
|
|
- * invalidate meta page which is used temporarily for zeroing out
|
|
|
|
- * block at the end of warm node chain.
|
|
|
|
- */
|
|
|
|
- if (invalidate)
|
|
|
|
- invalidate_mapping_pages(META_MAPPING(sbi), discard_blk,
|
|
|
|
- discard_blk);
|
|
|
|
-
|
|
|
|
release_ino_entry(sbi, false);
|
|
release_ino_entry(sbi, false);
|
|
|
|
|
|
if (unlikely(f2fs_cp_error(sbi)))
|
|
if (unlikely(f2fs_cp_error(sbi)))
|