|
@@ -888,10 +888,8 @@ static void do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
|
|
|
unsigned long orphan_num = sbi->im[ORPHAN_INO].ino_num;
|
|
|
nid_t last_nid = nm_i->next_scan_nid;
|
|
|
block_t start_blk;
|
|
|
- struct page *cp_page;
|
|
|
unsigned int data_sum_blocks, orphan_blocks;
|
|
|
__u32 crc32 = 0;
|
|
|
- void *kaddr;
|
|
|
int i;
|
|
|
int cp_payload_blks = __cp_payload(sbi);
|
|
|
|
|
@@ -988,19 +986,11 @@ static void do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
|
|
|
start_blk = __start_cp_addr(sbi);
|
|
|
|
|
|
/* write out checkpoint buffer at block 0 */
|
|
|
- cp_page = grab_meta_page(sbi, start_blk++);
|
|
|
- kaddr = page_address(cp_page);
|
|
|
- memcpy(kaddr, ckpt, F2FS_BLKSIZE);
|
|
|
- set_page_dirty(cp_page);
|
|
|
- f2fs_put_page(cp_page, 1);
|
|
|
-
|
|
|
- for (i = 1; i < 1 + cp_payload_blks; i++) {
|
|
|
- cp_page = grab_meta_page(sbi, start_blk++);
|
|
|
- kaddr = page_address(cp_page);
|
|
|
- memcpy(kaddr, (char *)ckpt + i * F2FS_BLKSIZE, F2FS_BLKSIZE);
|
|
|
- set_page_dirty(cp_page);
|
|
|
- f2fs_put_page(cp_page, 1);
|
|
|
- }
|
|
|
+ update_meta_page(sbi, ckpt, start_blk++);
|
|
|
+
|
|
|
+ for (i = 1; i < 1 + cp_payload_blks; i++)
|
|
|
+ update_meta_page(sbi, (char *)ckpt + i * F2FS_BLKSIZE,
|
|
|
+ start_blk++);
|
|
|
|
|
|
if (orphan_num) {
|
|
|
write_orphan_inodes(sbi, start_blk);
|
|
@@ -1015,11 +1005,7 @@ static void do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
|
|
|
}
|
|
|
|
|
|
/* writeout checkpoint block */
|
|
|
- cp_page = grab_meta_page(sbi, start_blk);
|
|
|
- kaddr = page_address(cp_page);
|
|
|
- memcpy(kaddr, ckpt, F2FS_BLKSIZE);
|
|
|
- set_page_dirty(cp_page);
|
|
|
- f2fs_put_page(cp_page, 1);
|
|
|
+ update_meta_page(sbi, ckpt, start_blk);
|
|
|
|
|
|
/* wait for previous submitted node/meta pages writeback */
|
|
|
wait_on_all_pages_writeback(sbi);
|