f2fs: Copy summary entries in bulk
A message that is not in the archive (sent off-list or not yet received): CGME20180416111043epcas5p3ea799775cd4117bd80a4207982f98548@epcas5p3.samsung.com
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/1 f2fs: Copy summary entries in bulk
Copy summary entries in bulk in write_compacted_summaries(). And zero the blank part of page after writing the summaries to the page.
--- fs/f2fs/segment.c | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-)
fs/f2fs/segment.c +22 -16
@@ -3103,14 +3103,12 @@ static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr) {struct page *page;unsigned char *kaddr; -struct f2fs_summary *summary;struct curseg_info *seg_i;int written_size =0 ; -int i, j; +int i; page =grab_meta_page (sbi, blkaddr++); kaddr = (unsigned char *)page_address (page); -memset (kaddr,0 ,PAGE_SIZE );/* Step 1: write nat cache */ seg_i =CURSEG_I (sbi,CURSEG_HOT_DATA );
@@ -3124,34 +3122,42 @@ static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr)/* Step 3: write summary entries */ for (i =CURSEG_HOT_DATA ; i <=CURSEG_COLD_DATA ; i++) { -unsigned short blkoff; +unsigned short blkoff, page_cap, summary_cnt; + seg_i =CURSEG_I (sbi, i);if (sbi->ckpt->alloc_type[i] ==SSR ) blkoff = sbi->blocks_per_seg;else blkoff =curseg_blkoff (sbi, i); -for (j =0 ; j < blkoff; j++) { +while (blkoff) {if (!page) { page =grab_meta_page (sbi, blkaddr++); kaddr = (unsigned char *)page_address (page); -memset (kaddr,0 ,PAGE_SIZE ); written_size =0 ; } - summary = (struct f2fs_summary *)(kaddr + written_size); - *summary = seg_i->sum_blk->entries[j]; - written_size +=SUMMARY_SIZE ; -if (written_size +SUMMARY_SIZE <=PAGE_SIZE - -SUM_FOOTER_SIZE ) -continue ; - -set_page_dirty (page); -f2fs_put_page (page,1 ); - page =NULL ; + page_cap = (PAGE_SIZE -SUM_FOOTER_SIZE - written_size) + /SUMMARY_SIZE ; + summary_cnt =min (page_cap, blkoff); +memcpy (kaddr + written_size, seg_i->sum_blk->entries, + summary_cnt *SUMMARY_SIZE ); + written_size += summary_cnt *SUMMARY_SIZE ; + blkoff -= summary_cnt; + +if (page_cap == summary_cnt) { +memset (kaddr + written_size,0 , +PAGE_SIZE - written_size); +set_page_dirty (page); +f2fs_put_page (page,1 ); + page =NULL ; + } } } +if (page) { +memset (kaddr + written_size,0 , +PAGE_SIZE - written_size);set_page_dirty (page);f2fs_put_page (page,1 ); }
Signature · 8 lines
2.7.4 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Quoted 30 lines · LiFan
Copy summary entries in bulk in
write_compacted_summaries(). And zero the blank part of page after writing the summaries to the page.Signed-off-by Fan li <[email protected]>--- fs/f2fs/segment.c | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-)fs/f2fs/segment.c +1
-3@@ -3103,14 +3103,12 @@ static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr) {struct page *page;unsigned char *kaddr; -struct f2fs_summary *summary;struct curseg_info *seg_i;int written_size =0 ; -int i, j; +int i; page =grab_meta_page (sbi, blkaddr++); kaddr = (unsigned char *)page_address (page); -memset (kaddr,0 ,PAGE_SIZE );/* Step 1: write nat cache */ seg_i =CURSEG_I (sbi,CURSEG_HOT_DATA );
fs/f2fs/segment.c static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr) · line 3125
Quoted 5 lines
fs/f2fs/segment.c +1
-1@@ -3124,34 +3122,42 @@ static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr)/* Step 3: write summary entries */ for (i =CURSEG_HOT_DATA ; i <=CURSEG_COLD_DATA ; i++) { -unsigned short blkoff; +unsigned short blkoff, page_cap, summary_cnt;
blkoff = 0;
fs/f2fs/segment.c static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr) · line 3129
Quoted 4 lines
fs/f2fs/segment.c +1
-0+ seg_i =CURSEG_I (sbi, i);if (sbi->ckpt->alloc_type[i] ==SSR ) blkoff = sbi->blocks_per_seg;
max = sbi->blocks_per_seg;
fs/f2fs/segment.c static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr) · line 3131
Quoted 2 lines
fs/f2fs/segment.c +0
-0else blkoff =curseg_blkoff (sbi, i);
max = curseg_blkoff(sbi, i);
fs/f2fs/segment.c static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr) · line 3133
Quoted 3 lines
fs/f2fs/segment.c +1
-1-for (j =0 ; j < blkoff; j++) { +while (blkoff) {
while (blkoff < max)
Quoted 10 lines
fs/f2fs/segment.c +0
-4if (!page) { page =grab_meta_page (sbi, blkaddr++); kaddr = (unsigned char *)page_address (page); -memset (kaddr,0 ,PAGE_SIZE ); written_size =0 ; } - summary = (struct f2fs_summary *)(kaddr + written_size); - *summary = seg_i->sum_blk->entries[j]; - written_size +=SUMMARY_SIZE ;
fs/f2fs/segment.c static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr) · line 3142
Quoted 10 lines
fs/f2fs/segment.c +3
-7-if (written_size +SUMMARY_SIZE <=PAGE_SIZE - -SUM_FOOTER_SIZE ) -continue ; - -set_page_dirty (page); -f2fs_put_page (page,1 ); - page =NULL ; + page_cap = (PAGE_SIZE -SUM_FOOTER_SIZE - written_size) + /SUMMARY_SIZE ; + summary_cnt =min (page_cap, blkoff);
summary_cnt = min(page_cap, max - blkoff);
fs/f2fs/segment.c static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr) · line 3143
Quoted 1 line
fs/f2fs/segment.c +1
-0+ memcpy(kaddr + written_size, seg_i->sum_blk->entries,
memcpy(kaddr + written_size, seg_i->sum_blk->entries + blkoff
fs/f2fs/segment.c static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr) · line 3144
Quoted 1 line
fs/f2fs/segment.c +1
-0+ summary_cnt * SUMMARY_SIZE);
blkoff += summary_cnt;
fs/f2fs/segment.c static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr) · line 3146
Quoted 2 lines
fs/f2fs/segment.c +2
-0+ written_size += summary_cnt *SUMMARY_SIZE ; + blkoff -= summary_cnt;
removed.
Thanks,
Quoted 8 lines
fs/f2fs/segment.c +8
-0+ +if (page_cap == summary_cnt) { +memset (kaddr + written_size,0 , +PAGE_SIZE - written_size); +set_page_dirty (page); +f2fs_put_page (page,1 ); + page =NULL ; + }
fs/f2fs/segment.c static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr)
Quoted 10 lines
fs/f2fs/segment.c +3
-0} } +if (page) { +memset (kaddr + written_size,0 , +PAGE_SIZE - written_size);set_page_dirty (page);f2fs_put_page (page,1 ); }
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot