aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/segment.c
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2016-01-20 10:43:51 -0500
committerJaegeuk Kim <jaegeuk@kernel.org>2016-02-22 19:07:23 -0500
commitfec1d6576cdf2ce13f84fcdf7b20d02a05f76fc6 (patch)
treea413bdb72037dedf3bace051d93683591690cd5b /fs/f2fs/segment.c
parent718e53fa633f84d09acb4b76f1ad572ccbf75a12 (diff)
f2fs: use wait_for_stable_page to avoid contention
In write_begin, if storage supports stable_page, we don't need to wait for writeback to update its contents. This patch introduces to use wait_for_stable_page instead of wait_on_page_writeback. Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/segment.c')
-rw-r--r--fs/f2fs/segment.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 9e3276067526..7cd07d54be4e 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -223,7 +223,8 @@ int commit_inmem_pages(struct inode *inode, bool abort)
223 if (!abort) { 223 if (!abort) {
224 if (cur->page->mapping == inode->i_mapping) { 224 if (cur->page->mapping == inode->i_mapping) {
225 set_page_dirty(cur->page); 225 set_page_dirty(cur->page);
226 f2fs_wait_on_page_writeback(cur->page, DATA); 226 f2fs_wait_on_page_writeback(cur->page, DATA,
227 true);
227 if (clear_page_dirty_for_io(cur->page)) 228 if (clear_page_dirty_for_io(cur->page))
228 inode_dec_dirty_pages(inode); 229 inode_dec_dirty_pages(inode);
229 trace_f2fs_commit_inmem_page(cur->page, INMEM); 230 trace_f2fs_commit_inmem_page(cur->page, INMEM);
@@ -1416,14 +1417,17 @@ void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn,
1416} 1417}
1417 1418
1418void f2fs_wait_on_page_writeback(struct page *page, 1419void f2fs_wait_on_page_writeback(struct page *page,
1419 enum page_type type) 1420 enum page_type type, bool ordered)
1420{ 1421{
1421 if (PageWriteback(page)) { 1422 if (PageWriteback(page)) {
1422 struct f2fs_sb_info *sbi = F2FS_P_SB(page); 1423 struct f2fs_sb_info *sbi = F2FS_P_SB(page);
1423 1424
1424 if (is_merged_page(sbi, page, type)) 1425 if (is_merged_page(sbi, page, type))
1425 f2fs_submit_merged_bio(sbi, type, WRITE); 1426 f2fs_submit_merged_bio(sbi, type, WRITE);
1426 wait_on_page_writeback(page); 1427 if (ordered)
1428 wait_on_page_writeback(page);
1429 else
1430 wait_for_stable_page(page);
1427 } 1431 }
1428} 1432}
1429 1433
@@ -1439,7 +1443,7 @@ void f2fs_wait_on_encrypted_page_writeback(struct f2fs_sb_info *sbi,
1439 1443
1440 cpage = find_lock_page(META_MAPPING(sbi), blkaddr); 1444 cpage = find_lock_page(META_MAPPING(sbi), blkaddr);
1441 if (cpage) { 1445 if (cpage) {
1442 f2fs_wait_on_page_writeback(cpage, DATA); 1446 f2fs_wait_on_page_writeback(cpage, DATA, true);
1443 f2fs_put_page(cpage, 1); 1447 f2fs_put_page(cpage, 1);
1444 } 1448 }
1445} 1449}