aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2016-05-20 19:32:49 -0400
committerJaegeuk Kim <jaegeuk@kernel.org>2016-06-02 21:05:12 -0400
commitee6d182f2a19d5d44607b5ae4bec523726d76a99 (patch)
tree514092851eb0e974c6ac8add90fed10056b84998 /fs
parent0f18b462b2e5aff64b8638e8a47284b907351ef3 (diff)
f2fs: remove syncing inode page in all the cases
This patch reduces to call them across the whole tree. - sync_inode_page() - update_inode_page() - update_inode() - f2fs_write_inode() Instead, checkpoint will flush all the dirty inode metadata before syncing node pages. Note that, this is doable, since we call mark_inode_dirty_sync() for all inode's field change which needs to update on-disk inode as well. Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/f2fs/data.c11
-rw-r--r--fs/f2fs/dir.c24
-rw-r--r--fs/f2fs/extent_cache.c7
-rw-r--r--fs/f2fs/f2fs.h2
-rw-r--r--fs/f2fs/file.c15
-rw-r--r--fs/f2fs/inline.c27
-rw-r--r--fs/f2fs/namei.c15
-rw-r--r--fs/f2fs/node.c28
-rw-r--r--fs/f2fs/recovery.c3
-rw-r--r--fs/f2fs/xattr.c6
10 files changed, 17 insertions, 121 deletions
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 6a4c60c2fd3a..a3dea51f4702 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -343,8 +343,6 @@ int reserve_new_blocks(struct dnode_of_data *dn, blkcnt_t count)
343 343
344 if (set_page_dirty(dn->node_page)) 344 if (set_page_dirty(dn->node_page))
345 dn->node_changed = true; 345 dn->node_changed = true;
346
347 sync_inode_page(dn);
348 return 0; 346 return 0;
349} 347}
350 348
@@ -562,11 +560,8 @@ struct page *get_new_data_page(struct inode *inode,
562 } 560 }
563got_it: 561got_it:
564 if (new_i_size && i_size_read(inode) < 562 if (new_i_size && i_size_read(inode) <
565 ((loff_t)(index + 1) << PAGE_SHIFT)) { 563 ((loff_t)(index + 1) << PAGE_SHIFT))
566 f2fs_i_size_write(inode, ((loff_t)(index + 1) << PAGE_SHIFT)); 564 f2fs_i_size_write(inode, ((loff_t)(index + 1) << PAGE_SHIFT));
567 /* Only the directory inode sets new_i_size */
568 set_inode_flag(inode, FI_UPDATE_DIR);
569 }
570 return page; 565 return page;
571} 566}
572 567
@@ -787,8 +782,6 @@ skip:
787 else if (dn.ofs_in_node < end_offset) 782 else if (dn.ofs_in_node < end_offset)
788 goto next_block; 783 goto next_block;
789 784
790 if (allocated)
791 sync_inode_page(&dn);
792 f2fs_put_dnode(&dn); 785 f2fs_put_dnode(&dn);
793 786
794 if (create) { 787 if (create) {
@@ -799,8 +792,6 @@ skip:
799 goto next_dnode; 792 goto next_dnode;
800 793
801sync_out: 794sync_out:
802 if (allocated)
803 sync_inode_page(&dn);
804 f2fs_put_dnode(&dn); 795 f2fs_put_dnode(&dn);
805unlock_out: 796unlock_out:
806 if (create) { 797 if (create) {
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 384d51cb77bf..24d1308838b5 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -454,19 +454,15 @@ void update_parent_metadata(struct inode *dir, struct inode *inode,
454 unsigned int current_depth) 454 unsigned int current_depth)
455{ 455{
456 if (inode && is_inode_flag_set(inode, FI_NEW_INODE)) { 456 if (inode && is_inode_flag_set(inode, FI_NEW_INODE)) {
457 if (S_ISDIR(inode->i_mode)) { 457 if (S_ISDIR(inode->i_mode))
458 f2fs_i_links_write(dir, true); 458 f2fs_i_links_write(dir, true);
459 set_inode_flag(dir, FI_UPDATE_DIR);
460 }
461 clear_inode_flag(inode, FI_NEW_INODE); 459 clear_inode_flag(inode, FI_NEW_INODE);
462 } 460 }
463 dir->i_mtime = dir->i_ctime = CURRENT_TIME; 461 dir->i_mtime = dir->i_ctime = CURRENT_TIME;
464 mark_inode_dirty_sync(dir); 462 mark_inode_dirty_sync(dir);
465 463
466 if (F2FS_I(dir)->i_current_depth != current_depth) { 464 if (F2FS_I(dir)->i_current_depth != current_depth)
467 f2fs_i_depth_write(dir, current_depth); 465 f2fs_i_depth_write(dir, current_depth);
468 set_inode_flag(dir, FI_UPDATE_DIR);
469 }
470 466
471 if (inode && is_inode_flag_set(inode, FI_INC_LINK)) 467 if (inode && is_inode_flag_set(inode, FI_INC_LINK))
472 clear_inode_flag(inode, FI_INC_LINK); 468 clear_inode_flag(inode, FI_INC_LINK);
@@ -595,9 +591,7 @@ add_dentry:
595 set_page_dirty(dentry_page); 591 set_page_dirty(dentry_page);
596 592
597 if (inode) { 593 if (inode) {
598 /* we don't need to mark_inode_dirty now */
599 f2fs_i_pino_write(inode, dir->i_ino); 594 f2fs_i_pino_write(inode, dir->i_ino);
600 update_inode(inode, page);
601 f2fs_put_page(page, 1); 595 f2fs_put_page(page, 1);
602 } 596 }
603 597
@@ -606,10 +600,6 @@ fail:
606 if (inode) 600 if (inode)
607 up_write(&F2FS_I(inode)->i_sem); 601 up_write(&F2FS_I(inode)->i_sem);
608 602
609 if (is_inode_flag_set(dir, FI_UPDATE_DIR)) {
610 update_inode_page(dir);
611 clear_inode_flag(dir, FI_UPDATE_DIR);
612 }
613 kunmap(dentry_page); 603 kunmap(dentry_page);
614 f2fs_put_page(dentry_page, 1); 604 f2fs_put_page(dentry_page, 1);
615 605
@@ -656,8 +646,6 @@ int f2fs_do_tmpfile(struct inode *inode, struct inode *dir)
656 err = PTR_ERR(page); 646 err = PTR_ERR(page);
657 goto fail; 647 goto fail;
658 } 648 }
659 /* we don't need to mark_inode_dirty now */
660 update_inode(inode, page);
661 f2fs_put_page(page, 1); 649 f2fs_put_page(page, 1);
662 650
663 clear_inode_flag(inode, FI_NEW_INODE); 651 clear_inode_flag(inode, FI_NEW_INODE);
@@ -673,13 +661,8 @@ void f2fs_drop_nlink(struct inode *dir, struct inode *inode, struct page *page)
673 661
674 down_write(&F2FS_I(inode)->i_sem); 662 down_write(&F2FS_I(inode)->i_sem);
675 663
676 if (S_ISDIR(inode->i_mode)) { 664 if (S_ISDIR(inode->i_mode))
677 f2fs_i_links_write(dir, false); 665 f2fs_i_links_write(dir, false);
678 if (page)
679 update_inode(dir, page);
680 else
681 update_inode_page(dir);
682 }
683 inode->i_ctime = CURRENT_TIME; 666 inode->i_ctime = CURRENT_TIME;
684 667
685 f2fs_i_links_write(inode, false); 668 f2fs_i_links_write(inode, false);
@@ -688,7 +671,6 @@ void f2fs_drop_nlink(struct inode *dir, struct inode *inode, struct page *page)
688 f2fs_i_size_write(inode, 0); 671 f2fs_i_size_write(inode, 0);
689 } 672 }
690 up_write(&F2FS_I(inode)->i_sem); 673 up_write(&F2FS_I(inode)->i_sem);
691 update_inode_page(inode);
692 674
693 if (inode->i_nlink == 0) 675 if (inode->i_nlink == 0)
694 add_orphan_inode(sbi, inode->i_ino); 676 add_orphan_inode(sbi, inode->i_ino);
diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
index d21dda607bf2..e858869d76cb 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -689,9 +689,7 @@ void f2fs_update_extent_cache(struct dnode_of_data *dn)
689 689
690 fofs = start_bidx_of_node(ofs_of_node(dn->node_page), dn->inode) + 690 fofs = start_bidx_of_node(ofs_of_node(dn->node_page), dn->inode) +
691 dn->ofs_in_node; 691 dn->ofs_in_node;
692 692 f2fs_update_extent_tree_range(dn->inode, fofs, blkaddr, 1);
693 if (f2fs_update_extent_tree_range(dn->inode, fofs, blkaddr, 1))
694 sync_inode_page(dn);
695} 693}
696 694
697void f2fs_update_extent_cache_range(struct dnode_of_data *dn, 695void f2fs_update_extent_cache_range(struct dnode_of_data *dn,
@@ -701,8 +699,7 @@ void f2fs_update_extent_cache_range(struct dnode_of_data *dn,
701 if (!f2fs_may_extent_tree(dn->inode)) 699 if (!f2fs_may_extent_tree(dn->inode))
702 return; 700 return;
703 701
704 if (f2fs_update_extent_tree_range(dn->inode, fofs, blkaddr, len)) 702 f2fs_update_extent_tree_range(dn->inode, fofs, blkaddr, len);
705 sync_inode_page(dn);
706} 703}
707 704
708void init_extent_cache_info(struct f2fs_sb_info *sbi) 705void init_extent_cache_info(struct f2fs_sb_info *sbi)
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index b541164ce5af..2adef0e58461 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1521,7 +1521,6 @@ enum {
1521 FI_ACL_MODE, /* indicate acl mode */ 1521 FI_ACL_MODE, /* indicate acl mode */
1522 FI_NO_ALLOC, /* should not allocate any blocks */ 1522 FI_NO_ALLOC, /* should not allocate any blocks */
1523 FI_FREE_NID, /* free allocated nide */ 1523 FI_FREE_NID, /* free allocated nide */
1524 FI_UPDATE_DIR, /* should update inode block for consistency */
1525 FI_NO_EXTENT, /* not to use the extent cache */ 1524 FI_NO_EXTENT, /* not to use the extent cache */
1526 FI_INLINE_XATTR, /* used for inline xattr */ 1525 FI_INLINE_XATTR, /* used for inline xattr */
1527 FI_INLINE_DATA, /* used for inline data*/ 1526 FI_INLINE_DATA, /* used for inline data*/
@@ -1936,7 +1935,6 @@ struct page *new_node_page(struct dnode_of_data *, unsigned int, struct page *);
1936void ra_node_page(struct f2fs_sb_info *, nid_t); 1935void ra_node_page(struct f2fs_sb_info *, nid_t);
1937struct page *get_node_page(struct f2fs_sb_info *, pgoff_t); 1936struct page *get_node_page(struct f2fs_sb_info *, pgoff_t);
1938struct page *get_node_page_ra(struct page *, int); 1937struct page *get_node_page_ra(struct page *, int);
1939void sync_inode_page(struct dnode_of_data *);
1940void move_node_page(struct page *, int); 1938void move_node_page(struct page *, int);
1941int fsync_node_pages(struct f2fs_sb_info *, nid_t, struct writeback_control *, 1939int fsync_node_pages(struct f2fs_sb_info *, nid_t, struct writeback_control *,
1942 bool); 1940 bool);
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index c5606b1e1a89..73bc946974ad 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -173,12 +173,8 @@ static void try_to_fix_pino(struct inode *inode)
173 get_parent_ino(inode, &pino)) { 173 get_parent_ino(inode, &pino)) {
174 f2fs_i_pino_write(inode, pino); 174 f2fs_i_pino_write(inode, pino);
175 file_got_pino(inode); 175 file_got_pino(inode);
176 up_write(&fi->i_sem);
177
178 f2fs_write_inode(inode, NULL);
179 } else {
180 up_write(&fi->i_sem);
181 } 176 }
177 up_write(&fi->i_sem);
182} 178}
183 179
184static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end, 180static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,
@@ -499,7 +495,6 @@ int truncate_data_blocks_range(struct dnode_of_data *dn, int count)
499 dn->inode) + ofs; 495 dn->inode) + ofs;
500 f2fs_update_extent_cache_range(dn, fofs, 0, len); 496 f2fs_update_extent_cache_range(dn, fofs, 0, len);
501 dec_valid_block_count(sbi, dn->inode, nr_free); 497 dec_valid_block_count(sbi, dn->inode, nr_free);
502 sync_inode_page(dn);
503 } 498 }
504 dn->ofs_in_node = ofs; 499 dn->ofs_in_node = ofs;
505 500
@@ -1123,10 +1118,8 @@ static int f2fs_zero_range(struct inode *inode, loff_t offset, loff_t len,
1123 } 1118 }
1124 1119
1125out: 1120out:
1126 if (!(mode & FALLOC_FL_KEEP_SIZE) && i_size_read(inode) < new_size) { 1121 if (!(mode & FALLOC_FL_KEEP_SIZE) && i_size_read(inode) < new_size)
1127 f2fs_i_size_write(inode, new_size); 1122 f2fs_i_size_write(inode, new_size);
1128 update_inode_page(inode);
1129 }
1130 1123
1131 return ret; 1124 return ret;
1132} 1125}
@@ -1232,10 +1225,8 @@ static int expand_inode_data(struct inode *inode, loff_t offset,
1232 new_size = ((loff_t)pg_end << PAGE_SHIFT) + off_end; 1225 new_size = ((loff_t)pg_end << PAGE_SHIFT) + off_end;
1233 } 1226 }
1234 1227
1235 if (!(mode & FALLOC_FL_KEEP_SIZE) && i_size_read(inode) < new_size) { 1228 if (!(mode & FALLOC_FL_KEEP_SIZE) && i_size_read(inode) < new_size)
1236 f2fs_i_size_write(inode, new_size); 1229 f2fs_i_size_write(inode, new_size);
1237 update_inode_page(inode);
1238 }
1239 1230
1240 return ret; 1231 return ret;
1241} 1232}
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 4bc025c29f82..77c9c2439993 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -73,7 +73,7 @@ bool truncate_inline_inode(struct page *ipage, u64 from)
73 73
74 f2fs_wait_on_page_writeback(ipage, NODE, true); 74 f2fs_wait_on_page_writeback(ipage, NODE, true);
75 memset(addr + from, 0, MAX_INLINE_DATA - from); 75 memset(addr + from, 0, MAX_INLINE_DATA - from);
76 76 set_page_dirty(ipage);
77 return true; 77 return true;
78} 78}
79 79
@@ -146,7 +146,6 @@ int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)
146clear_out: 146clear_out:
147 stat_dec_inline_inode(dn->inode); 147 stat_dec_inline_inode(dn->inode);
148 f2fs_clear_inline_inode(dn->inode); 148 f2fs_clear_inline_inode(dn->inode);
149 sync_inode_page(dn);
150 f2fs_put_dnode(dn); 149 f2fs_put_dnode(dn);
151 return 0; 150 return 0;
152} 151}
@@ -212,11 +211,11 @@ int f2fs_write_inline_data(struct inode *inode, struct page *page)
212 dst_addr = inline_data_addr(dn.inode_page); 211 dst_addr = inline_data_addr(dn.inode_page);
213 memcpy(dst_addr, src_addr, MAX_INLINE_DATA); 212 memcpy(dst_addr, src_addr, MAX_INLINE_DATA);
214 kunmap_atomic(src_addr); 213 kunmap_atomic(src_addr);
214 set_page_dirty(dn.inode_page);
215 215
216 set_inode_flag(inode, FI_APPEND_WRITE); 216 set_inode_flag(inode, FI_APPEND_WRITE);
217 set_inode_flag(inode, FI_DATA_EXIST); 217 set_inode_flag(inode, FI_DATA_EXIST);
218 218
219 sync_inode_page(&dn);
220 clear_inline_node(dn.inode_page); 219 clear_inline_node(dn.inode_page);
221 f2fs_put_dnode(&dn); 220 f2fs_put_dnode(&dn);
222 return 0; 221 return 0;
@@ -255,7 +254,7 @@ process_inline:
255 set_inode_flag(inode, FI_INLINE_DATA); 254 set_inode_flag(inode, FI_INLINE_DATA);
256 set_inode_flag(inode, FI_DATA_EXIST); 255 set_inode_flag(inode, FI_DATA_EXIST);
257 256
258 update_inode(inode, ipage); 257 set_page_dirty(ipage);
259 f2fs_put_page(ipage, 1); 258 f2fs_put_page(ipage, 1);
260 return true; 259 return true;
261 } 260 }
@@ -266,7 +265,6 @@ process_inline:
266 if (!truncate_inline_inode(ipage, 0)) 265 if (!truncate_inline_inode(ipage, 0))
267 return false; 266 return false;
268 f2fs_clear_inline_inode(inode); 267 f2fs_clear_inline_inode(inode);
269 update_inode(inode, ipage);
270 f2fs_put_page(ipage, 1); 268 f2fs_put_page(ipage, 1);
271 } else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) { 269 } else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) {
272 if (truncate_blocks(inode, 0, false)) 270 if (truncate_blocks(inode, 0, false))
@@ -339,10 +337,8 @@ int make_empty_inline_dir(struct inode *inode, struct inode *parent,
339 set_page_dirty(ipage); 337 set_page_dirty(ipage);
340 338
341 /* update i_size to MAX_INLINE_DATA */ 339 /* update i_size to MAX_INLINE_DATA */
342 if (i_size_read(inode) < MAX_INLINE_DATA) { 340 if (i_size_read(inode) < MAX_INLINE_DATA)
343 f2fs_i_size_write(inode, MAX_INLINE_DATA); 341 f2fs_i_size_write(inode, MAX_INLINE_DATA);
344 set_inode_flag(inode, FI_UPDATE_DIR);
345 }
346 return 0; 342 return 0;
347} 343}
348 344
@@ -401,12 +397,8 @@ static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
401 clear_inode_flag(dir, FI_INLINE_DENTRY); 397 clear_inode_flag(dir, FI_INLINE_DENTRY);
402 398
403 f2fs_i_depth_write(dir, 1); 399 f2fs_i_depth_write(dir, 1);
404 if (i_size_read(dir) < PAGE_SIZE) { 400 if (i_size_read(dir) < PAGE_SIZE)
405 f2fs_i_size_write(dir, PAGE_SIZE); 401 f2fs_i_size_write(dir, PAGE_SIZE);
406 set_inode_flag(dir, FI_UPDATE_DIR);
407 }
408
409 sync_inode_page(&dn);
410out: 402out:
411 f2fs_put_page(page, 1); 403 f2fs_put_page(page, 1);
412 return err; 404 return err;
@@ -486,7 +478,6 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
486 478
487 stat_dec_inline_dir(dir); 479 stat_dec_inline_dir(dir);
488 clear_inode_flag(dir, FI_INLINE_DENTRY); 480 clear_inode_flag(dir, FI_INLINE_DENTRY);
489 update_inode(dir, ipage);
490 kfree(backup_dentry); 481 kfree(backup_dentry);
491 return 0; 482 return 0;
492recover: 483recover:
@@ -494,7 +485,7 @@ recover:
494 memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA); 485 memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA);
495 f2fs_i_depth_write(dir, 0); 486 f2fs_i_depth_write(dir, 0);
496 f2fs_i_size_write(dir, MAX_INLINE_DATA); 487 f2fs_i_size_write(dir, MAX_INLINE_DATA);
497 update_inode(dir, ipage); 488 set_page_dirty(ipage);
498 f2fs_put_page(ipage, 1); 489 f2fs_put_page(ipage, 1);
499 490
500 kfree(backup_dentry); 491 kfree(backup_dentry);
@@ -559,7 +550,6 @@ int f2fs_add_inline_entry(struct inode *dir, const struct qstr *name,
559 /* we don't need to mark_inode_dirty now */ 550 /* we don't need to mark_inode_dirty now */
560 if (inode) { 551 if (inode) {
561 f2fs_i_pino_write(inode, dir->i_ino); 552 f2fs_i_pino_write(inode, dir->i_ino);
562 update_inode(inode, page);
563 f2fs_put_page(page, 1); 553 f2fs_put_page(page, 1);
564 } 554 }
565 555
@@ -567,11 +557,6 @@ int f2fs_add_inline_entry(struct inode *dir, const struct qstr *name,
567fail: 557fail:
568 if (inode) 558 if (inode)
569 up_write(&F2FS_I(inode)->i_sem); 559 up_write(&F2FS_I(inode)->i_sem);
570
571 if (is_inode_flag_set(dir, FI_UPDATE_DIR)) {
572 update_inode(dir, ipage);
573 clear_inode_flag(dir, FI_UPDATE_DIR);
574 }
575out: 560out:
576 f2fs_put_page(ipage, 1); 561 f2fs_put_page(ipage, 1);
577 return err; 562 return err;
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index f2b2c4068648..496f4e3018b2 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -706,9 +706,6 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
706 add_orphan_inode(sbi, new_inode->i_ino); 706 add_orphan_inode(sbi, new_inode->i_ino);
707 else 707 else
708 release_orphan_inode(sbi); 708 release_orphan_inode(sbi);
709
710 update_inode_page(old_inode);
711 update_inode_page(new_inode);
712 } else { 709 } else {
713 f2fs_balance_fs(sbi, true); 710 f2fs_balance_fs(sbi, true);
714 711
@@ -720,10 +717,8 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
720 goto out_whiteout; 717 goto out_whiteout;
721 } 718 }
722 719
723 if (old_dir_entry) { 720 if (old_dir_entry)
724 f2fs_i_links_write(new_dir, true); 721 f2fs_i_links_write(new_dir, true);
725 update_inode_page(new_dir);
726 }
727 722
728 /* 723 /*
729 * old entry and new entry can locate in the same inline 724 * old entry and new entry can locate in the same inline
@@ -771,13 +766,11 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
771 if (old_dir != new_dir && !whiteout) { 766 if (old_dir != new_dir && !whiteout) {
772 f2fs_set_link(old_inode, old_dir_entry, 767 f2fs_set_link(old_inode, old_dir_entry,
773 old_dir_page, new_dir); 768 old_dir_page, new_dir);
774 update_inode_page(old_inode);
775 } else { 769 } else {
776 f2fs_dentry_kunmap(old_inode, old_dir_page); 770 f2fs_dentry_kunmap(old_inode, old_dir_page);
777 f2fs_put_page(old_dir_page, 0); 771 f2fs_put_page(old_dir_page, 0);
778 } 772 }
779 f2fs_i_links_write(old_dir, false); 773 f2fs_i_links_write(old_dir, false);
780 update_inode_page(old_dir);
781 } 774 }
782 775
783 f2fs_unlock_op(sbi); 776 f2fs_unlock_op(sbi);
@@ -899,8 +892,6 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
899 file_lost_pino(old_inode); 892 file_lost_pino(old_inode);
900 up_write(&F2FS_I(old_inode)->i_sem); 893 up_write(&F2FS_I(old_inode)->i_sem);
901 894
902 update_inode_page(old_inode);
903
904 old_dir->i_ctime = CURRENT_TIME; 895 old_dir->i_ctime = CURRENT_TIME;
905 if (old_nlink) { 896 if (old_nlink) {
906 down_write(&F2FS_I(old_dir)->i_sem); 897 down_write(&F2FS_I(old_dir)->i_sem);
@@ -908,7 +899,6 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
908 up_write(&F2FS_I(old_dir)->i_sem); 899 up_write(&F2FS_I(old_dir)->i_sem);
909 } 900 }
910 mark_inode_dirty_sync(old_dir); 901 mark_inode_dirty_sync(old_dir);
911 update_inode_page(old_dir);
912 902
913 /* update directory entry info of new dir inode */ 903 /* update directory entry info of new dir inode */
914 f2fs_set_link(new_dir, new_entry, new_page, old_inode); 904 f2fs_set_link(new_dir, new_entry, new_page, old_inode);
@@ -917,8 +907,6 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
917 file_lost_pino(new_inode); 907 file_lost_pino(new_inode);
918 up_write(&F2FS_I(new_inode)->i_sem); 908 up_write(&F2FS_I(new_inode)->i_sem);
919 909
920 update_inode_page(new_inode);
921
922 new_dir->i_ctime = CURRENT_TIME; 910 new_dir->i_ctime = CURRENT_TIME;
923 if (new_nlink) { 911 if (new_nlink) {
924 down_write(&F2FS_I(new_dir)->i_sem); 912 down_write(&F2FS_I(new_dir)->i_sem);
@@ -926,7 +914,6 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
926 up_write(&F2FS_I(new_dir)->i_sem); 914 up_write(&F2FS_I(new_dir)->i_sem);
927 } 915 }
928 mark_inode_dirty_sync(new_dir); 916 mark_inode_dirty_sync(new_dir);
929 update_inode_page(new_dir);
930 917
931 f2fs_unlock_op(sbi); 918 f2fs_unlock_op(sbi);
932 919
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 1965351b644c..82f0f833151e 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -671,8 +671,6 @@ static void truncate_node(struct dnode_of_data *dn)
671 remove_orphan_inode(sbi, dn->nid); 671 remove_orphan_inode(sbi, dn->nid);
672 dec_valid_inode_count(sbi); 672 dec_valid_inode_count(sbi);
673 f2fs_inode_synced(dn->inode); 673 f2fs_inode_synced(dn->inode);
674 } else {
675 sync_inode_page(dn);
676 } 674 }
677invalidate: 675invalidate:
678 clear_node_page_dirty(dn->node_page); 676 clear_node_page_dirty(dn->node_page);
@@ -1050,14 +1048,8 @@ struct page *new_node_page(struct dnode_of_data *dn,
1050 if (f2fs_has_xattr_block(ofs)) 1048 if (f2fs_has_xattr_block(ofs))
1051 f2fs_i_xnid_write(dn->inode, dn->nid); 1049 f2fs_i_xnid_write(dn->inode, dn->nid);
1052 1050
1053 dn->node_page = page;
1054 if (ipage)
1055 update_inode(dn->inode, ipage);
1056 else
1057 sync_inode_page(dn);
1058 if (ofs == 0) 1051 if (ofs == 0)
1059 inc_valid_inode_count(sbi); 1052 inc_valid_inode_count(sbi);
1060
1061 return page; 1053 return page;
1062 1054
1063fail: 1055fail:
@@ -1176,24 +1168,6 @@ struct page *get_node_page_ra(struct page *parent, int start)
1176 return __get_node_page(sbi, nid, parent, start); 1168 return __get_node_page(sbi, nid, parent, start);
1177} 1169}
1178 1170
1179void sync_inode_page(struct dnode_of_data *dn)
1180{
1181 int ret = 0;
1182
1183 if (IS_INODE(dn->node_page) || dn->inode_page == dn->node_page) {
1184 ret = update_inode(dn->inode, dn->node_page);
1185 } else if (dn->inode_page) {
1186 if (!dn->inode_page_locked)
1187 lock_page(dn->inode_page);
1188 ret = update_inode(dn->inode, dn->inode_page);
1189 if (!dn->inode_page_locked)
1190 unlock_page(dn->inode_page);
1191 } else {
1192 ret = update_inode_page(dn->inode);
1193 }
1194 dn->node_changed = ret ? true: false;
1195}
1196
1197static void flush_inline_data(struct f2fs_sb_info *sbi, nid_t ino) 1171static void flush_inline_data(struct f2fs_sb_info *sbi, nid_t ino)
1198{ 1172{
1199 struct inode *inode; 1173 struct inode *inode;
@@ -2003,8 +1977,6 @@ recover_xnid:
2003 /* 3: update xattr blkaddr */ 1977 /* 3: update xattr blkaddr */
2004 refresh_sit_entry(sbi, NEW_ADDR, blkaddr); 1978 refresh_sit_entry(sbi, NEW_ADDR, blkaddr);
2005 set_node_addr(sbi, &ni, blkaddr, false); 1979 set_node_addr(sbi, &ni, blkaddr, false);
2006
2007 update_inode_page(inode);
2008} 1980}
2009 1981
2010int recover_inode_page(struct f2fs_sb_info *sbi, struct page *page) 1982int recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 2500b6a5daf0..68c433f17ab5 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -490,9 +490,6 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
490 } 490 }
491 } 491 }
492 492
493 if (IS_INODE(dn.node_page))
494 sync_inode_page(&dn);
495
496 copy_node_footer(dn.node_page, page); 493 copy_node_footer(dn.node_page, page);
497 fill_node_footer(dn.node_page, dn.nid, ni.ino, 494 fill_node_footer(dn.node_page, dn.nid, ni.ino,
498 ofs_of_node(page), false); 495 ofs_of_node(page), false);
diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index 1fe6366a60c1..8c0a3b36a917 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -299,6 +299,7 @@ static inline int write_all_xattrs(struct inode *inode, __u32 hsize,
299 if (ipage) { 299 if (ipage) {
300 inline_addr = inline_xattr_addr(ipage); 300 inline_addr = inline_xattr_addr(ipage);
301 f2fs_wait_on_page_writeback(ipage, NODE, true); 301 f2fs_wait_on_page_writeback(ipage, NODE, true);
302 set_page_dirty(ipage);
302 } else { 303 } else {
303 page = get_node_page(sbi, inode->i_ino); 304 page = get_node_page(sbi, inode->i_ino);
304 if (IS_ERR(page)) { 305 if (IS_ERR(page)) {
@@ -546,11 +547,6 @@ static int __f2fs_setxattr(struct inode *inode, int index,
546 if (index == F2FS_XATTR_INDEX_ENCRYPTION && 547 if (index == F2FS_XATTR_INDEX_ENCRYPTION &&
547 !strcmp(name, F2FS_XATTR_NAME_ENCRYPTION_CONTEXT)) 548 !strcmp(name, F2FS_XATTR_NAME_ENCRYPTION_CONTEXT))
548 f2fs_set_encrypted_inode(inode); 549 f2fs_set_encrypted_inode(inode);
549
550 if (ipage)
551 update_inode(inode, ipage);
552 else
553 update_inode_page(inode);
554 mark_inode_dirty_sync(inode); 550 mark_inode_dirty_sync(inode);
555exit: 551exit:
556 kzfree(base_addr); 552 kzfree(base_addr);