aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/f2fs/acl.c2
-rw-r--r--fs/f2fs/dir.c14
-rw-r--r--fs/f2fs/extent_cache.c24
-rw-r--r--fs/f2fs/f2fs.h58
-rw-r--r--fs/f2fs/file.c12
-rw-r--r--fs/f2fs/inline.c7
-rw-r--r--fs/f2fs/inode.c1
-rw-r--r--fs/f2fs/namei.c11
-rw-r--r--fs/f2fs/node.c6
-rw-r--r--fs/f2fs/xattr.c3
10 files changed, 92 insertions, 46 deletions
diff --git a/fs/f2fs/acl.c b/fs/f2fs/acl.c
index 1b2c20228300..6a414e75e705 100644
--- a/fs/f2fs/acl.c
+++ b/fs/f2fs/acl.c
@@ -384,6 +384,8 @@ int f2fs_init_acl(struct inode *inode, struct inode *dir, struct page *ipage,
384 if (error) 384 if (error)
385 return error; 385 return error;
386 386
387 mark_inode_dirty_sync(inode);
388
387 if (default_acl) { 389 if (default_acl) {
388 error = __f2fs_set_acl(inode, ACL_TYPE_DEFAULT, default_acl, 390 error = __f2fs_set_acl(inode, ACL_TYPE_DEFAULT, default_acl,
389 ipage); 391 ipage);
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index f8ca0f31271f..384d51cb77bf 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -243,8 +243,7 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
243 "Corrupted max_depth of %lu: %u", 243 "Corrupted max_depth of %lu: %u",
244 dir->i_ino, max_depth); 244 dir->i_ino, max_depth);
245 max_depth = MAX_DIR_HASH_DEPTH; 245 max_depth = MAX_DIR_HASH_DEPTH;
246 F2FS_I(dir)->i_current_depth = max_depth; 246 f2fs_i_depth_write(dir, max_depth);
247 mark_inode_dirty(dir);
248 } 247 }
249 248
250 for (level = 0; level < max_depth; level++) { 249 for (level = 0; level < max_depth; level++) {
@@ -303,9 +302,9 @@ void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
303 set_de_type(de, inode->i_mode); 302 set_de_type(de, inode->i_mode);
304 f2fs_dentry_kunmap(dir, page); 303 f2fs_dentry_kunmap(dir, page);
305 set_page_dirty(page); 304 set_page_dirty(page);
306 dir->i_mtime = dir->i_ctime = CURRENT_TIME;
307 mark_inode_dirty(dir);
308 305
306 dir->i_mtime = dir->i_ctime = CURRENT_TIME;
307 mark_inode_dirty_sync(dir);
309 f2fs_put_page(page, 1); 308 f2fs_put_page(page, 1);
310} 309}
311 310
@@ -462,10 +461,10 @@ void update_parent_metadata(struct inode *dir, struct inode *inode,
462 clear_inode_flag(inode, FI_NEW_INODE); 461 clear_inode_flag(inode, FI_NEW_INODE);
463 } 462 }
464 dir->i_mtime = dir->i_ctime = CURRENT_TIME; 463 dir->i_mtime = dir->i_ctime = CURRENT_TIME;
465 mark_inode_dirty(dir); 464 mark_inode_dirty_sync(dir);
466 465
467 if (F2FS_I(dir)->i_current_depth != current_depth) { 466 if (F2FS_I(dir)->i_current_depth != current_depth) {
468 F2FS_I(dir)->i_current_depth = current_depth; 467 f2fs_i_depth_write(dir, current_depth);
469 set_inode_flag(dir, FI_UPDATE_DIR); 468 set_inode_flag(dir, FI_UPDATE_DIR);
470 } 469 }
471 470
@@ -597,7 +596,7 @@ add_dentry:
597 596
598 if (inode) { 597 if (inode) {
599 /* we don't need to mark_inode_dirty now */ 598 /* we don't need to mark_inode_dirty now */
600 F2FS_I(inode)->i_pino = dir->i_ino; 599 f2fs_i_pino_write(inode, dir->i_ino);
601 update_inode(inode, page); 600 update_inode(inode, page);
602 f2fs_put_page(page, 1); 601 f2fs_put_page(page, 1);
603 } 602 }
@@ -730,6 +729,7 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
730 set_page_dirty(page); 729 set_page_dirty(page);
731 730
732 dir->i_ctime = dir->i_mtime = CURRENT_TIME; 731 dir->i_ctime = dir->i_mtime = CURRENT_TIME;
732 mark_inode_dirty_sync(dir);
733 733
734 if (inode) 734 if (inode)
735 f2fs_drop_nlink(dir, inode, NULL); 735 f2fs_drop_nlink(dir, inode, NULL);
diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
index 852a0b6f0600..d21dda607bf2 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -170,8 +170,10 @@ static void __drop_largest_extent(struct inode *inode,
170{ 170{
171 struct extent_info *largest = &F2FS_I(inode)->extent_tree->largest; 171 struct extent_info *largest = &F2FS_I(inode)->extent_tree->largest;
172 172
173 if (fofs < largest->fofs + largest->len && fofs + len > largest->fofs) 173 if (fofs < largest->fofs + largest->len && fofs + len > largest->fofs) {
174 largest->len = 0; 174 largest->len = 0;
175 mark_inode_dirty_sync(inode);
176 }
175} 177}
176 178
177/* return true, if inode page is changed */ 179/* return true, if inode page is changed */
@@ -335,11 +337,12 @@ lookup_neighbors:
335 return en; 337 return en;
336} 338}
337 339
338static struct extent_node *__try_merge_extent_node(struct f2fs_sb_info *sbi, 340static struct extent_node *__try_merge_extent_node(struct inode *inode,
339 struct extent_tree *et, struct extent_info *ei, 341 struct extent_tree *et, struct extent_info *ei,
340 struct extent_node *prev_ex, 342 struct extent_node *prev_ex,
341 struct extent_node *next_ex) 343 struct extent_node *next_ex)
342{ 344{
345 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
343 struct extent_node *en = NULL; 346 struct extent_node *en = NULL;
344 347
345 if (prev_ex && __is_back_mergeable(ei, &prev_ex->ei)) { 348 if (prev_ex && __is_back_mergeable(ei, &prev_ex->ei)) {
@@ -360,7 +363,7 @@ static struct extent_node *__try_merge_extent_node(struct f2fs_sb_info *sbi,
360 if (!en) 363 if (!en)
361 return NULL; 364 return NULL;
362 365
363 __try_update_largest_extent(et, en); 366 __try_update_largest_extent(inode, et, en);
364 367
365 spin_lock(&sbi->extent_lock); 368 spin_lock(&sbi->extent_lock);
366 if (!list_empty(&en->list)) { 369 if (!list_empty(&en->list)) {
@@ -371,11 +374,12 @@ static struct extent_node *__try_merge_extent_node(struct f2fs_sb_info *sbi,
371 return en; 374 return en;
372} 375}
373 376
374static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi, 377static struct extent_node *__insert_extent_tree(struct inode *inode,
375 struct extent_tree *et, struct extent_info *ei, 378 struct extent_tree *et, struct extent_info *ei,
376 struct rb_node **insert_p, 379 struct rb_node **insert_p,
377 struct rb_node *insert_parent) 380 struct rb_node *insert_parent)
378{ 381{
382 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
379 struct rb_node **p = &et->root.rb_node; 383 struct rb_node **p = &et->root.rb_node;
380 struct rb_node *parent = NULL; 384 struct rb_node *parent = NULL;
381 struct extent_node *en = NULL; 385 struct extent_node *en = NULL;
@@ -402,7 +406,7 @@ do_insert:
402 if (!en) 406 if (!en)
403 return NULL; 407 return NULL;
404 408
405 __try_update_largest_extent(et, en); 409 __try_update_largest_extent(inode, et, en);
406 410
407 /* update in global extent list */ 411 /* update in global extent list */
408 spin_lock(&sbi->extent_lock); 412 spin_lock(&sbi->extent_lock);
@@ -473,7 +477,7 @@ static unsigned int f2fs_update_extent_tree_range(struct inode *inode,
473 set_extent_info(&ei, end, 477 set_extent_info(&ei, end,
474 end - dei.fofs + dei.blk, 478 end - dei.fofs + dei.blk,
475 org_end - end); 479 org_end - end);
476 en1 = __insert_extent_tree(sbi, et, &ei, 480 en1 = __insert_extent_tree(inode, et, &ei,
477 NULL, NULL); 481 NULL, NULL);
478 next_en = en1; 482 next_en = en1;
479 } else { 483 } else {
@@ -494,7 +498,7 @@ static unsigned int f2fs_update_extent_tree_range(struct inode *inode,
494 } 498 }
495 499
496 if (parts) 500 if (parts)
497 __try_update_largest_extent(et, en); 501 __try_update_largest_extent(inode, et, en);
498 else 502 else
499 __release_extent_node(sbi, et, en); 503 __release_extent_node(sbi, et, en);
500 504
@@ -514,15 +518,15 @@ static unsigned int f2fs_update_extent_tree_range(struct inode *inode,
514 if (blkaddr) { 518 if (blkaddr) {
515 519
516 set_extent_info(&ei, fofs, blkaddr, len); 520 set_extent_info(&ei, fofs, blkaddr, len);
517 if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en)) 521 if (!__try_merge_extent_node(inode, et, &ei, prev_en, next_en))
518 __insert_extent_tree(sbi, et, &ei, 522 __insert_extent_tree(inode, et, &ei,
519 insert_p, insert_parent); 523 insert_p, insert_parent);
520 524
521 /* give up extent_cache, if split and small updates happen */ 525 /* give up extent_cache, if split and small updates happen */
522 if (dei.len >= 1 && 526 if (dei.len >= 1 &&
523 prev.len < F2FS_MIN_EXTENT_LEN && 527 prev.len < F2FS_MIN_EXTENT_LEN &&
524 et->largest.len < F2FS_MIN_EXTENT_LEN) { 528 et->largest.len < F2FS_MIN_EXTENT_LEN) {
525 et->largest.len = 0; 529 __drop_largest_extent(inode, 0, UINT_MAX);
526 set_inode_flag(inode, FI_NO_EXTENT); 530 set_inode_flag(inode, FI_NO_EXTENT);
527 } 531 }
528 } 532 }
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index d98aaf3829a6..0534d7a18b35 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -498,11 +498,13 @@ static inline bool __is_front_mergeable(struct extent_info *cur,
498 return __is_extent_mergeable(cur, front); 498 return __is_extent_mergeable(cur, front);
499} 499}
500 500
501static inline void __try_update_largest_extent(struct extent_tree *et, 501static inline void __try_update_largest_extent(struct inode *inode,
502 struct extent_node *en) 502 struct extent_tree *et, struct extent_node *en)
503{ 503{
504 if (en->ei.len > et->largest.len) 504 if (en->ei.len > et->largest.len) {
505 et->largest = en->ei; 505 et->largest = en->ei;
506 mark_inode_dirty_sync(inode);
507 }
506} 508}
507 509
508struct f2fs_nm_info { 510struct f2fs_nm_info {
@@ -1534,10 +1536,26 @@ enum {
1534 FI_DIRTY_FILE, /* indicate regular/symlink has dirty pages */ 1536 FI_DIRTY_FILE, /* indicate regular/symlink has dirty pages */
1535}; 1537};
1536 1538
1539static inline void __mark_inode_dirty_flag(struct inode *inode,
1540 int flag, bool set)
1541{
1542 switch (flag) {
1543 case FI_INLINE_XATTR:
1544 case FI_INLINE_DATA:
1545 case FI_INLINE_DENTRY:
1546 if (set)
1547 return;
1548 case FI_DATA_EXIST:
1549 case FI_INLINE_DOTS:
1550 mark_inode_dirty_sync(inode);
1551 }
1552}
1553
1537static inline void set_inode_flag(struct inode *inode, int flag) 1554static inline void set_inode_flag(struct inode *inode, int flag)
1538{ 1555{
1539 if (!test_bit(flag, &F2FS_I(inode)->flags)) 1556 if (!test_bit(flag, &F2FS_I(inode)->flags))
1540 set_bit(flag, &F2FS_I(inode)->flags); 1557 set_bit(flag, &F2FS_I(inode)->flags);
1558 __mark_inode_dirty_flag(inode, flag, true);
1541} 1559}
1542 1560
1543static inline int is_inode_flag_set(struct inode *inode, int flag) 1561static inline int is_inode_flag_set(struct inode *inode, int flag)
@@ -1549,12 +1567,14 @@ static inline void clear_inode_flag(struct inode *inode, int flag)
1549{ 1567{
1550 if (test_bit(flag, &F2FS_I(inode)->flags)) 1568 if (test_bit(flag, &F2FS_I(inode)->flags))
1551 clear_bit(flag, &F2FS_I(inode)->flags); 1569 clear_bit(flag, &F2FS_I(inode)->flags);
1570 __mark_inode_dirty_flag(inode, flag, false);
1552} 1571}
1553 1572
1554static inline void set_acl_inode(struct inode *inode, umode_t mode) 1573static inline void set_acl_inode(struct inode *inode, umode_t mode)
1555{ 1574{
1556 F2FS_I(inode)->i_acl_mode = mode; 1575 F2FS_I(inode)->i_acl_mode = mode;
1557 set_inode_flag(inode, FI_ACL_MODE); 1576 set_inode_flag(inode, FI_ACL_MODE);
1577 mark_inode_dirty_sync(inode);
1558} 1578}
1559 1579
1560static inline void f2fs_i_links_write(struct inode *inode, bool inc) 1580static inline void f2fs_i_links_write(struct inode *inode, bool inc)
@@ -1583,18 +1603,38 @@ static inline void f2fs_i_size_write(struct inode *inode, loff_t i_size)
1583 mark_inode_dirty_sync(inode); 1603 mark_inode_dirty_sync(inode);
1584} 1604}
1585 1605
1606static inline void f2fs_i_depth_write(struct inode *inode, unsigned int depth)
1607{
1608 F2FS_I(inode)->i_current_depth = depth;
1609 mark_inode_dirty_sync(inode);
1610}
1611
1612static inline void f2fs_i_xnid_write(struct inode *inode, nid_t xnid)
1613{
1614 F2FS_I(inode)->i_xattr_nid = xnid;
1615 mark_inode_dirty_sync(inode);
1616}
1617
1618static inline void f2fs_i_pino_write(struct inode *inode, nid_t pino)
1619{
1620 F2FS_I(inode)->i_pino = pino;
1621 mark_inode_dirty_sync(inode);
1622}
1623
1586static inline void get_inline_info(struct inode *inode, struct f2fs_inode *ri) 1624static inline void get_inline_info(struct inode *inode, struct f2fs_inode *ri)
1587{ 1625{
1626 struct f2fs_inode_info *fi = F2FS_I(inode);
1627
1588 if (ri->i_inline & F2FS_INLINE_XATTR) 1628 if (ri->i_inline & F2FS_INLINE_XATTR)
1589 set_inode_flag(inode, FI_INLINE_XATTR); 1629 set_bit(FI_INLINE_XATTR, &fi->flags);
1590 if (ri->i_inline & F2FS_INLINE_DATA) 1630 if (ri->i_inline & F2FS_INLINE_DATA)
1591 set_inode_flag(inode, FI_INLINE_DATA); 1631 set_bit(FI_INLINE_DATA, &fi->flags);
1592 if (ri->i_inline & F2FS_INLINE_DENTRY) 1632 if (ri->i_inline & F2FS_INLINE_DENTRY)
1593 set_inode_flag(inode, FI_INLINE_DENTRY); 1633 set_bit(FI_INLINE_DENTRY, &fi->flags);
1594 if (ri->i_inline & F2FS_DATA_EXIST) 1634 if (ri->i_inline & F2FS_DATA_EXIST)
1595 set_inode_flag(inode, FI_DATA_EXIST); 1635 set_bit(FI_DATA_EXIST, &fi->flags);
1596 if (ri->i_inline & F2FS_INLINE_DOTS) 1636 if (ri->i_inline & F2FS_INLINE_DOTS)
1597 set_inode_flag(inode, FI_INLINE_DOTS); 1637 set_bit(FI_INLINE_DOTS, &fi->flags);
1598} 1638}
1599 1639
1600static inline void set_raw_inline(struct inode *inode, struct f2fs_inode *ri) 1640static inline void set_raw_inline(struct inode *inode, struct f2fs_inode *ri)
@@ -1706,11 +1746,13 @@ static inline int is_file(struct inode *inode, int type)
1706static inline void set_file(struct inode *inode, int type) 1746static inline void set_file(struct inode *inode, int type)
1707{ 1747{
1708 F2FS_I(inode)->i_advise |= type; 1748 F2FS_I(inode)->i_advise |= type;
1749 mark_inode_dirty_sync(inode);
1709} 1750}
1710 1751
1711static inline void clear_file(struct inode *inode, int type) 1752static inline void clear_file(struct inode *inode, int type)
1712{ 1753{
1713 F2FS_I(inode)->i_advise &= ~type; 1754 F2FS_I(inode)->i_advise &= ~type;
1755 mark_inode_dirty_sync(inode);
1714} 1756}
1715 1757
1716static inline int f2fs_readonly(struct super_block *sb) 1758static inline int f2fs_readonly(struct super_block *sb)
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index d0f42587309f..c5606b1e1a89 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -171,11 +171,10 @@ static void try_to_fix_pino(struct inode *inode)
171 fi->xattr_ver = 0; 171 fi->xattr_ver = 0;
172 if (file_wrong_pino(inode) && inode->i_nlink == 1 && 172 if (file_wrong_pino(inode) && inode->i_nlink == 1 &&
173 get_parent_ino(inode, &pino)) { 173 get_parent_ino(inode, &pino)) {
174 fi->i_pino = pino; 174 f2fs_i_pino_write(inode, pino);
175 file_got_pino(inode); 175 file_got_pino(inode);
176 up_write(&fi->i_sem); 176 up_write(&fi->i_sem);
177 177
178 mark_inode_dirty_sync(inode);
179 f2fs_write_inode(inode, NULL); 178 f2fs_write_inode(inode, NULL);
180 } else { 179 } else {
181 up_write(&fi->i_sem); 180 up_write(&fi->i_sem);
@@ -636,7 +635,7 @@ int f2fs_truncate(struct inode *inode, bool lock)
636 return err; 635 return err;
637 636
638 inode->i_mtime = inode->i_ctime = CURRENT_TIME; 637 inode->i_mtime = inode->i_ctime = CURRENT_TIME;
639 mark_inode_dirty(inode); 638 mark_inode_dirty_sync(inode);
640 return 0; 639 return 0;
641} 640}
642 641
@@ -726,7 +725,7 @@ int f2fs_setattr(struct dentry *dentry, struct iattr *attr)
726 } 725 }
727 } 726 }
728 727
729 mark_inode_dirty(inode); 728 mark_inode_dirty_sync(inode);
730 return err; 729 return err;
731} 730}
732 731
@@ -1279,7 +1278,7 @@ static long f2fs_fallocate(struct file *file, int mode,
1279 1278
1280 if (!ret) { 1279 if (!ret) {
1281 inode->i_mtime = inode->i_ctime = CURRENT_TIME; 1280 inode->i_mtime = inode->i_ctime = CURRENT_TIME;
1282 mark_inode_dirty(inode); 1281 mark_inode_dirty_sync(inode);
1283 f2fs_update_time(F2FS_I_SB(inode), REQ_TIME); 1282 f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
1284 } 1283 }
1285 1284
@@ -1370,9 +1369,8 @@ static int f2fs_ioc_setflags(struct file *filp, unsigned long arg)
1370 fi->i_flags = flags; 1369 fi->i_flags = flags;
1371 inode_unlock(inode); 1370 inode_unlock(inode);
1372 1371
1373 f2fs_set_inode_flags(inode);
1374 inode->i_ctime = CURRENT_TIME; 1372 inode->i_ctime = CURRENT_TIME;
1375 mark_inode_dirty(inode); 1373 f2fs_set_inode_flags(inode);
1376out: 1374out:
1377 mnt_drop_write_file(filp); 1375 mnt_drop_write_file(filp);
1378 return ret; 1376 return ret;
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 7a9bc442dd77..4bc025c29f82 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -400,7 +400,7 @@ static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
400 stat_dec_inline_dir(dir); 400 stat_dec_inline_dir(dir);
401 clear_inode_flag(dir, FI_INLINE_DENTRY); 401 clear_inode_flag(dir, FI_INLINE_DENTRY);
402 402
403 F2FS_I(dir)->i_current_depth = 1; 403 f2fs_i_depth_write(dir, 1);
404 if (i_size_read(dir) < PAGE_SIZE) { 404 if (i_size_read(dir) < PAGE_SIZE) {
405 f2fs_i_size_write(dir, PAGE_SIZE); 405 f2fs_i_size_write(dir, PAGE_SIZE);
406 set_inode_flag(dir, FI_UPDATE_DIR); 406 set_inode_flag(dir, FI_UPDATE_DIR);
@@ -492,7 +492,7 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
492recover: 492recover:
493 lock_page(ipage); 493 lock_page(ipage);
494 memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA); 494 memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA);
495 F2FS_I(dir)->i_current_depth = 0; 495 f2fs_i_depth_write(dir, 0);
496 f2fs_i_size_write(dir, MAX_INLINE_DATA); 496 f2fs_i_size_write(dir, MAX_INLINE_DATA);
497 update_inode(dir, ipage); 497 update_inode(dir, ipage);
498 f2fs_put_page(ipage, 1); 498 f2fs_put_page(ipage, 1);
@@ -558,7 +558,7 @@ int f2fs_add_inline_entry(struct inode *dir, const struct qstr *name,
558 558
559 /* we don't need to mark_inode_dirty now */ 559 /* we don't need to mark_inode_dirty now */
560 if (inode) { 560 if (inode) {
561 F2FS_I(inode)->i_pino = dir->i_ino; 561 f2fs_i_pino_write(inode, dir->i_ino);
562 update_inode(inode, page); 562 update_inode(inode, page);
563 f2fs_put_page(page, 1); 563 f2fs_put_page(page, 1);
564 } 564 }
@@ -597,6 +597,7 @@ void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page,
597 set_page_dirty(page); 597 set_page_dirty(page);
598 598
599 dir->i_ctime = dir->i_mtime = CURRENT_TIME; 599 dir->i_ctime = dir->i_mtime = CURRENT_TIME;
600 mark_inode_dirty_sync(dir);
600 601
601 if (inode) 602 if (inode)
602 f2fs_drop_nlink(dir, inode, page); 603 f2fs_drop_nlink(dir, inode, page);
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 62d8c9052f9b..34aa0949e48c 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -35,6 +35,7 @@ void f2fs_set_inode_flags(struct inode *inode)
35 new_fl |= S_DIRSYNC; 35 new_fl |= S_DIRSYNC;
36 inode_set_flags(inode, new_fl, 36 inode_set_flags(inode, new_fl,
37 S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC); 37 S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC);
38 mark_inode_dirty_sync(inode);
38} 39}
39 40
40static void __get_inode_rdev(struct inode *inode, struct f2fs_inode *ri) 41static void __get_inode_rdev(struct inode *inode, struct f2fs_inode *ri)
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index af7c75ab9343..f2b2c4068648 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -76,7 +76,6 @@ static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode)
76 stat_inc_inline_dir(inode); 76 stat_inc_inline_dir(inode);
77 77
78 trace_f2fs_new_inode(inode, 0); 78 trace_f2fs_new_inode(inode, 0);
79 mark_inode_dirty(inode);
80 return inode; 79 return inode;
81 80
82fail: 81fail:
@@ -247,10 +246,8 @@ static int __recover_dot_dentries(struct inode *dir, nid_t pino)
247 err = __f2fs_add_link(dir, &dotdot, NULL, pino, S_IFDIR); 246 err = __f2fs_add_link(dir, &dotdot, NULL, pino, S_IFDIR);
248 } 247 }
249out: 248out:
250 if (!err) { 249 if (!err)
251 clear_inode_flag(dir, FI_INLINE_DOTS); 250 clear_inode_flag(dir, FI_INLINE_DOTS);
252 mark_inode_dirty(dir);
253 }
254 251
255 f2fs_unlock_op(sbi); 252 f2fs_unlock_op(sbi);
256 return err; 253 return err;
@@ -756,7 +753,7 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
756 up_write(&F2FS_I(old_inode)->i_sem); 753 up_write(&F2FS_I(old_inode)->i_sem);
757 754
758 old_inode->i_ctime = CURRENT_TIME; 755 old_inode->i_ctime = CURRENT_TIME;
759 mark_inode_dirty(old_inode); 756 mark_inode_dirty_sync(old_inode);
760 757
761 f2fs_delete_entry(old_entry, old_page, old_dir, NULL); 758 f2fs_delete_entry(old_entry, old_page, old_dir, NULL);
762 759
@@ -910,7 +907,7 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
910 f2fs_i_links_write(old_dir, old_nlink > 0); 907 f2fs_i_links_write(old_dir, old_nlink > 0);
911 up_write(&F2FS_I(old_dir)->i_sem); 908 up_write(&F2FS_I(old_dir)->i_sem);
912 } 909 }
913 mark_inode_dirty(old_dir); 910 mark_inode_dirty_sync(old_dir);
914 update_inode_page(old_dir); 911 update_inode_page(old_dir);
915 912
916 /* update directory entry info of new dir inode */ 913 /* update directory entry info of new dir inode */
@@ -928,7 +925,7 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
928 f2fs_i_links_write(new_dir, new_nlink > 0); 925 f2fs_i_links_write(new_dir, new_nlink > 0);
929 up_write(&F2FS_I(new_dir)->i_sem); 926 up_write(&F2FS_I(new_dir)->i_sem);
930 } 927 }
931 mark_inode_dirty(new_dir); 928 mark_inode_dirty_sync(new_dir);
932 update_inode_page(new_dir); 929 update_inode_page(new_dir);
933 930
934 f2fs_unlock_op(sbi); 931 f2fs_unlock_op(sbi);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 8001020f7762..0635304c50ac 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -953,7 +953,7 @@ int truncate_xattr_node(struct inode *inode, struct page *page)
953 if (IS_ERR(npage)) 953 if (IS_ERR(npage))
954 return PTR_ERR(npage); 954 return PTR_ERR(npage);
955 955
956 F2FS_I(inode)->i_xattr_nid = 0; 956 f2fs_i_xnid_write(inode, 0);
957 957
958 /* need to do checkpoint during fsync */ 958 /* need to do checkpoint during fsync */
959 F2FS_I(inode)->xattr_ver = cur_cp_version(F2FS_CKPT(sbi)); 959 F2FS_I(inode)->xattr_ver = cur_cp_version(F2FS_CKPT(sbi));
@@ -1047,7 +1047,7 @@ struct page *new_node_page(struct dnode_of_data *dn,
1047 dn->node_changed = true; 1047 dn->node_changed = true;
1048 1048
1049 if (f2fs_has_xattr_block(ofs)) 1049 if (f2fs_has_xattr_block(ofs))
1050 F2FS_I(dn->inode)->i_xattr_nid = dn->nid; 1050 f2fs_i_xnid_write(dn->inode, dn->nid);
1051 1051
1052 dn->node_page = page; 1052 dn->node_page = page;
1053 if (ipage) 1053 if (ipage)
@@ -1997,7 +1997,7 @@ recover_xnid:
1997 get_node_info(sbi, new_xnid, &ni); 1997 get_node_info(sbi, new_xnid, &ni);
1998 ni.ino = inode->i_ino; 1998 ni.ino = inode->i_ino;
1999 set_node_addr(sbi, &ni, NEW_ADDR, false); 1999 set_node_addr(sbi, &ni, NEW_ADDR, false);
2000 F2FS_I(inode)->i_xattr_nid = new_xnid; 2000 f2fs_i_xnid_write(inode, new_xnid);
2001 2001
2002 /* 3: update xattr blkaddr */ 2002 /* 3: update xattr blkaddr */
2003 refresh_sit_entry(sbi, NEW_ADDR, blkaddr); 2003 refresh_sit_entry(sbi, NEW_ADDR, blkaddr);
diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index ca12d4b051f7..1fe6366a60c1 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -106,7 +106,7 @@ static int f2fs_xattr_advise_set(const struct xattr_handler *handler,
106 return -EINVAL; 106 return -EINVAL;
107 107
108 F2FS_I(inode)->i_advise |= *(char *)value; 108 F2FS_I(inode)->i_advise |= *(char *)value;
109 mark_inode_dirty(inode); 109 mark_inode_dirty_sync(inode);
110 return 0; 110 return 0;
111} 111}
112 112
@@ -551,6 +551,7 @@ static int __f2fs_setxattr(struct inode *inode, int index,
551 update_inode(inode, ipage); 551 update_inode(inode, ipage);
552 else 552 else
553 update_inode_page(inode); 553 update_inode_page(inode);
554 mark_inode_dirty_sync(inode);
554exit: 555exit:
555 kzfree(base_addr); 556 kzfree(base_addr);
556 return error; 557 return error;