f2fs: refactor bio-related operations
This patch integrates redundant bio operations on read and write IOs.
1. Move bio-related codes to the top of data.c.
2. Replace f2fs_submit_bio with f2fs_submit_merged_bio, which handles read
bios additionally.
3. Introduce __submit_merged_bio to submit the merged bio.
4. Change f2fs_readpage to f2fs_submit_page_bio.
5. Introduce f2fs_submit_page_mbio to integrate previous submit_read_page and
submit_write_page.
Reviewed-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
Reviewed-by: Chao Yu <chao2.yu@samsung.com >
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index d0ab003..0e1a3df 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -106,11 +106,11 @@
f2fs_put_page(page, 1);
continue;
}
- submit_read_page(sbi, page, index, READ_SYNC | REQ_META);
+ f2fs_submit_page_mbio(sbi, page, index, META, READ);
mark_page_accessed(page);
f2fs_put_page(page, 0);
}
- f2fs_submit_read_bio(sbi, READ_SYNC | REQ_META);
+ f2fs_submit_merged_bio(sbi, META, true, READ);
}
static struct nat_entry *__lookup_nat_cache(struct f2fs_nm_info *nm_i, nid_t n)
@@ -891,7 +891,7 @@
* LOCKED_PAGE: f2fs_put_page(page, 1)
* error: nothing
*/
-static int read_node_page(struct page *page, int type)
+static int read_node_page(struct page *page, int rw)
{
struct f2fs_sb_info *sbi = F2FS_SB(page->mapping->host->i_sb);
struct node_info ni;
@@ -906,7 +906,7 @@
if (PageUptodate(page))
return LOCKED_PAGE;
- return f2fs_readpage(sbi, page, ni.blk_addr, type);
+ return f2fs_submit_page_bio(sbi, page, ni.blk_addr, rw);
}
/*
@@ -1136,8 +1136,8 @@
}
if (wrote)
- f2fs_submit_bio(sbi, NODE, wbc->sync_mode == WB_SYNC_ALL);
-
+ f2fs_submit_merged_bio(sbi, NODE, wbc->sync_mode == WB_SYNC_ALL,
+ WRITE);
return nwritten;
}
@@ -1592,7 +1592,7 @@
*/
ClearPageUptodate(page);
- if (f2fs_readpage(sbi, page, addr, READ_SYNC))
+ if (f2fs_submit_page_bio(sbi, page, addr, READ_SYNC))
goto out;
lock_page(page);