Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 381722d

Browse files
chaseyuJaegeuk Kim
authored andcommitted
f2fs: introduce update_meta_page
Add a help function update_meta_page() to update meta page with specified buffer. Signed-off-by: Chao Yu <[email protected]> Signed-off-by: Jaegeuk Kim <[email protected]>
1 parent cb5c94c commit 381722d

File tree

3 files changed

+22
-30
lines changed

3 files changed

+22
-30
lines changed

fs/f2fs/checkpoint.c

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -888,10 +888,8 @@ static void do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
888888
unsigned long orphan_num = sbi->im[ORPHAN_INO].ino_num;
889889
nid_t last_nid = nm_i->next_scan_nid;
890890
block_t start_blk;
891-
struct page *cp_page;
892891
unsigned int data_sum_blocks, orphan_blocks;
893892
__u32 crc32 = 0;
894-
void *kaddr;
895893
int i;
896894
int cp_payload_blks = __cp_payload(sbi);
897895

@@ -988,19 +986,11 @@ static void do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
988986
start_blk = __start_cp_addr(sbi);
989987

990988
/* write out checkpoint buffer at block 0 */
991-
cp_page = grab_meta_page(sbi, start_blk++);
992-
kaddr = page_address(cp_page);
993-
memcpy(kaddr, ckpt, F2FS_BLKSIZE);
994-
set_page_dirty(cp_page);
995-
f2fs_put_page(cp_page, 1);
996-
997-
for (i = 1; i < 1 + cp_payload_blks; i++) {
998-
cp_page = grab_meta_page(sbi, start_blk++);
999-
kaddr = page_address(cp_page);
1000-
memcpy(kaddr, (char *)ckpt + i * F2FS_BLKSIZE, F2FS_BLKSIZE);
1001-
set_page_dirty(cp_page);
1002-
f2fs_put_page(cp_page, 1);
1003-
}
989+
update_meta_page(sbi, ckpt, start_blk++);
990+
991+
for (i = 1; i < 1 + cp_payload_blks; i++)
992+
update_meta_page(sbi, (char *)ckpt + i * F2FS_BLKSIZE,
993+
start_blk++);
1004994

1005995
if (orphan_num) {
1006996
write_orphan_inodes(sbi, start_blk);
@@ -1015,11 +1005,7 @@ static void do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
10151005
}
10161006

10171007
/* writeout checkpoint block */
1018-
cp_page = grab_meta_page(sbi, start_blk);
1019-
kaddr = page_address(cp_page);
1020-
memcpy(kaddr, ckpt, F2FS_BLKSIZE);
1021-
set_page_dirty(cp_page);
1022-
f2fs_put_page(cp_page, 1);
1008+
update_meta_page(sbi, ckpt, start_blk);
10231009

10241010
/* wait for previous submitted node/meta pages writeback */
10251011
wait_on_all_pages_writeback(sbi);

fs/f2fs/f2fs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1690,6 +1690,7 @@ int npages_for_summary_flush(struct f2fs_sb_info *, bool);
16901690
void allocate_new_segments(struct f2fs_sb_info *);
16911691
int f2fs_trim_fs(struct f2fs_sb_info *, struct fstrim_range *);
16921692
struct page *get_sum_page(struct f2fs_sb_info *, unsigned int);
1693+
void update_meta_page(struct f2fs_sb_info *, void *, block_t);
16931694
void write_meta_page(struct f2fs_sb_info *, struct page *);
16941695
void write_node_page(unsigned int, struct f2fs_io_info *);
16951696
void write_data_page(struct dnode_of_data *, struct f2fs_io_info *);

fs/f2fs/segment.c

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -517,12 +517,8 @@ void discard_next_dnode(struct f2fs_sb_info *sbi, block_t blkaddr)
517517
err = f2fs_issue_discard(sbi, blkaddr, 1);
518518
}
519519

520-
if (err) {
521-
struct page *page = grab_meta_page(sbi, blkaddr);
522-
memset(page_address(page), 0, F2FS_BLKSIZE);
523-
set_page_dirty(page);
524-
f2fs_put_page(page, 1);
525-
}
520+
if (err)
521+
update_meta_page(sbi, NULL, blkaddr);
526522
}
527523

528524
static void __add_discard_entry(struct f2fs_sb_info *sbi,
@@ -801,16 +797,25 @@ struct page *get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno)
801797
return get_meta_page(sbi, GET_SUM_BLOCK(sbi, segno));
802798
}
803799

804-
static void write_sum_page(struct f2fs_sb_info *sbi,
805-
struct f2fs_summary_block *sum_blk, block_t blk_addr)
800+
void update_meta_page(struct f2fs_sb_info *sbi, void *src, block_t blk_addr)
806801
{
807802
struct page *page = grab_meta_page(sbi, blk_addr);
808-
void *kaddr = page_address(page);
809-
memcpy(kaddr, sum_blk, PAGE_CACHE_SIZE);
803+
void *dst = page_address(page);
804+
805+
if (src)
806+
memcpy(dst, src, PAGE_CACHE_SIZE);
807+
else
808+
memset(dst, 0, PAGE_CACHE_SIZE);
810809
set_page_dirty(page);
811810
f2fs_put_page(page, 1);
812811
}
813812

813+
static void write_sum_page(struct f2fs_sb_info *sbi,
814+
struct f2fs_summary_block *sum_blk, block_t blk_addr)
815+
{
816+
update_meta_page(sbi, (void *)sum_blk, blk_addr);
817+
}
818+
814819
static int is_next_segment_free(struct f2fs_sb_info *sbi, int type)
815820
{
816821
struct curseg_info *curseg = CURSEG_I(sbi, type);

0 commit comments

Comments
 (0)