diff options
-rw-r--r-- | fs/f2fs/checkpoint.c | 6 | ||||
-rw-r--r-- | fs/f2fs/dir.c | 9 | ||||
-rw-r--r-- | fs/f2fs/file.c | 6 | ||||
-rw-r--r-- | fs/f2fs/node.c | 12 | ||||
-rw-r--r-- | fs/f2fs/recovery.c | 2 |
5 files changed, 16 insertions, 19 deletions
diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c index 2a00c94726fb..a80be5121e8a 100644 --- a/fs/f2fs/checkpoint.c +++ b/fs/f2fs/checkpoint.c | |||
@@ -33,14 +33,12 @@ struct page *grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index) | |||
33 | struct address_space *mapping = META_MAPPING(sbi); | 33 | struct address_space *mapping = META_MAPPING(sbi); |
34 | struct page *page = NULL; | 34 | struct page *page = NULL; |
35 | repeat: | 35 | repeat: |
36 | page = grab_cache_page(mapping, index); | 36 | page = grab_cache_page_write_begin(mapping, index, AOP_FLAG_NOFS); |
37 | if (!page) { | 37 | if (!page) { |
38 | cond_resched(); | 38 | cond_resched(); |
39 | goto repeat; | 39 | goto repeat; |
40 | } | 40 | } |
41 | 41 | ||
42 | /* We wait writeback only inside grab_meta_page() */ | ||
43 | wait_on_page_writeback(page); | ||
44 | SetPageUptodate(page); | 42 | SetPageUptodate(page); |
45 | return page; | 43 | return page; |
46 | } | 44 | } |
@@ -168,7 +166,7 @@ static int f2fs_write_meta_page(struct page *page, | |||
168 | if (unlikely(is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ERROR_FLAG))) | 166 | if (unlikely(is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ERROR_FLAG))) |
169 | goto no_write; | 167 | goto no_write; |
170 | 168 | ||
171 | wait_on_page_writeback(page); | 169 | f2fs_wait_on_page_writeback(page, META); |
172 | write_meta_page(sbi, page); | 170 | write_meta_page(sbi, page); |
173 | no_write: | 171 | no_write: |
174 | dec_page_count(sbi, F2FS_DIRTY_META); | 172 | dec_page_count(sbi, F2FS_DIRTY_META); |
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c index f3a80ce9ddf5..7c9b17c03675 100644 --- a/fs/f2fs/dir.c +++ b/fs/f2fs/dir.c | |||
@@ -253,7 +253,7 @@ void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de, | |||
253 | struct page *page, struct inode *inode) | 253 | struct page *page, struct inode *inode) |
254 | { | 254 | { |
255 | lock_page(page); | 255 | lock_page(page); |
256 | wait_on_page_writeback(page); | 256 | f2fs_wait_on_page_writeback(page, DATA); |
257 | de->ino = cpu_to_le32(inode->i_ino); | 257 | de->ino = cpu_to_le32(inode->i_ino); |
258 | set_de_type(de, inode); | 258 | set_de_type(de, inode); |
259 | kunmap(page); | 259 | kunmap(page); |
@@ -352,14 +352,11 @@ static struct page *init_inode_metadata(struct inode *inode, | |||
352 | err = f2fs_init_security(inode, dir, name, page); | 352 | err = f2fs_init_security(inode, dir, name, page); |
353 | if (err) | 353 | if (err) |
354 | goto put_error; | 354 | goto put_error; |
355 | |||
356 | wait_on_page_writeback(page); | ||
357 | } else { | 355 | } else { |
358 | page = get_node_page(F2FS_SB(dir->i_sb), inode->i_ino); | 356 | page = get_node_page(F2FS_SB(dir->i_sb), inode->i_ino); |
359 | if (IS_ERR(page)) | 357 | if (IS_ERR(page)) |
360 | return page; | 358 | return page; |
361 | 359 | ||
362 | wait_on_page_writeback(page); | ||
363 | set_cold_node(inode, page); | 360 | set_cold_node(inode, page); |
364 | } | 361 | } |
365 | 362 | ||
@@ -494,7 +491,7 @@ start: | |||
494 | ++level; | 491 | ++level; |
495 | goto start; | 492 | goto start; |
496 | add_dentry: | 493 | add_dentry: |
497 | wait_on_page_writeback(dentry_page); | 494 | f2fs_wait_on_page_writeback(dentry_page, DATA); |
498 | 495 | ||
499 | page = init_inode_metadata(inode, dir, name); | 496 | page = init_inode_metadata(inode, dir, name); |
500 | if (IS_ERR(page)) { | 497 | if (IS_ERR(page)) { |
@@ -543,7 +540,7 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page, | |||
543 | int i; | 540 | int i; |
544 | 541 | ||
545 | lock_page(page); | 542 | lock_page(page); |
546 | wait_on_page_writeback(page); | 543 | f2fs_wait_on_page_writeback(page, DATA); |
547 | 544 | ||
548 | dentry_blk = (struct f2fs_dentry_block *)kaddr; | 545 | dentry_blk = (struct f2fs_dentry_block *)kaddr; |
549 | bit_pos = dentry - (struct f2fs_dir_entry *)dentry_blk->dentry; | 546 | bit_pos = dentry - (struct f2fs_dir_entry *)dentry_blk->dentry; |
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index a4cc1d6bdd84..e755ee57e042 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c | |||
@@ -76,7 +76,7 @@ static int f2fs_vm_page_mkwrite(struct vm_area_struct *vma, | |||
76 | trace_f2fs_vm_page_mkwrite(page, DATA); | 76 | trace_f2fs_vm_page_mkwrite(page, DATA); |
77 | mapped: | 77 | mapped: |
78 | /* fill the page */ | 78 | /* fill the page */ |
79 | wait_on_page_writeback(page); | 79 | f2fs_wait_on_page_writeback(page, DATA); |
80 | out: | 80 | out: |
81 | sb_end_pagefault(inode->i_sb); | 81 | sb_end_pagefault(inode->i_sb); |
82 | return block_page_mkwrite_return(err); | 82 | return block_page_mkwrite_return(err); |
@@ -245,7 +245,7 @@ static void truncate_partial_data_page(struct inode *inode, u64 from) | |||
245 | f2fs_put_page(page, 1); | 245 | f2fs_put_page(page, 1); |
246 | return; | 246 | return; |
247 | } | 247 | } |
248 | wait_on_page_writeback(page); | 248 | f2fs_wait_on_page_writeback(page, DATA); |
249 | zero_user(page, offset, PAGE_CACHE_SIZE - offset); | 249 | zero_user(page, offset, PAGE_CACHE_SIZE - offset); |
250 | set_page_dirty(page); | 250 | set_page_dirty(page); |
251 | f2fs_put_page(page, 1); | 251 | f2fs_put_page(page, 1); |
@@ -422,7 +422,7 @@ static void fill_zero(struct inode *inode, pgoff_t index, | |||
422 | f2fs_unlock_op(sbi); | 422 | f2fs_unlock_op(sbi); |
423 | 423 | ||
424 | if (!IS_ERR(page)) { | 424 | if (!IS_ERR(page)) { |
425 | wait_on_page_writeback(page); | 425 | f2fs_wait_on_page_writeback(page, DATA); |
426 | zero_user(page, start, len); | 426 | zero_user(page, start, len); |
427 | set_page_dirty(page); | 427 | set_page_dirty(page); |
428 | f2fs_put_page(page, 1); | 428 | f2fs_put_page(page, 1); |
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 5e9c38e846a5..9a6d8bbf0bd7 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c | |||
@@ -725,7 +725,7 @@ skip_partial: | |||
725 | f2fs_put_page(page, 1); | 725 | f2fs_put_page(page, 1); |
726 | goto restart; | 726 | goto restart; |
727 | } | 727 | } |
728 | wait_on_page_writeback(page); | 728 | f2fs_wait_on_page_writeback(page, NODE); |
729 | ri->i_nid[offset[0] - NODE_DIR1_BLOCK] = 0; | 729 | ri->i_nid[offset[0] - NODE_DIR1_BLOCK] = 0; |
730 | set_page_dirty(page); | 730 | set_page_dirty(page); |
731 | unlock_page(page); | 731 | unlock_page(page); |
@@ -814,7 +814,8 @@ struct page *new_node_page(struct dnode_of_data *dn, | |||
814 | if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))) | 814 | if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))) |
815 | return ERR_PTR(-EPERM); | 815 | return ERR_PTR(-EPERM); |
816 | 816 | ||
817 | page = grab_cache_page(NODE_MAPPING(sbi), dn->nid); | 817 | page = grab_cache_page_write_begin(NODE_MAPPING(sbi), |
818 | dn->nid, AOP_FLAG_NOFS); | ||
818 | if (!page) | 819 | if (!page) |
819 | return ERR_PTR(-ENOMEM); | 820 | return ERR_PTR(-ENOMEM); |
820 | 821 | ||
@@ -910,7 +911,8 @@ struct page *get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid) | |||
910 | struct page *page; | 911 | struct page *page; |
911 | int err; | 912 | int err; |
912 | repeat: | 913 | repeat: |
913 | page = grab_cache_page(NODE_MAPPING(sbi), nid); | 914 | page = grab_cache_page_write_begin(NODE_MAPPING(sbi), |
915 | nid, AOP_FLAG_NOFS); | ||
914 | if (!page) | 916 | if (!page) |
915 | return ERR_PTR(-ENOMEM); | 917 | return ERR_PTR(-ENOMEM); |
916 | 918 | ||
@@ -1130,7 +1132,7 @@ int wait_on_node_pages_writeback(struct f2fs_sb_info *sbi, nid_t ino) | |||
1130 | continue; | 1132 | continue; |
1131 | 1133 | ||
1132 | if (ino && ino_of_node(page) == ino) { | 1134 | if (ino && ino_of_node(page) == ino) { |
1133 | wait_on_page_writeback(page); | 1135 | f2fs_wait_on_page_writeback(page, NODE); |
1134 | if (TestClearPageError(page)) | 1136 | if (TestClearPageError(page)) |
1135 | ret = -EIO; | 1137 | ret = -EIO; |
1136 | } | 1138 | } |
@@ -1163,7 +1165,7 @@ static int f2fs_write_node_page(struct page *page, | |||
1163 | if (unlikely(sbi->por_doing)) | 1165 | if (unlikely(sbi->por_doing)) |
1164 | goto redirty_out; | 1166 | goto redirty_out; |
1165 | 1167 | ||
1166 | wait_on_page_writeback(page); | 1168 | f2fs_wait_on_page_writeback(page, NODE); |
1167 | 1169 | ||
1168 | /* get old block addr of this node page */ | 1170 | /* get old block addr of this node page */ |
1169 | nid = nid_of_node(page); | 1171 | nid = nid_of_node(page); |
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c index 03b28ec4c2dc..bbef4ed157a7 100644 --- a/fs/f2fs/recovery.c +++ b/fs/f2fs/recovery.c | |||
@@ -316,7 +316,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode, | |||
316 | goto out; | 316 | goto out; |
317 | } | 317 | } |
318 | 318 | ||
319 | wait_on_page_writeback(dn.node_page); | 319 | f2fs_wait_on_page_writeback(dn.node_page, NODE); |
320 | 320 | ||
321 | get_node_info(sbi, dn.nid, &ni); | 321 | get_node_info(sbi, dn.nid, &ni); |
322 | f2fs_bug_on(ni.ino != ino_of_node(page)); | 322 | f2fs_bug_on(ni.ino != ino_of_node(page)); |