diff options
-rw-r--r-- | fs/f2fs/acl.c | 2 | ||||
-rw-r--r-- | fs/f2fs/dir.c | 14 | ||||
-rw-r--r-- | fs/f2fs/extent_cache.c | 24 | ||||
-rw-r--r-- | fs/f2fs/f2fs.h | 58 | ||||
-rw-r--r-- | fs/f2fs/file.c | 12 | ||||
-rw-r--r-- | fs/f2fs/inline.c | 7 | ||||
-rw-r--r-- | fs/f2fs/inode.c | 1 | ||||
-rw-r--r-- | fs/f2fs/namei.c | 11 | ||||
-rw-r--r-- | fs/f2fs/node.c | 6 | ||||
-rw-r--r-- | fs/f2fs/xattr.c | 3 |
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 | ||
338 | static struct extent_node *__try_merge_extent_node(struct f2fs_sb_info *sbi, | 340 | static 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 | ||
374 | static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi, | 377 | static 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 | ||
501 | static inline void __try_update_largest_extent(struct extent_tree *et, | 501 | static 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 | ||
508 | struct f2fs_nm_info { | 510 | struct 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 | ||
1539 | static 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 | |||
1537 | static inline void set_inode_flag(struct inode *inode, int flag) | 1554 | static 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 | ||
1543 | static inline int is_inode_flag_set(struct inode *inode, int flag) | 1561 | static 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 | ||
1554 | static inline void set_acl_inode(struct inode *inode, umode_t mode) | 1573 | static 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 | ||
1560 | static inline void f2fs_i_links_write(struct inode *inode, bool inc) | 1580 | static 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 | ||
1606 | static 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 | |||
1612 | static 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 | |||
1618 | static 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 | |||
1586 | static inline void get_inline_info(struct inode *inode, struct f2fs_inode *ri) | 1624 | static 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 | ||
1600 | static inline void set_raw_inline(struct inode *inode, struct f2fs_inode *ri) | 1640 | static 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) | |||
1706 | static inline void set_file(struct inode *inode, int type) | 1746 | static 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 | ||
1711 | static inline void clear_file(struct inode *inode, int type) | 1752 | static 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 | ||
1716 | static inline int f2fs_readonly(struct super_block *sb) | 1758 | static 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); |
1376 | out: | 1374 | out: |
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, | |||
492 | recover: | 492 | recover: |
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 | ||
40 | static void __get_inode_rdev(struct inode *inode, struct f2fs_inode *ri) | 41 | static 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 | ||
82 | fail: | 81 | fail: |
@@ -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 | } |
249 | out: | 248 | out: |
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); | ||
554 | exit: | 555 | exit: |
555 | kzfree(base_addr); | 556 | kzfree(base_addr); |
556 | return error; | 557 | return error; |