Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'for-f2fs-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs

Pull f2fs updates from Jaegeuk Kim:
"The major change in this version is mitigating cpu overheads on write
paths by replacing redundant inode page updates with mark_inode_dirty
calls. And we tried to reduce lock contentions as well to improve
filesystem scalability. Other feature is setting F2FS automatically
when detecting host-managed SMR.

Enhancements:
- ioctl to move a range of data between files
- inject orphan inode errors
- avoid flush commands congestion
- support lazytime

Bug fixes:
- return proper results for some dentry operations
- fix deadlock in add_link failure
- disable extent_cache for fcollapse/finsert"

* tag 'for-f2fs-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs: (68 commits)
f2fs: clean up coding style and redundancy
f2fs: get victim segment again after new cp
f2fs: handle error case with f2fs_bug_on
f2fs: avoid data race when deciding checkpoin in f2fs_sync_file
f2fs: support an ioctl to move a range of data blocks
f2fs: fix to report error number of f2fs_find_entry
f2fs: avoid memory allocation failure due to a long length
f2fs: reset default idle interval value
f2fs: use blk_plug in all the possible paths
f2fs: fix to avoid data update racing between GC and DIO
f2fs: add maximum prefree segments
f2fs: disable extent_cache for fcollapse/finsert inodes
f2fs: refactor __exchange_data_block for speed up
f2fs: fix ERR_PTR returned by bio
f2fs: avoid mark_inode_dirty
f2fs: move i_size_write in f2fs_write_end
f2fs: fix to avoid redundant discard during fstrim
f2fs: avoid mismatching block range for discard
f2fs: fix incorrect f_bfree calculation in ->statfs
f2fs: use percpu_rw_semaphore
...

+1392 -755
+6 -1
Documentation/filesystems/f2fs.txt
··· 109 109 disable_roll_forward Disable the roll-forward recovery routine 110 110 norecovery Disable the roll-forward recovery routine, mounted read- 111 111 only (i.e., -o ro,disable_roll_forward) 112 - discard Issue discard/TRIM commands when a segment is cleaned. 112 + discard/nodiscard Enable/disable real-time discard in f2fs, if discard is 113 + enabled, f2fs will issue discard/TRIM commands when a 114 + segment is cleaned. 113 115 no_heap Disable heap-style segment allocation which finds free 114 116 segments for data from the beginning of main area, while 115 117 for node from the end of main area. ··· 153 151 enabled by default. 154 152 data_flush Enable data flushing before checkpoint in order to 155 153 persist data of regular and symlink. 154 + mode=%s Control block allocation mode which supports "adaptive" 155 + and "lfs". In "lfs" mode, there should be no random 156 + writes towards main area. 156 157 157 158 ================================================================================ 158 159 DEBUGFS ENTRIES
+5 -4
fs/f2fs/acl.c
··· 201 201 static int __f2fs_set_acl(struct inode *inode, int type, 202 202 struct posix_acl *acl, struct page *ipage) 203 203 { 204 - struct f2fs_inode_info *fi = F2FS_I(inode); 205 204 int name_index; 206 205 void *value = NULL; 207 206 size_t size = 0; ··· 213 214 error = posix_acl_equiv_mode(acl, &inode->i_mode); 214 215 if (error < 0) 215 216 return error; 216 - set_acl_inode(fi, inode->i_mode); 217 + set_acl_inode(inode, inode->i_mode); 217 218 if (error == 0) 218 219 acl = NULL; 219 220 } ··· 232 233 if (acl) { 233 234 value = f2fs_acl_to_disk(acl, &size); 234 235 if (IS_ERR(value)) { 235 - clear_inode_flag(fi, FI_ACL_MODE); 236 + clear_inode_flag(inode, FI_ACL_MODE); 236 237 return (int)PTR_ERR(value); 237 238 } 238 239 } ··· 243 244 if (!error) 244 245 set_cached_acl(inode, type, acl); 245 246 246 - clear_inode_flag(fi, FI_ACL_MODE); 247 + clear_inode_flag(inode, FI_ACL_MODE); 247 248 return error; 248 249 } 249 250 ··· 383 384 error = f2fs_acl_create(dir, &inode->i_mode, &default_acl, &acl, dpage); 384 385 if (error) 385 386 return error; 387 + 388 + f2fs_mark_inode_dirty_sync(inode); 386 389 387 390 if (default_acl) { 388 391 error = __f2fs_set_acl(inode, ACL_TYPE_DEFAULT, default_acl,
+1 -1
fs/f2fs/acl.h
··· 37 37 #ifdef CONFIG_F2FS_FS_POSIX_ACL 38 38 39 39 extern struct posix_acl *f2fs_get_acl(struct inode *, int); 40 - extern int f2fs_set_acl(struct inode *inode, struct posix_acl *acl, int type); 40 + extern int f2fs_set_acl(struct inode *, struct posix_acl *, int); 41 41 extern int f2fs_init_acl(struct inode *, struct inode *, struct page *, 42 42 struct page *); 43 43 #else
+60 -20
fs/f2fs/checkpoint.c
··· 48 48 goto repeat; 49 49 } 50 50 f2fs_wait_on_page_writeback(page, META, true); 51 - SetPageUptodate(page); 51 + if (!PageUptodate(page)) 52 + SetPageUptodate(page); 52 53 return page; 53 54 } 54 55 ··· 267 266 struct writeback_control *wbc) 268 267 { 269 268 struct f2fs_sb_info *sbi = F2FS_M_SB(mapping); 269 + struct blk_plug plug; 270 270 long diff, written; 271 271 272 272 /* collect a number of dirty meta pages and write together */ ··· 280 278 /* if mounting is failed, skip writing node pages */ 281 279 mutex_lock(&sbi->cp_mutex); 282 280 diff = nr_pages_to_write(sbi, META, wbc); 281 + blk_start_plug(&plug); 283 282 written = sync_meta_pages(sbi, META, wbc->nr_to_write); 283 + blk_finish_plug(&plug); 284 284 mutex_unlock(&sbi->cp_mutex); 285 285 wbc->nr_to_write = max((long)0, wbc->nr_to_write - written - diff); 286 286 return 0; ··· 370 366 { 371 367 trace_f2fs_set_page_dirty(page, META); 372 368 373 - SetPageUptodate(page); 369 + if (!PageUptodate(page)) 370 + SetPageUptodate(page); 374 371 if (!PageDirty(page)) { 375 - __set_page_dirty_nobuffers(page); 372 + f2fs_set_page_dirty_nobuffers(page); 376 373 inc_page_count(F2FS_P_SB(page), F2FS_DIRTY_META); 377 374 SetPagePrivate(page); 378 375 f2fs_trace_pid(page); ··· 515 510 spin_unlock(&im->ino_lock); 516 511 } 517 512 518 - void add_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino) 513 + void add_orphan_inode(struct inode *inode) 519 514 { 520 515 /* add new orphan ino entry into list */ 521 - __add_ino_entry(sbi, ino, ORPHAN_INO); 516 + __add_ino_entry(F2FS_I_SB(inode), inode->i_ino, ORPHAN_INO); 517 + update_inode_page(inode); 522 518 } 523 519 524 520 void remove_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino) ··· 767 761 static void __add_dirty_inode(struct inode *inode, enum inode_type type) 768 762 { 769 763 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 770 - struct f2fs_inode_info *fi = F2FS_I(inode); 771 764 int flag = (type == DIR_INODE) ? FI_DIRTY_DIR : FI_DIRTY_FILE; 772 765 773 - if (is_inode_flag_set(fi, flag)) 766 + if (is_inode_flag_set(inode, flag)) 774 767 return; 775 768 776 - set_inode_flag(fi, flag); 777 - list_add_tail(&fi->dirty_list, &sbi->inode_list[type]); 769 + set_inode_flag(inode, flag); 770 + list_add_tail(&F2FS_I(inode)->dirty_list, &sbi->inode_list[type]); 778 771 stat_inc_dirty_inode(sbi, type); 779 772 } 780 773 781 774 static void __remove_dirty_inode(struct inode *inode, enum inode_type type) 782 775 { 783 - struct f2fs_inode_info *fi = F2FS_I(inode); 784 776 int flag = (type == DIR_INODE) ? FI_DIRTY_DIR : FI_DIRTY_FILE; 785 777 786 - if (get_dirty_pages(inode) || 787 - !is_inode_flag_set(F2FS_I(inode), flag)) 778 + if (get_dirty_pages(inode) || !is_inode_flag_set(inode, flag)) 788 779 return; 789 780 790 - list_del_init(&fi->dirty_list); 791 - clear_inode_flag(fi, flag); 781 + list_del_init(&F2FS_I(inode)->dirty_list); 782 + clear_inode_flag(inode, flag); 792 783 stat_dec_dirty_inode(F2FS_I_SB(inode), type); 793 784 } 794 785 ··· 798 795 !S_ISLNK(inode->i_mode)) 799 796 return; 800 797 801 - if (type != FILE_INODE || test_opt(sbi, DATA_FLUSH)) { 802 - spin_lock(&sbi->inode_lock[type]); 798 + spin_lock(&sbi->inode_lock[type]); 799 + if (type != FILE_INODE || test_opt(sbi, DATA_FLUSH)) 803 800 __add_dirty_inode(inode, type); 804 - spin_unlock(&sbi->inode_lock[type]); 805 - } 806 - 807 801 inode_inc_dirty_pages(inode); 802 + spin_unlock(&sbi->inode_lock[type]); 803 + 808 804 SetPagePrivate(page); 809 805 f2fs_trace_pid(page); 810 806 } ··· 866 864 goto retry; 867 865 } 868 866 867 + int f2fs_sync_inode_meta(struct f2fs_sb_info *sbi) 868 + { 869 + struct list_head *head = &sbi->inode_list[DIRTY_META]; 870 + struct inode *inode; 871 + struct f2fs_inode_info *fi; 872 + s64 total = get_pages(sbi, F2FS_DIRTY_IMETA); 873 + 874 + while (total--) { 875 + if (unlikely(f2fs_cp_error(sbi))) 876 + return -EIO; 877 + 878 + spin_lock(&sbi->inode_lock[DIRTY_META]); 879 + if (list_empty(head)) { 880 + spin_unlock(&sbi->inode_lock[DIRTY_META]); 881 + return 0; 882 + } 883 + fi = list_entry(head->next, struct f2fs_inode_info, 884 + gdirty_list); 885 + inode = igrab(&fi->vfs_inode); 886 + spin_unlock(&sbi->inode_lock[DIRTY_META]); 887 + if (inode) { 888 + update_inode_page(inode); 889 + iput(inode); 890 + } 891 + }; 892 + return 0; 893 + } 894 + 869 895 /* 870 896 * Freeze all the FS-operations for checkpoint. 871 897 */ ··· 915 885 if (get_pages(sbi, F2FS_DIRTY_DENTS)) { 916 886 f2fs_unlock_all(sbi); 917 887 err = sync_dirty_inodes(sbi, DIR_INODE); 888 + if (err) 889 + goto out; 890 + goto retry_flush_dents; 891 + } 892 + 893 + if (get_pages(sbi, F2FS_DIRTY_IMETA)) { 894 + f2fs_unlock_all(sbi); 895 + err = f2fs_sync_inode_meta(sbi); 918 896 if (err) 919 897 goto out; 920 898 goto retry_flush_dents; ··· 952 914 static void unblock_operations(struct f2fs_sb_info *sbi) 953 915 { 954 916 up_write(&sbi->node_write); 917 + 918 + build_free_nids(sbi); 955 919 f2fs_unlock_all(sbi); 956 920 } 957 921 ··· 994 954 * This avoids to conduct wrong roll-forward operations and uses 995 955 * metapages, so should be called prior to sync_meta_pages below. 996 956 */ 997 - if (discard_next_dnode(sbi, discard_blk)) 957 + if (!test_opt(sbi, LFS) && discard_next_dnode(sbi, discard_blk)) 998 958 invalidate = true; 999 959 1000 960 /* Flush all the NAT/SIT pages */
+164 -151
fs/f2fs/data.c
··· 19 19 #include <linux/bio.h> 20 20 #include <linux/prefetch.h> 21 21 #include <linux/uio.h> 22 + #include <linux/mm.h> 23 + #include <linux/memcontrol.h> 22 24 #include <linux/cleancache.h> 23 25 24 26 #include "f2fs.h" ··· 47 45 struct page *page = bvec->bv_page; 48 46 49 47 if (!bio->bi_error) { 50 - SetPageUptodate(page); 48 + if (!PageUptodate(page)) 49 + SetPageUptodate(page); 51 50 } else { 52 51 ClearPageUptodate(page); 53 52 SetPageError(page); ··· 100 97 return bio; 101 98 } 102 99 103 - static inline void __submit_bio(struct f2fs_sb_info *sbi, struct bio *bio) 100 + static inline void __submit_bio(struct f2fs_sb_info *sbi, 101 + struct bio *bio, enum page_type type) 104 102 { 105 - if (!is_read_io(bio_op(bio))) 103 + if (!is_read_io(bio_op(bio))) { 106 104 atomic_inc(&sbi->nr_wb_bios); 105 + if (f2fs_sb_mounted_hmsmr(sbi->sb) && 106 + current->plug && (type == DATA || type == NODE)) 107 + blk_finish_plug(current->plug); 108 + } 107 109 submit_bio(bio); 108 110 } 109 111 ··· 126 118 127 119 bio_set_op_attrs(io->bio, fio->op, fio->op_flags); 128 120 129 - __submit_bio(io->sbi, io->bio); 121 + __submit_bio(io->sbi, io->bio, fio->type); 130 122 io->bio = NULL; 131 123 } 132 124 ··· 248 240 bio->bi_rw = fio->op_flags; 249 241 bio_set_op_attrs(bio, fio->op, fio->op_flags); 250 242 251 - __submit_bio(fio->sbi, bio); 243 + __submit_bio(fio->sbi, bio, fio->type); 252 244 return 0; 253 245 } 254 246 ··· 334 326 if (!count) 335 327 return 0; 336 328 337 - if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))) 329 + if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC))) 338 330 return -EPERM; 339 331 if (unlikely(!inc_valid_block_count(sbi, dn->inode, &count))) 340 332 return -ENOSPC; ··· 356 348 357 349 if (set_page_dirty(dn->node_page)) 358 350 dn->node_changed = true; 359 - 360 - mark_inode_dirty(dn->inode); 361 - sync_inode_page(dn); 362 351 return 0; 363 352 } 364 353 ··· 451 446 */ 452 447 if (dn.data_blkaddr == NEW_ADDR) { 453 448 zero_user_segment(page, 0, PAGE_SIZE); 454 - SetPageUptodate(page); 449 + if (!PageUptodate(page)) 450 + SetPageUptodate(page); 455 451 unlock_page(page); 456 452 return page; 457 453 } ··· 511 505 512 506 /* wait for read completion */ 513 507 lock_page(page); 514 - if (unlikely(!PageUptodate(page))) { 515 - f2fs_put_page(page, 1); 516 - return ERR_PTR(-EIO); 517 - } 518 508 if (unlikely(page->mapping != mapping)) { 519 509 f2fs_put_page(page, 1); 520 510 goto repeat; 511 + } 512 + if (unlikely(!PageUptodate(page))) { 513 + f2fs_put_page(page, 1); 514 + return ERR_PTR(-EIO); 521 515 } 522 516 return page; 523 517 } ··· 563 557 564 558 if (dn.data_blkaddr == NEW_ADDR) { 565 559 zero_user_segment(page, 0, PAGE_SIZE); 566 - SetPageUptodate(page); 560 + if (!PageUptodate(page)) 561 + SetPageUptodate(page); 567 562 } else { 568 563 f2fs_put_page(page, 1); 569 564 ··· 576 569 } 577 570 got_it: 578 571 if (new_i_size && i_size_read(inode) < 579 - ((loff_t)(index + 1) << PAGE_SHIFT)) { 580 - i_size_write(inode, ((loff_t)(index + 1) << PAGE_SHIFT)); 581 - /* Only the directory inode sets new_i_size */ 582 - set_inode_flag(F2FS_I(inode), FI_UPDATE_DIR); 583 - } 572 + ((loff_t)(index + 1) << PAGE_SHIFT)) 573 + f2fs_i_size_write(inode, ((loff_t)(index + 1) << PAGE_SHIFT)); 584 574 return page; 585 575 } 586 576 ··· 590 586 pgoff_t fofs; 591 587 blkcnt_t count = 1; 592 588 593 - if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))) 589 + if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC))) 594 590 return -EPERM; 595 591 596 592 dn->data_blkaddr = datablock_addr(dn->node_page, dn->ofs_in_node); ··· 615 611 fofs = start_bidx_of_node(ofs_of_node(dn->node_page), dn->inode) + 616 612 dn->ofs_in_node; 617 613 if (i_size_read(dn->inode) < ((loff_t)(fofs + 1) << PAGE_SHIFT)) 618 - i_size_write(dn->inode, 614 + f2fs_i_size_write(dn->inode, 619 615 ((loff_t)(fofs + 1) << PAGE_SHIFT)); 620 616 return 0; 621 617 } ··· 664 660 unsigned int maxblocks = map->m_len; 665 661 struct dnode_of_data dn; 666 662 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 667 - int mode = create ? ALLOC_NODE : LOOKUP_NODE_RA; 663 + int mode = create ? ALLOC_NODE : LOOKUP_NODE; 668 664 pgoff_t pgofs, end_offset, end; 669 665 int err = 0, ofs = 1; 670 666 unsigned int ofs_in_node, last_ofs_in_node; ··· 727 723 } else { 728 724 err = __allocate_data_block(&dn); 729 725 if (!err) { 730 - set_inode_flag(F2FS_I(inode), 731 - FI_APPEND_WRITE); 726 + set_inode_flag(inode, FI_APPEND_WRITE); 732 727 allocated = true; 733 728 } 734 729 } ··· 798 795 else if (dn.ofs_in_node < end_offset) 799 796 goto next_block; 800 797 801 - if (allocated) 802 - sync_inode_page(&dn); 803 798 f2fs_put_dnode(&dn); 804 799 805 800 if (create) { ··· 808 807 goto next_dnode; 809 808 810 809 sync_out: 811 - if (allocated) 812 - sync_inode_page(&dn); 813 810 f2fs_put_dnode(&dn); 814 811 unlock_out: 815 812 if (create) { ··· 967 968 return ret; 968 969 } 969 970 971 + struct bio *f2fs_grab_bio(struct inode *inode, block_t blkaddr, 972 + unsigned nr_pages) 973 + { 974 + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 975 + struct fscrypt_ctx *ctx = NULL; 976 + struct block_device *bdev = sbi->sb->s_bdev; 977 + struct bio *bio; 978 + 979 + if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode)) { 980 + ctx = fscrypt_get_ctx(inode, GFP_NOFS); 981 + if (IS_ERR(ctx)) 982 + return ERR_CAST(ctx); 983 + 984 + /* wait the page to be moved by cleaning */ 985 + f2fs_wait_on_encrypted_page_writeback(sbi, blkaddr); 986 + } 987 + 988 + bio = bio_alloc(GFP_KERNEL, min_t(int, nr_pages, BIO_MAX_PAGES)); 989 + if (!bio) { 990 + if (ctx) 991 + fscrypt_release_ctx(ctx); 992 + return ERR_PTR(-ENOMEM); 993 + } 994 + bio->bi_bdev = bdev; 995 + bio->bi_iter.bi_sector = SECTOR_FROM_BLOCK(blkaddr); 996 + bio->bi_end_io = f2fs_read_end_io; 997 + bio->bi_private = ctx; 998 + 999 + return bio; 1000 + } 1001 + 970 1002 /* 971 1003 * This function was originally taken from fs/mpage.c, and customized for f2fs. 972 1004 * Major change was from block_size == page_size in f2fs by default. ··· 1016 986 sector_t last_block; 1017 987 sector_t last_block_in_file; 1018 988 sector_t block_nr; 1019 - struct block_device *bdev = inode->i_sb->s_bdev; 1020 989 struct f2fs_map_blocks map; 1021 990 1022 991 map.m_pblk = 0; ··· 1076 1047 } 1077 1048 } else { 1078 1049 zero_user_segment(page, 0, PAGE_SIZE); 1079 - SetPageUptodate(page); 1050 + if (!PageUptodate(page)) 1051 + SetPageUptodate(page); 1080 1052 unlock_page(page); 1081 1053 goto next_page; 1082 1054 } ··· 1088 1058 */ 1089 1059 if (bio && (last_block_in_bio != block_nr - 1)) { 1090 1060 submit_and_realloc: 1091 - __submit_bio(F2FS_I_SB(inode), bio); 1061 + __submit_bio(F2FS_I_SB(inode), bio, DATA); 1092 1062 bio = NULL; 1093 1063 } 1094 1064 if (bio == NULL) { 1095 - struct fscrypt_ctx *ctx = NULL; 1096 - 1097 - if (f2fs_encrypted_inode(inode) && 1098 - S_ISREG(inode->i_mode)) { 1099 - 1100 - ctx = fscrypt_get_ctx(inode, GFP_NOFS); 1101 - if (IS_ERR(ctx)) 1102 - goto set_error_page; 1103 - 1104 - /* wait the page to be moved by cleaning */ 1105 - f2fs_wait_on_encrypted_page_writeback( 1106 - F2FS_I_SB(inode), block_nr); 1107 - } 1108 - 1109 - bio = bio_alloc(GFP_KERNEL, 1110 - min_t(int, nr_pages, BIO_MAX_PAGES)); 1111 - if (!bio) { 1112 - if (ctx) 1113 - fscrypt_release_ctx(ctx); 1065 + bio = f2fs_grab_bio(inode, block_nr, nr_pages); 1066 + if (IS_ERR(bio)) { 1067 + bio = NULL; 1114 1068 goto set_error_page; 1115 1069 } 1116 - bio->bi_bdev = bdev; 1117 - bio->bi_iter.bi_sector = SECTOR_FROM_BLOCK(block_nr); 1118 - bio->bi_end_io = f2fs_read_end_io; 1119 - bio->bi_private = ctx; 1120 1070 bio_set_op_attrs(bio, REQ_OP_READ, 0); 1121 1071 } 1122 1072 ··· 1112 1102 goto next_page; 1113 1103 confused: 1114 1104 if (bio) { 1115 - __submit_bio(F2FS_I_SB(inode), bio); 1105 + __submit_bio(F2FS_I_SB(inode), bio, DATA); 1116 1106 bio = NULL; 1117 1107 } 1118 1108 unlock_page(page); ··· 1122 1112 } 1123 1113 BUG_ON(pages && !list_empty(pages)); 1124 1114 if (bio) 1125 - __submit_bio(F2FS_I_SB(inode), bio); 1115 + __submit_bio(F2FS_I_SB(inode), bio, DATA); 1126 1116 return 0; 1127 1117 } 1128 1118 ··· 1211 1201 !IS_ATOMIC_WRITTEN_PAGE(page) && 1212 1202 need_inplace_update(inode))) { 1213 1203 rewrite_data_page(fio); 1214 - set_inode_flag(F2FS_I(inode), FI_UPDATE_WRITE); 1204 + set_inode_flag(inode, FI_UPDATE_WRITE); 1215 1205 trace_f2fs_do_write_data_page(page, IPU); 1216 1206 } else { 1217 1207 write_data_page(&dn, fio); 1218 1208 trace_f2fs_do_write_data_page(page, OPU); 1219 - set_inode_flag(F2FS_I(inode), FI_APPEND_WRITE); 1209 + set_inode_flag(inode, FI_APPEND_WRITE); 1220 1210 if (page->index == 0) 1221 - set_inode_flag(F2FS_I(inode), FI_FIRST_BLOCK_WRITTEN); 1211 + set_inode_flag(inode, FI_FIRST_BLOCK_WRITTEN); 1222 1212 } 1223 1213 out_writepage: 1224 1214 f2fs_put_dnode(&dn); ··· 1233 1223 loff_t i_size = i_size_read(inode); 1234 1224 const pgoff_t end_index = ((unsigned long long) i_size) 1235 1225 >> PAGE_SHIFT; 1226 + loff_t psize = (page->index + 1) << PAGE_SHIFT; 1236 1227 unsigned offset = 0; 1237 1228 bool need_balance_fs = false; 1238 1229 int err = 0; ··· 1271 1260 available_free_memory(sbi, BASE_CHECK)))) 1272 1261 goto redirty_out; 1273 1262 1274 - /* Dentry blocks are controlled by checkpoint */ 1275 - if (S_ISDIR(inode->i_mode)) { 1276 - if (unlikely(f2fs_cp_error(sbi))) 1277 - goto redirty_out; 1278 - err = do_write_data_page(&fio); 1279 - goto done; 1280 - } 1281 - 1282 1263 /* we should bypass data pages to proceed the kworkder jobs */ 1283 1264 if (unlikely(f2fs_cp_error(sbi))) { 1284 - SetPageError(page); 1265 + mapping_set_error(page->mapping, -EIO); 1285 1266 goto out; 1267 + } 1268 + 1269 + /* Dentry blocks are controlled by checkpoint */ 1270 + if (S_ISDIR(inode->i_mode)) { 1271 + err = do_write_data_page(&fio); 1272 + goto done; 1286 1273 } 1287 1274 1288 1275 if (!wbc->for_reclaim) ··· 1294 1285 err = f2fs_write_inline_data(inode, page); 1295 1286 if (err == -EAGAIN) 1296 1287 err = do_write_data_page(&fio); 1288 + if (F2FS_I(inode)->last_disk_size < psize) 1289 + F2FS_I(inode)->last_disk_size = psize; 1297 1290 f2fs_unlock_op(sbi); 1298 1291 done: 1299 1292 if (err && err != -ENOENT) ··· 1322 1311 1323 1312 redirty_out: 1324 1313 redirty_page_for_writepage(wbc, page); 1325 - return AOP_WRITEPAGE_ACTIVATE; 1326 - } 1327 - 1328 - static int __f2fs_writepage(struct page *page, struct writeback_control *wbc, 1329 - void *data) 1330 - { 1331 - struct address_space *mapping = data; 1332 - int ret = mapping->a_ops->writepage(page, wbc); 1333 - mapping_set_error(mapping, ret); 1334 - return ret; 1314 + unlock_page(page); 1315 + return err; 1335 1316 } 1336 1317 1337 1318 /* ··· 1332 1329 * warm/hot data page. 1333 1330 */ 1334 1331 static int f2fs_write_cache_pages(struct address_space *mapping, 1335 - struct writeback_control *wbc, writepage_t writepage, 1336 - void *data) 1332 + struct writeback_control *wbc) 1337 1333 { 1338 1334 int ret = 0; 1339 1335 int done = 0; ··· 1345 1343 int cycled; 1346 1344 int range_whole = 0; 1347 1345 int tag; 1348 - int step = 0; 1349 1346 1350 1347 pagevec_init(&pvec, 0); 1351 - next: 1348 + 1352 1349 if (wbc->range_cyclic) { 1353 1350 writeback_index = mapping->writeback_index; /* prev offset */ 1354 1351 index = writeback_index; ··· 1402 1401 goto continue_unlock; 1403 1402 } 1404 1403 1405 - if (step == is_cold_data(page)) 1406 - goto continue_unlock; 1407 - 1408 1404 if (PageWriteback(page)) { 1409 1405 if (wbc->sync_mode != WB_SYNC_NONE) 1410 1406 f2fs_wait_on_page_writeback(page, ··· 1414 1416 if (!clear_page_dirty_for_io(page)) 1415 1417 goto continue_unlock; 1416 1418 1417 - ret = (*writepage)(page, wbc, data); 1419 + ret = mapping->a_ops->writepage(page, wbc); 1418 1420 if (unlikely(ret)) { 1419 - if (ret == AOP_WRITEPAGE_ACTIVATE) { 1420 - unlock_page(page); 1421 - ret = 0; 1422 - } else { 1423 - done_index = page->index + 1; 1424 - done = 1; 1425 - break; 1426 - } 1421 + done_index = page->index + 1; 1422 + done = 1; 1423 + break; 1427 1424 } 1428 1425 1429 1426 if (--wbc->nr_to_write <= 0 && ··· 1429 1436 } 1430 1437 pagevec_release(&pvec); 1431 1438 cond_resched(); 1432 - } 1433 - 1434 - if (step < 1) { 1435 - step++; 1436 - goto next; 1437 1439 } 1438 1440 1439 1441 if (!cycled && !done) { ··· 1448 1460 { 1449 1461 struct inode *inode = mapping->host; 1450 1462 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 1451 - bool locked = false; 1463 + struct blk_plug plug; 1452 1464 int ret; 1453 - long diff; 1454 1465 1455 1466 /* deal with chardevs and other special file */ 1456 1467 if (!mapping->a_ops->writepage) ··· 1465 1478 goto skip_write; 1466 1479 1467 1480 /* skip writing during file defragment */ 1468 - if (is_inode_flag_set(F2FS_I(inode), FI_DO_DEFRAG)) 1481 + if (is_inode_flag_set(inode, FI_DO_DEFRAG)) 1469 1482 goto skip_write; 1470 1483 1471 1484 /* during POR, we don't need to trigger writepage at all. */ ··· 1474 1487 1475 1488 trace_f2fs_writepages(mapping->host, wbc, DATA); 1476 1489 1477 - diff = nr_pages_to_write(sbi, DATA, wbc); 1478 - 1479 - if (!S_ISDIR(inode->i_mode) && wbc->sync_mode == WB_SYNC_ALL) { 1480 - mutex_lock(&sbi->writepages); 1481 - locked = true; 1482 - } 1483 - ret = f2fs_write_cache_pages(mapping, wbc, __f2fs_writepage, mapping); 1484 - f2fs_submit_merged_bio_cond(sbi, inode, NULL, 0, DATA, WRITE); 1485 - if (locked) 1486 - mutex_unlock(&sbi->writepages); 1490 + blk_start_plug(&plug); 1491 + ret = f2fs_write_cache_pages(mapping, wbc); 1492 + blk_finish_plug(&plug); 1493 + /* 1494 + * if some pages were truncated, we cannot guarantee its mapping->host 1495 + * to detect pending bios. 1496 + */ 1497 + f2fs_submit_merged_bio(sbi, DATA, WRITE); 1487 1498 1488 1499 remove_dirty_inode(inode); 1489 - 1490 - wbc->nr_to_write = max((long)0, wbc->nr_to_write - diff); 1491 1500 return ret; 1492 1501 1493 1502 skip_write: ··· 1541 1558 if (f2fs_has_inline_data(inode)) { 1542 1559 if (pos + len <= MAX_INLINE_DATA) { 1543 1560 read_inline_data(page, ipage); 1544 - set_inode_flag(F2FS_I(inode), FI_DATA_EXIST); 1561 + set_inode_flag(inode, FI_DATA_EXIST); 1545 1562 if (inode->i_nlink) 1546 1563 set_inline_node(ipage); 1547 1564 } else { ··· 1651 1668 if (blkaddr == NEW_ADDR) { 1652 1669 zero_user_segment(page, 0, PAGE_SIZE); 1653 1670 } else { 1654 - struct f2fs_io_info fio = { 1655 - .sbi = sbi, 1656 - .type = DATA, 1657 - .op = REQ_OP_READ, 1658 - .op_flags = READ_SYNC, 1659 - .old_blkaddr = blkaddr, 1660 - .new_blkaddr = blkaddr, 1661 - .page = page, 1662 - .encrypted_page = NULL, 1663 - }; 1664 - err = f2fs_submit_page_bio(&fio); 1665 - if (err) 1666 - goto fail; 1671 + struct bio *bio; 1667 1672 1668 - lock_page(page); 1669 - if (unlikely(!PageUptodate(page))) { 1670 - err = -EIO; 1673 + bio = f2fs_grab_bio(inode, blkaddr, 1); 1674 + if (IS_ERR(bio)) { 1675 + err = PTR_ERR(bio); 1671 1676 goto fail; 1672 1677 } 1678 + bio_set_op_attrs(bio, REQ_OP_READ, READ_SYNC); 1679 + if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) { 1680 + bio_put(bio); 1681 + err = -EFAULT; 1682 + goto fail; 1683 + } 1684 + 1685 + __submit_bio(sbi, bio, DATA); 1686 + 1687 + lock_page(page); 1673 1688 if (unlikely(page->mapping != mapping)) { 1674 1689 f2fs_put_page(page, 1); 1675 1690 goto repeat; 1676 1691 } 1677 - 1678 - /* avoid symlink page */ 1679 - if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode)) { 1680 - err = fscrypt_decrypt_page(page); 1681 - if (err) 1682 - goto fail; 1692 + if (unlikely(!PageUptodate(page))) { 1693 + err = -EIO; 1694 + goto fail; 1683 1695 } 1684 1696 } 1685 1697 out_update: 1686 - SetPageUptodate(page); 1698 + if (!PageUptodate(page)) 1699 + SetPageUptodate(page); 1687 1700 out_clear: 1688 1701 clear_cold_data(page); 1689 1702 return 0; ··· 1700 1721 trace_f2fs_write_end(inode, pos, len, copied); 1701 1722 1702 1723 set_page_dirty(page); 1703 - 1704 - if (pos + copied > i_size_read(inode)) { 1705 - i_size_write(inode, pos + copied); 1706 - mark_inode_dirty(inode); 1707 - } 1708 - 1709 1724 f2fs_put_page(page, 1); 1725 + 1726 + if (pos + copied > i_size_read(inode)) 1727 + f2fs_i_size_write(inode, pos + copied); 1728 + 1710 1729 f2fs_update_time(F2FS_I_SB(inode), REQ_TIME); 1711 1730 return copied; 1712 1731 } ··· 1729 1752 struct inode *inode = mapping->host; 1730 1753 size_t count = iov_iter_count(iter); 1731 1754 loff_t offset = iocb->ki_pos; 1755 + int rw = iov_iter_rw(iter); 1732 1756 int err; 1733 1757 1734 1758 err = check_direct_IO(inode, iter, offset); ··· 1738 1760 1739 1761 if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode)) 1740 1762 return 0; 1763 + if (test_opt(F2FS_I_SB(inode), LFS)) 1764 + return 0; 1741 1765 1742 - trace_f2fs_direct_IO_enter(inode, offset, count, iov_iter_rw(iter)); 1766 + trace_f2fs_direct_IO_enter(inode, offset, count, rw); 1743 1767 1768 + down_read(&F2FS_I(inode)->dio_rwsem[rw]); 1744 1769 err = blockdev_direct_IO(iocb, inode, iter, get_data_block_dio); 1745 - if (iov_iter_rw(iter) == WRITE) { 1770 + up_read(&F2FS_I(inode)->dio_rwsem[rw]); 1771 + 1772 + if (rw == WRITE) { 1746 1773 if (err > 0) 1747 - set_inode_flag(F2FS_I(inode), FI_UPDATE_WRITE); 1774 + set_inode_flag(inode, FI_UPDATE_WRITE); 1748 1775 else if (err < 0) 1749 1776 f2fs_write_failed(mapping, offset + count); 1750 1777 } 1751 1778 1752 - trace_f2fs_direct_IO_exit(inode, offset, count, iov_iter_rw(iter), err); 1779 + trace_f2fs_direct_IO_exit(inode, offset, count, rw, err); 1753 1780 1754 1781 return err; 1755 1782 } ··· 1801 1818 return 1; 1802 1819 } 1803 1820 1821 + /* 1822 + * This was copied from __set_page_dirty_buffers which gives higher performance 1823 + * in very high speed storages. (e.g., pmem) 1824 + */ 1825 + void f2fs_set_page_dirty_nobuffers(struct page *page) 1826 + { 1827 + struct address_space *mapping = page->mapping; 1828 + unsigned long flags; 1829 + 1830 + if (unlikely(!mapping)) 1831 + return; 1832 + 1833 + spin_lock(&mapping->private_lock); 1834 + lock_page_memcg(page); 1835 + SetPageDirty(page); 1836 + spin_unlock(&mapping->private_lock); 1837 + 1838 + spin_lock_irqsave(&mapping->tree_lock, flags); 1839 + WARN_ON_ONCE(!PageUptodate(page)); 1840 + account_page_dirtied(page, mapping); 1841 + radix_tree_tag_set(&mapping->page_tree, 1842 + page_index(page), PAGECACHE_TAG_DIRTY); 1843 + spin_unlock_irqrestore(&mapping->tree_lock, flags); 1844 + unlock_page_memcg(page); 1845 + 1846 + __mark_inode_dirty(mapping->host, I_DIRTY_PAGES); 1847 + return; 1848 + } 1849 + 1804 1850 static int f2fs_set_data_page_dirty(struct page *page) 1805 1851 { 1806 1852 struct address_space *mapping = page->mapping; ··· 1837 1825 1838 1826 trace_f2fs_set_page_dirty(page, DATA); 1839 1827 1840 - SetPageUptodate(page); 1828 + if (!PageUptodate(page)) 1829 + SetPageUptodate(page); 1841 1830 1842 1831 if (f2fs_is_atomic_file(inode)) { 1843 1832 if (!IS_ATOMIC_WRITTEN_PAGE(page)) { ··· 1853 1840 } 1854 1841 1855 1842 if (!PageDirty(page)) { 1856 - __set_page_dirty_nobuffers(page); 1843 + f2fs_set_page_dirty_nobuffers(page); 1857 1844 update_dirty_page(inode, page); 1858 1845 return 1; 1859 1846 }
+3 -2
fs/f2fs/debug.c
··· 47 47 si->ndirty_data = get_pages(sbi, F2FS_DIRTY_DATA); 48 48 si->ndirty_dirs = sbi->ndirty_inode[DIR_INODE]; 49 49 si->ndirty_files = sbi->ndirty_inode[FILE_INODE]; 50 + si->ndirty_all = sbi->ndirty_inode[DIRTY_META]; 50 51 si->inmem_pages = get_pages(sbi, F2FS_INMEM_PAGES); 51 52 si->wb_bios = atomic_read(&sbi->nr_wb_bios); 52 53 si->total_count = (int)sbi->user_block_count / sbi->blocks_per_seg; ··· 305 304 si->inmem_pages, si->wb_bios); 306 305 seq_printf(s, " - nodes: %4lld in %4d\n", 307 306 si->ndirty_node, si->node_pages); 308 - seq_printf(s, " - dents: %4lld in dirs:%4d\n", 309 - si->ndirty_dent, si->ndirty_dirs); 307 + seq_printf(s, " - dents: %4lld in dirs:%4d (%4d)\n", 308 + si->ndirty_dent, si->ndirty_dirs, si->ndirty_all); 310 309 seq_printf(s, " - datas: %4lld in files:%4d\n", 311 310 si->ndirty_data, si->ndirty_files); 312 311 seq_printf(s, " - meta: %4lld in %4d\n",
+49 -74
fs/f2fs/dir.c
··· 185 185 /* no need to allocate new dentry pages to all the indices */ 186 186 dentry_page = find_data_page(dir, bidx); 187 187 if (IS_ERR(dentry_page)) { 188 - room = true; 189 - continue; 188 + if (PTR_ERR(dentry_page) == -ENOENT) { 189 + room = true; 190 + continue; 191 + } else { 192 + *res_page = dentry_page; 193 + break; 194 + } 190 195 } 191 196 192 197 de = find_in_block(dentry_page, fname, namehash, &max_slots, ··· 228 223 struct fscrypt_name fname; 229 224 int err; 230 225 231 - *res_page = NULL; 232 - 233 226 err = fscrypt_setup_filename(dir, child, 1, &fname); 234 - if (err) 227 + if (err) { 228 + *res_page = ERR_PTR(err); 235 229 return NULL; 230 + } 236 231 237 232 if (f2fs_has_inline_dentry(dir)) { 233 + *res_page = NULL; 238 234 de = find_in_inline_dir(dir, &fname, res_page); 239 235 goto out; 240 236 } 241 237 242 - if (npages == 0) 238 + if (npages == 0) { 239 + *res_page = NULL; 243 240 goto out; 241 + } 244 242 245 243 max_depth = F2FS_I(dir)->i_current_depth; 246 244 if (unlikely(max_depth > MAX_DIR_HASH_DEPTH)) { ··· 251 243 "Corrupted max_depth of %lu: %u", 252 244 dir->i_ino, max_depth); 253 245 max_depth = MAX_DIR_HASH_DEPTH; 254 - F2FS_I(dir)->i_current_depth = max_depth; 255 - mark_inode_dirty(dir); 246 + f2fs_i_depth_write(dir, max_depth); 256 247 } 257 248 258 249 for (level = 0; level < max_depth; level++) { 250 + *res_page = NULL; 259 251 de = find_in_level(dir, level, &fname, res_page); 260 - if (de) 252 + if (de || IS_ERR(*res_page)) 261 253 break; 262 254 } 263 255 out: ··· 267 259 268 260 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p) 269 261 { 270 - struct page *page; 271 - struct f2fs_dir_entry *de; 272 - struct f2fs_dentry_block *dentry_blk; 262 + struct qstr dotdot = QSTR_INIT("..", 2); 273 263 274 - if (f2fs_has_inline_dentry(dir)) 275 - return f2fs_parent_inline_dir(dir, p); 276 - 277 - page = get_lock_data_page(dir, 0, false); 278 - if (IS_ERR(page)) 279 - return NULL; 280 - 281 - dentry_blk = kmap(page); 282 - de = &dentry_blk->dentry[1]; 283 - *p = page; 284 - unlock_page(page); 285 - return de; 264 + return f2fs_find_entry(dir, &dotdot, p); 286 265 } 287 266 288 - ino_t f2fs_inode_by_name(struct inode *dir, struct qstr *qstr) 267 + ino_t f2fs_inode_by_name(struct inode *dir, struct qstr *qstr, 268 + struct page **page) 289 269 { 290 270 ino_t res = 0; 291 271 struct f2fs_dir_entry *de; 292 - struct page *page; 293 272 294 - de = f2fs_find_entry(dir, qstr, &page); 273 + de = f2fs_find_entry(dir, qstr, page); 295 274 if (de) { 296 275 res = le32_to_cpu(de->ino); 297 - f2fs_dentry_kunmap(dir, page); 298 - f2fs_put_page(page, 0); 276 + f2fs_dentry_kunmap(dir, *page); 277 + f2fs_put_page(*page, 0); 299 278 } 300 279 301 280 return res; ··· 298 303 set_de_type(de, inode->i_mode); 299 304 f2fs_dentry_kunmap(dir, page); 300 305 set_page_dirty(page); 301 - dir->i_mtime = dir->i_ctime = CURRENT_TIME; 302 - mark_inode_dirty(dir); 303 306 307 + dir->i_mtime = dir->i_ctime = CURRENT_TIME; 308 + f2fs_mark_inode_dirty_sync(dir); 304 309 f2fs_put_page(page, 1); 305 310 } 306 311 ··· 380 385 struct page *page; 381 386 int err; 382 387 383 - if (is_inode_flag_set(F2FS_I(inode), FI_NEW_INODE)) { 388 + if (is_inode_flag_set(inode, FI_NEW_INODE)) { 384 389 page = new_inode_page(inode); 385 390 if (IS_ERR(page)) 386 391 return page; ··· 424 429 * This file should be checkpointed during fsync. 425 430 * We lost i_pino from now on. 426 431 */ 427 - if (is_inode_flag_set(F2FS_I(inode), FI_INC_LINK)) { 432 + if (is_inode_flag_set(inode, FI_INC_LINK)) { 428 433 file_lost_pino(inode); 429 434 /* 430 435 * If link the tmpfile to alias through linkat path, ··· 432 437 */ 433 438 if (inode->i_nlink == 0) 434 439 remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino); 435 - inc_nlink(inode); 440 + f2fs_i_links_write(inode, true); 436 441 } 437 442 return page; 438 443 439 444 put_error: 440 - /* truncate empty dir pages */ 441 - truncate_inode_pages(&inode->i_data, 0); 442 - 443 445 clear_nlink(inode); 444 446 update_inode(inode, page); 445 447 f2fs_put_page(page, 1); ··· 446 454 void update_parent_metadata(struct inode *dir, struct inode *inode, 447 455 unsigned int current_depth) 448 456 { 449 - if (inode && is_inode_flag_set(F2FS_I(inode), FI_NEW_INODE)) { 450 - if (S_ISDIR(inode->i_mode)) { 451 - inc_nlink(dir); 452 - set_inode_flag(F2FS_I(dir), FI_UPDATE_DIR); 453 - } 454 - clear_inode_flag(F2FS_I(inode), FI_NEW_INODE); 457 + if (inode && is_inode_flag_set(inode, FI_NEW_INODE)) { 458 + if (S_ISDIR(inode->i_mode)) 459 + f2fs_i_links_write(dir, true); 460 + clear_inode_flag(inode, FI_NEW_INODE); 455 461 } 456 462 dir->i_mtime = dir->i_ctime = CURRENT_TIME; 457 - mark_inode_dirty(dir); 463 + f2fs_mark_inode_dirty_sync(dir); 458 464 459 - if (F2FS_I(dir)->i_current_depth != current_depth) { 460 - F2FS_I(dir)->i_current_depth = current_depth; 461 - set_inode_flag(F2FS_I(dir), FI_UPDATE_DIR); 462 - } 465 + if (F2FS_I(dir)->i_current_depth != current_depth) 466 + f2fs_i_depth_write(dir, current_depth); 463 467 464 - if (inode && is_inode_flag_set(F2FS_I(inode), FI_INC_LINK)) 465 - clear_inode_flag(F2FS_I(inode), FI_INC_LINK); 468 + if (inode && is_inode_flag_set(inode, FI_INC_LINK)) 469 + clear_inode_flag(inode, FI_INC_LINK); 466 470 } 467 471 468 472 int room_for_filename(const void *bitmap, int slots, int max_slots) ··· 584 596 set_page_dirty(dentry_page); 585 597 586 598 if (inode) { 587 - /* we don't need to mark_inode_dirty now */ 588 - F2FS_I(inode)->i_pino = dir->i_ino; 589 - update_inode(inode, page); 599 + f2fs_i_pino_write(inode, dir->i_ino); 590 600 f2fs_put_page(page, 1); 591 601 } 592 602 ··· 593 607 if (inode) 594 608 up_write(&F2FS_I(inode)->i_sem); 595 609 596 - if (is_inode_flag_set(F2FS_I(dir), FI_UPDATE_DIR)) { 597 - update_inode_page(dir); 598 - clear_inode_flag(F2FS_I(dir), FI_UPDATE_DIR); 599 - } 600 610 kunmap(dentry_page); 601 611 f2fs_put_page(dentry_page, 1); 602 612 ··· 639 657 err = PTR_ERR(page); 640 658 goto fail; 641 659 } 642 - /* we don't need to mark_inode_dirty now */ 643 - update_inode(inode, page); 644 660 f2fs_put_page(page, 1); 645 661 646 - clear_inode_flag(F2FS_I(inode), FI_NEW_INODE); 662 + clear_inode_flag(inode, FI_NEW_INODE); 647 663 fail: 648 664 up_write(&F2FS_I(inode)->i_sem); 649 665 f2fs_update_time(F2FS_I_SB(inode), REQ_TIME); 650 666 return err; 651 667 } 652 668 653 - void f2fs_drop_nlink(struct inode *dir, struct inode *inode, struct page *page) 669 + void f2fs_drop_nlink(struct inode *dir, struct inode *inode) 654 670 { 655 671 struct f2fs_sb_info *sbi = F2FS_I_SB(dir); 656 672 657 673 down_write(&F2FS_I(inode)->i_sem); 658 674 659 - if (S_ISDIR(inode->i_mode)) { 660 - drop_nlink(dir); 661 - if (page) 662 - update_inode(dir, page); 663 - else 664 - update_inode_page(dir); 665 - } 675 + if (S_ISDIR(inode->i_mode)) 676 + f2fs_i_links_write(dir, false); 666 677 inode->i_ctime = CURRENT_TIME; 667 678 668 - drop_nlink(inode); 679 + f2fs_i_links_write(inode, false); 669 680 if (S_ISDIR(inode->i_mode)) { 670 - drop_nlink(inode); 671 - i_size_write(inode, 0); 681 + f2fs_i_links_write(inode, false); 682 + f2fs_i_size_write(inode, 0); 672 683 } 673 684 up_write(&F2FS_I(inode)->i_sem); 674 - update_inode_page(inode); 675 685 676 686 if (inode->i_nlink == 0) 677 - add_orphan_inode(sbi, inode->i_ino); 687 + add_orphan_inode(inode); 678 688 else 679 689 release_orphan_inode(sbi); 680 690 } ··· 704 730 set_page_dirty(page); 705 731 706 732 dir->i_ctime = dir->i_mtime = CURRENT_TIME; 733 + f2fs_mark_inode_dirty_sync(dir); 707 734 708 735 if (inode) 709 - f2fs_drop_nlink(dir, inode, NULL); 736 + f2fs_drop_nlink(dir, inode); 710 737 711 738 if (bit_pos == NR_DENTRY_IN_BLOCK && 712 739 !truncate_hole(dir, page->index, page->index + 1)) {
+32 -18
fs/f2fs/extent_cache.c
··· 170 170 { 171 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 174 largest->len = 0; 175 + f2fs_mark_inode_dirty_sync(inode); 176 + } 175 177 } 176 178 177 179 /* return true, if inode page is changed */ ··· 337 335 return en; 338 336 } 339 337 340 - static struct extent_node *__try_merge_extent_node(struct f2fs_sb_info *sbi, 338 + static struct extent_node *__try_merge_extent_node(struct inode *inode, 341 339 struct extent_tree *et, struct extent_info *ei, 342 340 struct extent_node *prev_ex, 343 341 struct extent_node *next_ex) 344 342 { 343 + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 345 344 struct extent_node *en = NULL; 346 345 347 346 if (prev_ex && __is_back_mergeable(ei, &prev_ex->ei)) { ··· 363 360 if (!en) 364 361 return NULL; 365 362 366 - __try_update_largest_extent(et, en); 363 + __try_update_largest_extent(inode, et, en); 367 364 368 365 spin_lock(&sbi->extent_lock); 369 366 if (!list_empty(&en->list)) { ··· 374 371 return en; 375 372 } 376 373 377 - static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi, 374 + static struct extent_node *__insert_extent_tree(struct inode *inode, 378 375 struct extent_tree *et, struct extent_info *ei, 379 376 struct rb_node **insert_p, 380 377 struct rb_node *insert_parent) 381 378 { 379 + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 382 380 struct rb_node **p = &et->root.rb_node; 383 381 struct rb_node *parent = NULL; 384 382 struct extent_node *en = NULL; ··· 406 402 if (!en) 407 403 return NULL; 408 404 409 - __try_update_largest_extent(et, en); 405 + __try_update_largest_extent(inode, et, en); 410 406 411 407 /* update in global extent list */ 412 408 spin_lock(&sbi->extent_lock); ··· 435 431 436 432 write_lock(&et->lock); 437 433 438 - if (is_inode_flag_set(F2FS_I(inode), FI_NO_EXTENT)) { 434 + if (is_inode_flag_set(inode, FI_NO_EXTENT)) { 439 435 write_unlock(&et->lock); 440 436 return false; 441 437 } ··· 477 473 set_extent_info(&ei, end, 478 474 end - dei.fofs + dei.blk, 479 475 org_end - end); 480 - en1 = __insert_extent_tree(sbi, et, &ei, 476 + en1 = __insert_extent_tree(inode, et, &ei, 481 477 NULL, NULL); 482 478 next_en = en1; 483 479 } else { ··· 498 494 } 499 495 500 496 if (parts) 501 - __try_update_largest_extent(et, en); 497 + __try_update_largest_extent(inode, et, en); 502 498 else 503 499 __release_extent_node(sbi, et, en); 504 500 ··· 518 514 if (blkaddr) { 519 515 520 516 set_extent_info(&ei, fofs, blkaddr, len); 521 - if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en)) 522 - __insert_extent_tree(sbi, et, &ei, 517 + if (!__try_merge_extent_node(inode, et, &ei, prev_en, next_en)) 518 + __insert_extent_tree(inode, et, &ei, 523 519 insert_p, insert_parent); 524 520 525 521 /* give up extent_cache, if split and small updates happen */ 526 522 if (dei.len >= 1 && 527 523 prev.len < F2FS_MIN_EXTENT_LEN && 528 524 et->largest.len < F2FS_MIN_EXTENT_LEN) { 529 - et->largest.len = 0; 530 - set_inode_flag(F2FS_I(inode), FI_NO_EXTENT); 525 + __drop_largest_extent(inode, 0, UINT_MAX); 526 + set_inode_flag(inode, FI_NO_EXTENT); 531 527 } 532 528 } 533 529 534 - if (is_inode_flag_set(F2FS_I(inode), FI_NO_EXTENT)) 530 + if (is_inode_flag_set(inode, FI_NO_EXTENT)) 535 531 __free_extent_tree(sbi, et); 536 532 537 533 write_unlock(&et->lock); ··· 631 627 return node_cnt; 632 628 } 633 629 630 + void f2fs_drop_extent_tree(struct inode *inode) 631 + { 632 + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 633 + struct extent_tree *et = F2FS_I(inode)->extent_tree; 634 + 635 + set_inode_flag(inode, FI_NO_EXTENT); 636 + 637 + write_lock(&et->lock); 638 + __free_extent_tree(sbi, et); 639 + __drop_largest_extent(inode, 0, UINT_MAX); 640 + write_unlock(&et->lock); 641 + } 642 + 634 643 void f2fs_destroy_extent_tree(struct inode *inode) 635 644 { 636 645 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); ··· 702 685 703 686 fofs = start_bidx_of_node(ofs_of_node(dn->node_page), dn->inode) + 704 687 dn->ofs_in_node; 705 - 706 - if (f2fs_update_extent_tree_range(dn->inode, fofs, blkaddr, 1)) 707 - sync_inode_page(dn); 688 + f2fs_update_extent_tree_range(dn->inode, fofs, blkaddr, 1); 708 689 } 709 690 710 691 void f2fs_update_extent_cache_range(struct dnode_of_data *dn, ··· 712 697 if (!f2fs_may_extent_tree(dn->inode)) 713 698 return; 714 699 715 - if (f2fs_update_extent_tree_range(dn->inode, fofs, blkaddr, len)) 716 - sync_inode_page(dn); 700 + f2fs_update_extent_tree_range(dn->inode, fofs, blkaddr, len); 717 701 } 718 702 719 703 void init_extent_cache_info(struct f2fs_sb_info *sbi)
+211 -79
fs/f2fs/f2fs.h
··· 45 45 FAULT_ORPHAN, 46 46 FAULT_BLOCK, 47 47 FAULT_DIR_DEPTH, 48 + FAULT_EVICT_INODE, 48 49 FAULT_MAX, 49 50 }; 50 51 ··· 74 73 else if (type == FAULT_BLOCK && !IS_FAULT_SET(type)) 75 74 return false; 76 75 else if (type == FAULT_DIR_DEPTH && !IS_FAULT_SET(type)) 76 + return false; 77 + else if (type == FAULT_EVICT_INODE && !IS_FAULT_SET(type)) 77 78 return false; 78 79 79 80 atomic_inc(&f2fs_fault.inject_ops); ··· 111 108 #define F2FS_MOUNT_FORCE_FG_GC 0x00004000 112 109 #define F2FS_MOUNT_DATA_FLUSH 0x00008000 113 110 #define F2FS_MOUNT_FAULT_INJECTION 0x00010000 111 + #define F2FS_MOUNT_ADAPTIVE 0x00020000 112 + #define F2FS_MOUNT_LFS 0x00040000 114 113 115 114 #define clear_opt(sbi, option) (sbi->mount_opt.opt &= ~F2FS_MOUNT_##option) 116 115 #define set_opt(sbi, option) (sbi->mount_opt.opt |= F2FS_MOUNT_##option) ··· 133 128 }; 134 129 135 130 #define F2FS_FEATURE_ENCRYPT 0x0001 131 + #define F2FS_FEATURE_HMSMR 0x0002 136 132 137 133 #define F2FS_HAS_FEATURE(sb, mask) \ 138 134 ((F2FS_SB(sb)->raw_super->feature & cpu_to_le32(mask)) != 0) ··· 164 158 #define BATCHED_TRIM_BLOCKS(sbi) \ 165 159 (BATCHED_TRIM_SEGMENTS(sbi) << (sbi)->log_blocks_per_seg) 166 160 #define DEF_CP_INTERVAL 60 /* 60 secs */ 167 - #define DEF_IDLE_INTERVAL 120 /* 2 mins */ 161 + #define DEF_IDLE_INTERVAL 5 /* 5 secs */ 168 162 169 163 struct cp_control { 170 164 int reason; ··· 268 262 #define F2FS_IOC_GARBAGE_COLLECT _IO(F2FS_IOCTL_MAGIC, 6) 269 263 #define F2FS_IOC_WRITE_CHECKPOINT _IO(F2FS_IOCTL_MAGIC, 7) 270 264 #define F2FS_IOC_DEFRAGMENT _IO(F2FS_IOCTL_MAGIC, 8) 265 + #define F2FS_IOC_MOVE_RANGE _IOWR(F2FS_IOCTL_MAGIC, 9, \ 266 + struct f2fs_move_range) 271 267 272 268 #define F2FS_IOC_SET_ENCRYPTION_POLICY FS_IOC_SET_ENCRYPTION_POLICY 273 269 #define F2FS_IOC_GET_ENCRYPTION_POLICY FS_IOC_GET_ENCRYPTION_POLICY ··· 297 289 struct f2fs_defragment { 298 290 u64 start; 299 291 u64 len; 292 + }; 293 + 294 + struct f2fs_move_range { 295 + u32 dst_fd; /* destination fd */ 296 + u64 pos_in; /* start position in src_fd */ 297 + u64 pos_out; /* start position in dst_fd */ 298 + u64 len; /* size to move */ 300 299 }; 301 300 302 301 /* ··· 456 441 unsigned int clevel; /* maximum level of given file name */ 457 442 nid_t i_xattr_nid; /* node id that contains xattrs */ 458 443 unsigned long long xattr_ver; /* cp version of xattr modification */ 444 + loff_t last_disk_size; /* lastly written file size */ 459 445 460 - struct list_head dirty_list; /* linked in global dirty list */ 446 + struct list_head dirty_list; /* dirty list for dirs and files */ 447 + struct list_head gdirty_list; /* linked in global dirty list */ 461 448 struct list_head inmem_pages; /* inmemory pages managed by f2fs */ 462 449 struct mutex inmem_lock; /* lock for inmemory pages */ 463 450 struct extent_tree *extent_tree; /* cached extent_tree entry */ 451 + struct rw_semaphore dio_rwsem[2];/* avoid racing between dio and gc */ 464 452 }; 465 453 466 454 static inline void get_extent_info(struct extent_info *ext, ··· 516 498 return __is_extent_mergeable(cur, front); 517 499 } 518 500 519 - static inline void __try_update_largest_extent(struct extent_tree *et, 520 - struct extent_node *en) 501 + extern void f2fs_mark_inode_dirty_sync(struct inode *); 502 + static inline void __try_update_largest_extent(struct inode *inode, 503 + struct extent_tree *et, struct extent_node *en) 521 504 { 522 - if (en->ei.len > et->largest.len) 505 + if (en->ei.len > et->largest.len) { 523 506 et->largest = en->ei; 507 + f2fs_mark_inode_dirty_sync(inode); 508 + } 524 509 } 525 510 526 511 struct f2fs_nm_info { ··· 538 517 /* NAT cache management */ 539 518 struct radix_tree_root nat_root;/* root of the nat entry cache */ 540 519 struct radix_tree_root nat_set_root;/* root of the nat set cache */ 541 - struct rw_semaphore nat_tree_lock; /* protect nat_tree_lock */ 520 + struct percpu_rw_semaphore nat_tree_lock; /* protect nat_tree_lock */ 542 521 struct list_head nat_entries; /* cached nat entry list (clean) */ 543 522 unsigned int nat_cnt; /* the # of cached nat entries */ 544 523 unsigned int dirty_nat_cnt; /* total num of nat entries in set */ ··· 620 599 struct flush_cmd_control { 621 600 struct task_struct *f2fs_issue_flush; /* flush thread */ 622 601 wait_queue_head_t flush_wait_queue; /* waiting queue for wake-up */ 602 + atomic_t submit_flush; /* # of issued flushes */ 623 603 struct llist_head issue_list; /* list for command issue */ 624 604 struct llist_node *dispatch_list; /* list for command dispatch */ 625 605 }; ··· 677 655 F2FS_DIRTY_NODES, 678 656 F2FS_DIRTY_META, 679 657 F2FS_INMEM_PAGES, 658 + F2FS_DIRTY_IMETA, 680 659 NR_COUNT_TYPE, 681 660 }; 682 661 ··· 729 706 enum inode_type { 730 707 DIR_INODE, /* for dirty dir inode */ 731 708 FILE_INODE, /* for dirty regular/symlink inode */ 709 + DIRTY_META, /* for all dirtied inode metadata */ 732 710 NR_INODE_TYPE, 733 711 }; 734 712 ··· 781 757 /* for bio operations */ 782 758 struct f2fs_bio_info read_io; /* for read bios */ 783 759 struct f2fs_bio_info write_io[NR_PAGE_TYPE]; /* for write bios */ 760 + struct mutex wio_mutex[NODE + 1]; /* bio ordering for NODE/DATA */ 784 761 785 762 /* for checkpoint */ 786 763 struct f2fs_checkpoint *ckpt; /* raw checkpoint pointer */ 787 764 struct inode *meta_inode; /* cache meta blocks */ 788 765 struct mutex cp_mutex; /* checkpoint procedure lock */ 789 - struct rw_semaphore cp_rwsem; /* blocking FS operations */ 766 + struct percpu_rw_semaphore cp_rwsem; /* blocking FS operations */ 790 767 struct rw_semaphore node_write; /* locking node writes */ 791 - struct mutex writepages; /* mutex for writepages() */ 792 768 wait_queue_head_t cp_wait; 793 769 unsigned long last_time[MAX_TIME]; /* to store time in jiffies */ 794 770 long interval_time[MAX_TIME]; /* to store thresholds */ ··· 1074 1050 1075 1051 static inline void f2fs_lock_op(struct f2fs_sb_info *sbi) 1076 1052 { 1077 - down_read(&sbi->cp_rwsem); 1053 + percpu_down_read(&sbi->cp_rwsem); 1078 1054 } 1079 1055 1080 1056 static inline void f2fs_unlock_op(struct f2fs_sb_info *sbi) 1081 1057 { 1082 - up_read(&sbi->cp_rwsem); 1058 + percpu_up_read(&sbi->cp_rwsem); 1083 1059 } 1084 1060 1085 1061 static inline void f2fs_lock_all(struct f2fs_sb_info *sbi) 1086 1062 { 1087 - down_write(&sbi->cp_rwsem); 1063 + percpu_down_write(&sbi->cp_rwsem); 1088 1064 } 1089 1065 1090 1066 static inline void f2fs_unlock_all(struct f2fs_sb_info *sbi) 1091 1067 { 1092 - up_write(&sbi->cp_rwsem); 1068 + percpu_up_write(&sbi->cp_rwsem); 1093 1069 } 1094 1070 1095 1071 static inline int __get_cp_reason(struct f2fs_sb_info *sbi) ··· 1144 1120 return ofs == XATTR_NODE_OFFSET; 1145 1121 } 1146 1122 1123 + static inline void f2fs_i_blocks_write(struct inode *, blkcnt_t, bool); 1147 1124 static inline bool inc_valid_block_count(struct f2fs_sb_info *sbi, 1148 1125 struct inode *inode, blkcnt_t *count) 1149 1126 { 1150 - block_t valid_block_count; 1127 + blkcnt_t diff; 1128 + 1129 + #ifdef CONFIG_F2FS_FAULT_INJECTION 1130 + if (time_to_inject(FAULT_BLOCK)) 1131 + return false; 1132 + #endif 1133 + /* 1134 + * let's increase this in prior to actual block count change in order 1135 + * for f2fs_sync_file to avoid data races when deciding checkpoint. 1136 + */ 1137 + percpu_counter_add(&sbi->alloc_valid_block_count, (*count)); 1151 1138 1152 1139 spin_lock(&sbi->stat_lock); 1153 - #ifdef CONFIG_F2FS_FAULT_INJECTION 1154 - if (time_to_inject(FAULT_BLOCK)) { 1155 - spin_unlock(&sbi->stat_lock); 1156 - return false; 1157 - } 1158 - #endif 1159 - valid_block_count = 1160 - sbi->total_valid_block_count + (block_t)(*count); 1161 - if (unlikely(valid_block_count > sbi->user_block_count)) { 1162 - *count = sbi->user_block_count - sbi->total_valid_block_count; 1140 + sbi->total_valid_block_count += (block_t)(*count); 1141 + if (unlikely(sbi->total_valid_block_count > sbi->user_block_count)) { 1142 + diff = sbi->total_valid_block_count - sbi->user_block_count; 1143 + *count -= diff; 1144 + sbi->total_valid_block_count = sbi->user_block_count; 1163 1145 if (!*count) { 1164 1146 spin_unlock(&sbi->stat_lock); 1147 + percpu_counter_sub(&sbi->alloc_valid_block_count, diff); 1165 1148 return false; 1166 1149 } 1167 1150 } 1168 - /* *count can be recalculated */ 1169 - inode->i_blocks += *count; 1170 - sbi->total_valid_block_count = 1171 - sbi->total_valid_block_count + (block_t)(*count); 1172 1151 spin_unlock(&sbi->stat_lock); 1173 1152 1174 - percpu_counter_add(&sbi->alloc_valid_block_count, (*count)); 1153 + f2fs_i_blocks_write(inode, *count, true); 1175 1154 return true; 1176 1155 } 1177 1156 ··· 1185 1158 spin_lock(&sbi->stat_lock); 1186 1159 f2fs_bug_on(sbi, sbi->total_valid_block_count < (block_t) count); 1187 1160 f2fs_bug_on(sbi, inode->i_blocks < count); 1188 - inode->i_blocks -= count; 1189 1161 sbi->total_valid_block_count -= (block_t)count; 1190 1162 spin_unlock(&sbi->stat_lock); 1163 + f2fs_i_blocks_write(inode, count, false); 1191 1164 } 1192 1165 1193 1166 static inline void inc_page_count(struct f2fs_sb_info *sbi, int count_type) ··· 1322 1295 } 1323 1296 1324 1297 if (inode) 1325 - inode->i_blocks++; 1298 + f2fs_i_blocks_write(inode, 1, true); 1326 1299 1327 1300 sbi->total_valid_node_count++; 1328 1301 sbi->total_valid_block_count++; ··· 1341 1314 f2fs_bug_on(sbi, !sbi->total_valid_node_count); 1342 1315 f2fs_bug_on(sbi, !inode->i_blocks); 1343 1316 1344 - inode->i_blocks--; 1317 + f2fs_i_blocks_write(inode, 1, false); 1345 1318 sbi->total_valid_node_count--; 1346 1319 sbi->total_valid_block_count--; 1347 1320 ··· 1538 1511 enum { 1539 1512 FI_NEW_INODE, /* indicate newly allocated inode */ 1540 1513 FI_DIRTY_INODE, /* indicate inode is dirty or not */ 1514 + FI_AUTO_RECOVER, /* indicate inode is recoverable */ 1541 1515 FI_DIRTY_DIR, /* indicate directory has dirty pages */ 1542 1516 FI_INC_LINK, /* need to increment i_nlink */ 1543 1517 FI_ACL_MODE, /* indicate acl mode */ 1544 1518 FI_NO_ALLOC, /* should not allocate any blocks */ 1545 1519 FI_FREE_NID, /* free allocated nide */ 1546 - FI_UPDATE_DIR, /* should update inode block for consistency */ 1547 1520 FI_NO_EXTENT, /* not to use the extent cache */ 1548 1521 FI_INLINE_XATTR, /* used for inline xattr */ 1549 1522 FI_INLINE_DATA, /* used for inline data*/ ··· 1561 1534 FI_DIRTY_FILE, /* indicate regular/symlink has dirty pages */ 1562 1535 }; 1563 1536 1564 - static inline void set_inode_flag(struct f2fs_inode_info *fi, int flag) 1537 + static inline void __mark_inode_dirty_flag(struct inode *inode, 1538 + int flag, bool set) 1565 1539 { 1566 - if (!test_bit(flag, &fi->flags)) 1567 - set_bit(flag, &fi->flags); 1540 + switch (flag) { 1541 + case FI_INLINE_XATTR: 1542 + case FI_INLINE_DATA: 1543 + case FI_INLINE_DENTRY: 1544 + if (set) 1545 + return; 1546 + case FI_DATA_EXIST: 1547 + case FI_INLINE_DOTS: 1548 + f2fs_mark_inode_dirty_sync(inode); 1549 + } 1568 1550 } 1569 1551 1570 - static inline int is_inode_flag_set(struct f2fs_inode_info *fi, int flag) 1552 + static inline void set_inode_flag(struct inode *inode, int flag) 1571 1553 { 1572 - return test_bit(flag, &fi->flags); 1554 + if (!test_bit(flag, &F2FS_I(inode)->flags)) 1555 + set_bit(flag, &F2FS_I(inode)->flags); 1556 + __mark_inode_dirty_flag(inode, flag, true); 1573 1557 } 1574 1558 1575 - static inline void clear_inode_flag(struct f2fs_inode_info *fi, int flag) 1559 + static inline int is_inode_flag_set(struct inode *inode, int flag) 1576 1560 { 1577 - if (test_bit(flag, &fi->flags)) 1578 - clear_bit(flag, &fi->flags); 1561 + return test_bit(flag, &F2FS_I(inode)->flags); 1579 1562 } 1580 1563 1581 - static inline void set_acl_inode(struct f2fs_inode_info *fi, umode_t mode) 1564 + static inline void clear_inode_flag(struct inode *inode, int flag) 1582 1565 { 1583 - fi->i_acl_mode = mode; 1584 - set_inode_flag(fi, FI_ACL_MODE); 1566 + if (test_bit(flag, &F2FS_I(inode)->flags)) 1567 + clear_bit(flag, &F2FS_I(inode)->flags); 1568 + __mark_inode_dirty_flag(inode, flag, false); 1585 1569 } 1586 1570 1587 - static inline void get_inline_info(struct f2fs_inode_info *fi, 1588 - struct f2fs_inode *ri) 1571 + static inline void set_acl_inode(struct inode *inode, umode_t mode) 1589 1572 { 1573 + F2FS_I(inode)->i_acl_mode = mode; 1574 + set_inode_flag(inode, FI_ACL_MODE); 1575 + f2fs_mark_inode_dirty_sync(inode); 1576 + } 1577 + 1578 + static inline void f2fs_i_links_write(struct inode *inode, bool inc) 1579 + { 1580 + if (inc) 1581 + inc_nlink(inode); 1582 + else 1583 + drop_nlink(inode); 1584 + f2fs_mark_inode_dirty_sync(inode); 1585 + } 1586 + 1587 + static inline void f2fs_i_blocks_write(struct inode *inode, 1588 + blkcnt_t diff, bool add) 1589 + { 1590 + bool clean = !is_inode_flag_set(inode, FI_DIRTY_INODE); 1591 + bool recover = is_inode_flag_set(inode, FI_AUTO_RECOVER); 1592 + 1593 + inode->i_blocks = add ? inode->i_blocks + diff : 1594 + inode->i_blocks - diff; 1595 + f2fs_mark_inode_dirty_sync(inode); 1596 + if (clean || recover) 1597 + set_inode_flag(inode, FI_AUTO_RECOVER); 1598 + } 1599 + 1600 + static inline void f2fs_i_size_write(struct inode *inode, loff_t i_size) 1601 + { 1602 + bool clean = !is_inode_flag_set(inode, FI_DIRTY_INODE); 1603 + bool recover = is_inode_flag_set(inode, FI_AUTO_RECOVER); 1604 + 1605 + if (i_size_read(inode) == i_size) 1606 + return; 1607 + 1608 + i_size_write(inode, i_size); 1609 + f2fs_mark_inode_dirty_sync(inode); 1610 + if (clean || recover) 1611 + set_inode_flag(inode, FI_AUTO_RECOVER); 1612 + } 1613 + 1614 + static inline bool f2fs_skip_inode_update(struct inode *inode) 1615 + { 1616 + if (!is_inode_flag_set(inode, FI_AUTO_RECOVER)) 1617 + return false; 1618 + return F2FS_I(inode)->last_disk_size == i_size_read(inode); 1619 + } 1620 + 1621 + static inline void f2fs_i_depth_write(struct inode *inode, unsigned int depth) 1622 + { 1623 + F2FS_I(inode)->i_current_depth = depth; 1624 + f2fs_mark_inode_dirty_sync(inode); 1625 + } 1626 + 1627 + static inline void f2fs_i_xnid_write(struct inode *inode, nid_t xnid) 1628 + { 1629 + F2FS_I(inode)->i_xattr_nid = xnid; 1630 + f2fs_mark_inode_dirty_sync(inode); 1631 + } 1632 + 1633 + static inline void f2fs_i_pino_write(struct inode *inode, nid_t pino) 1634 + { 1635 + F2FS_I(inode)->i_pino = pino; 1636 + f2fs_mark_inode_dirty_sync(inode); 1637 + } 1638 + 1639 + static inline void get_inline_info(struct inode *inode, struct f2fs_inode *ri) 1640 + { 1641 + struct f2fs_inode_info *fi = F2FS_I(inode); 1642 + 1590 1643 if (ri->i_inline & F2FS_INLINE_XATTR) 1591 - set_inode_flag(fi, FI_INLINE_XATTR); 1644 + set_bit(FI_INLINE_XATTR, &fi->flags); 1592 1645 if (ri->i_inline & F2FS_INLINE_DATA) 1593 - set_inode_flag(fi, FI_INLINE_DATA); 1646 + set_bit(FI_INLINE_DATA, &fi->flags); 1594 1647 if (ri->i_inline & F2FS_INLINE_DENTRY) 1595 - set_inode_flag(fi, FI_INLINE_DENTRY); 1648 + set_bit(FI_INLINE_DENTRY, &fi->flags); 1596 1649 if (ri->i_inline & F2FS_DATA_EXIST) 1597 - set_inode_flag(fi, FI_DATA_EXIST); 1650 + set_bit(FI_DATA_EXIST, &fi->flags); 1598 1651 if (ri->i_inline & F2FS_INLINE_DOTS) 1599 - set_inode_flag(fi, FI_INLINE_DOTS); 1652 + set_bit(FI_INLINE_DOTS, &fi->flags); 1600 1653 } 1601 1654 1602 - static inline void set_raw_inline(struct f2fs_inode_info *fi, 1603 - struct f2fs_inode *ri) 1655 + static inline void set_raw_inline(struct inode *inode, struct f2fs_inode *ri) 1604 1656 { 1605 1657 ri->i_inline = 0; 1606 1658 1607 - if (is_inode_flag_set(fi, FI_INLINE_XATTR)) 1659 + if (is_inode_flag_set(inode, FI_INLINE_XATTR)) 1608 1660 ri->i_inline |= F2FS_INLINE_XATTR; 1609 - if (is_inode_flag_set(fi, FI_INLINE_DATA)) 1661 + if (is_inode_flag_set(inode, FI_INLINE_DATA)) 1610 1662 ri->i_inline |= F2FS_INLINE_DATA; 1611 - if (is_inode_flag_set(fi, FI_INLINE_DENTRY)) 1663 + if (is_inode_flag_set(inode, FI_INLINE_DENTRY)) 1612 1664 ri->i_inline |= F2FS_INLINE_DENTRY; 1613 - if (is_inode_flag_set(fi, FI_DATA_EXIST)) 1665 + if (is_inode_flag_set(inode, FI_DATA_EXIST)) 1614 1666 ri->i_inline |= F2FS_DATA_EXIST; 1615 - if (is_inode_flag_set(fi, FI_INLINE_DOTS)) 1667 + if (is_inode_flag_set(inode, FI_INLINE_DOTS)) 1616 1668 ri->i_inline |= F2FS_INLINE_DOTS; 1617 1669 } 1618 1670 1619 1671 static inline int f2fs_has_inline_xattr(struct inode *inode) 1620 1672 { 1621 - return is_inode_flag_set(F2FS_I(inode), FI_INLINE_XATTR); 1673 + return is_inode_flag_set(inode, FI_INLINE_XATTR); 1622 1674 } 1623 1675 1624 1676 static inline unsigned int addrs_per_inode(struct inode *inode) ··· 1724 1618 1725 1619 static inline int f2fs_has_inline_data(struct inode *inode) 1726 1620 { 1727 - return is_inode_flag_set(F2FS_I(inode), FI_INLINE_DATA); 1621 + return is_inode_flag_set(inode, FI_INLINE_DATA); 1728 1622 } 1729 1623 1730 1624 static inline void f2fs_clear_inline_inode(struct inode *inode) 1731 1625 { 1732 - clear_inode_flag(F2FS_I(inode), FI_INLINE_DATA); 1733 - clear_inode_flag(F2FS_I(inode), FI_DATA_EXIST); 1626 + clear_inode_flag(inode, FI_INLINE_DATA); 1627 + clear_inode_flag(inode, FI_DATA_EXIST); 1734 1628 } 1735 1629 1736 1630 static inline int f2fs_exist_data(struct inode *inode) 1737 1631 { 1738 - return is_inode_flag_set(F2FS_I(inode), FI_DATA_EXIST); 1632 + return is_inode_flag_set(inode, FI_DATA_EXIST); 1739 1633 } 1740 1634 1741 1635 static inline int f2fs_has_inline_dots(struct inode *inode) 1742 1636 { 1743 - return is_inode_flag_set(F2FS_I(inode), FI_INLINE_DOTS); 1637 + return is_inode_flag_set(inode, FI_INLINE_DOTS); 1744 1638 } 1745 1639 1746 1640 static inline bool f2fs_is_atomic_file(struct inode *inode) 1747 1641 { 1748 - return is_inode_flag_set(F2FS_I(inode), FI_ATOMIC_FILE); 1642 + return is_inode_flag_set(inode, FI_ATOMIC_FILE); 1749 1643 } 1750 1644 1751 1645 static inline bool f2fs_is_volatile_file(struct inode *inode) 1752 1646 { 1753 - return is_inode_flag_set(F2FS_I(inode), FI_VOLATILE_FILE); 1647 + return is_inode_flag_set(inode, FI_VOLATILE_FILE); 1754 1648 } 1755 1649 1756 1650 static inline bool f2fs_is_first_block_written(struct inode *inode) 1757 1651 { 1758 - return is_inode_flag_set(F2FS_I(inode), FI_FIRST_BLOCK_WRITTEN); 1652 + return is_inode_flag_set(inode, FI_FIRST_BLOCK_WRITTEN); 1759 1653 } 1760 1654 1761 1655 static inline bool f2fs_is_drop_cache(struct inode *inode) 1762 1656 { 1763 - return is_inode_flag_set(F2FS_I(inode), FI_DROP_CACHE); 1657 + return is_inode_flag_set(inode, FI_DROP_CACHE); 1764 1658 } 1765 1659 1766 1660 static inline void *inline_data_addr(struct page *page) ··· 1771 1665 1772 1666 static inline int f2fs_has_inline_dentry(struct inode *inode) 1773 1667 { 1774 - return is_inode_flag_set(F2FS_I(inode), FI_INLINE_DENTRY); 1668 + return is_inode_flag_set(inode, FI_INLINE_DENTRY); 1775 1669 } 1776 1670 1777 1671 static inline void f2fs_dentry_kunmap(struct inode *dir, struct page *page) ··· 1788 1682 static inline void set_file(struct inode *inode, int type) 1789 1683 { 1790 1684 F2FS_I(inode)->i_advise |= type; 1685 + f2fs_mark_inode_dirty_sync(inode); 1791 1686 } 1792 1687 1793 1688 static inline void clear_file(struct inode *inode, int type) 1794 1689 { 1795 1690 F2FS_I(inode)->i_advise &= ~type; 1691 + f2fs_mark_inode_dirty_sync(inode); 1796 1692 } 1797 1693 1798 1694 static inline int f2fs_readonly(struct super_block *sb) ··· 1821 1713 static inline bool f2fs_may_extent_tree(struct inode *inode) 1822 1714 { 1823 1715 if (!test_opt(F2FS_I_SB(inode), EXTENT_CACHE) || 1824 - is_inode_flag_set(F2FS_I(inode), FI_NO_EXTENT)) 1716 + is_inode_flag_set(inode, FI_NO_EXTENT)) 1825 1717 return false; 1826 1718 1827 1719 return S_ISREG(inode->i_mode); ··· 1857 1749 } 1858 1750 1859 1751 #define get_inode_mode(i) \ 1860 - ((is_inode_flag_set(F2FS_I(i), FI_ACL_MODE)) ? \ 1752 + ((is_inode_flag_set(i, FI_ACL_MODE)) ? \ 1861 1753 (F2FS_I(i)->i_acl_mode) : ((i)->i_mode)) 1862 1754 1863 1755 /* get offset of first page in next direct node */ ··· 1872 1764 int f2fs_sync_file(struct file *, loff_t, loff_t, int); 1873 1765 void truncate_data_blocks(struct dnode_of_data *); 1874 1766 int truncate_blocks(struct inode *, u64, bool); 1875 - int f2fs_truncate(struct inode *, bool); 1767 + int f2fs_truncate(struct inode *); 1876 1768 int f2fs_getattr(struct vfsmount *, struct dentry *, struct kstat *); 1877 1769 int f2fs_setattr(struct dentry *, struct iattr *); 1878 1770 int truncate_hole(struct inode *, pgoff_t, pgoff_t); ··· 1913 1805 const struct qstr *, struct page *); 1914 1806 void update_parent_metadata(struct inode *, struct inode *, unsigned int); 1915 1807 int room_for_filename(const void *, int, int); 1916 - void f2fs_drop_nlink(struct inode *, struct inode *, struct page *); 1808 + void f2fs_drop_nlink(struct inode *, struct inode *); 1917 1809 struct f2fs_dir_entry *f2fs_find_entry(struct inode *, struct qstr *, 1918 1810 struct page **); 1919 1811 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *, struct page **); 1920 - ino_t f2fs_inode_by_name(struct inode *, struct qstr *); 1812 + ino_t f2fs_inode_by_name(struct inode *, struct qstr *, struct page **); 1921 1813 void f2fs_set_link(struct inode *, struct f2fs_dir_entry *, 1922 1814 struct page *, struct inode *); 1923 1815 int update_dent_inode(struct inode *, struct inode *, const struct qstr *); ··· 1941 1833 /* 1942 1834 * super.c 1943 1835 */ 1836 + int f2fs_inode_dirtied(struct inode *); 1837 + void f2fs_inode_synced(struct inode *); 1944 1838 int f2fs_commit_super(struct f2fs_sb_info *, bool); 1945 1839 int f2fs_sync_fs(struct super_block *, int); 1946 1840 extern __printf(3, 4) ··· 1976 1866 void ra_node_page(struct f2fs_sb_info *, nid_t); 1977 1867 struct page *get_node_page(struct f2fs_sb_info *, pgoff_t); 1978 1868 struct page *get_node_page_ra(struct page *, int); 1979 - void sync_inode_page(struct dnode_of_data *); 1980 1869 void move_node_page(struct page *, int); 1981 - int fsync_node_pages(struct f2fs_sb_info *, nid_t, struct writeback_control *, 1982 - bool); 1870 + int fsync_node_pages(struct f2fs_sb_info *, struct inode *, 1871 + struct writeback_control *, bool); 1983 1872 int sync_node_pages(struct f2fs_sb_info *, struct writeback_control *); 1873 + void build_free_nids(struct f2fs_sb_info *); 1984 1874 bool alloc_nid(struct f2fs_sb_info *, nid_t *); 1985 1875 void alloc_nid_done(struct f2fs_sb_info *, nid_t); 1986 1876 void alloc_nid_failed(struct f2fs_sb_info *, nid_t); ··· 2054 1944 void remove_ino_entry(struct f2fs_sb_info *, nid_t, int type); 2055 1945 void release_ino_entry(struct f2fs_sb_info *, bool); 2056 1946 bool exist_written_data(struct f2fs_sb_info *, nid_t, int); 1947 + int f2fs_sync_inode_meta(struct f2fs_sb_info *); 2057 1948 int acquire_orphan_inode(struct f2fs_sb_info *); 2058 1949 void release_orphan_inode(struct f2fs_sb_info *); 2059 - void add_orphan_inode(struct f2fs_sb_info *, nid_t); 1950 + void add_orphan_inode(struct inode *); 2060 1951 void remove_orphan_inode(struct f2fs_sb_info *, nid_t); 2061 1952 int recover_orphan_inodes(struct f2fs_sb_info *); 2062 1953 int get_valid_checkpoint(struct f2fs_sb_info *); ··· 2092 1981 int do_write_data_page(struct f2fs_io_info *); 2093 1982 int f2fs_map_blocks(struct inode *, struct f2fs_map_blocks *, int, int); 2094 1983 int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *, u64, u64); 1984 + void f2fs_set_page_dirty_nobuffers(struct page *); 2095 1985 void f2fs_invalidate_page(struct page *, unsigned int, unsigned int); 2096 1986 int f2fs_release_page(struct page *, gfp_t); 2097 1987 ··· 2124 2012 unsigned long long hit_total, total_ext; 2125 2013 int ext_tree, zombie_tree, ext_node; 2126 2014 s64 ndirty_node, ndirty_dent, ndirty_meta, ndirty_data, inmem_pages; 2127 - unsigned int ndirty_dirs, ndirty_files; 2015 + unsigned int ndirty_dirs, ndirty_files, ndirty_all; 2128 2016 int nats, dirty_nats, sits, dirty_sits, fnids; 2129 2017 int total_count, utilization; 2130 2018 int bg_gc, wb_bios; ··· 2293 2181 bool recover_inline_data(struct inode *, struct page *); 2294 2182 struct f2fs_dir_entry *find_in_inline_dir(struct inode *, 2295 2183 struct fscrypt_name *, struct page **); 2296 - struct f2fs_dir_entry *f2fs_parent_inline_dir(struct inode *, struct page **); 2297 2184 int make_empty_inline_dir(struct inode *inode, struct inode *, struct page *); 2298 2185 int f2fs_add_inline_entry(struct inode *, const struct qstr *, struct inode *, 2299 2186 nid_t, umode_t); ··· 2317 2206 */ 2318 2207 unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *, int); 2319 2208 bool f2fs_init_extent_tree(struct inode *, struct f2fs_extent *); 2209 + void f2fs_drop_extent_tree(struct inode *); 2320 2210 unsigned int f2fs_destroy_extent_node(struct inode *); 2321 2211 void f2fs_destroy_extent_tree(struct inode *); 2322 2212 bool f2fs_lookup_extent_cache(struct inode *, pgoff_t, struct extent_info *); ··· 2351 2239 static inline int f2fs_sb_has_crypto(struct super_block *sb) 2352 2240 { 2353 2241 return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_ENCRYPT); 2242 + } 2243 + 2244 + static inline int f2fs_sb_mounted_hmsmr(struct super_block *sb) 2245 + { 2246 + return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_HMSMR); 2247 + } 2248 + 2249 + static inline void set_opt_mode(struct f2fs_sb_info *sbi, unsigned int mt) 2250 + { 2251 + clear_opt(sbi, ADAPTIVE); 2252 + clear_opt(sbi, LFS); 2253 + 2254 + switch (mt) { 2255 + case F2FS_MOUNT_ADAPTIVE: 2256 + set_opt(sbi, ADAPTIVE); 2257 + break; 2258 + case F2FS_MOUNT_LFS: 2259 + set_opt(sbi, LFS); 2260 + break; 2261 + } 2354 2262 } 2355 2263 2356 2264 static inline bool f2fs_may_encrypt(struct inode *inode)
+373 -128
fs/f2fs/file.c
··· 21 21 #include <linux/mount.h> 22 22 #include <linux/pagevec.h> 23 23 #include <linux/uuid.h> 24 + #include <linux/file.h> 24 25 25 26 #include "f2fs.h" 26 27 #include "node.h" ··· 82 81 zero_user_segment(page, offset, PAGE_SIZE); 83 82 } 84 83 set_page_dirty(page); 85 - SetPageUptodate(page); 84 + if (!PageUptodate(page)) 85 + SetPageUptodate(page); 86 86 87 87 trace_f2fs_vm_page_mkwrite(page, DATA); 88 88 mapped: ··· 173 171 fi->xattr_ver = 0; 174 172 if (file_wrong_pino(inode) && inode->i_nlink == 1 && 175 173 get_parent_ino(inode, &pino)) { 176 - fi->i_pino = pino; 174 + f2fs_i_pino_write(inode, pino); 177 175 file_got_pino(inode); 178 - up_write(&fi->i_sem); 179 - 180 - mark_inode_dirty_sync(inode); 181 - f2fs_write_inode(inode, NULL); 182 - } else { 183 - up_write(&fi->i_sem); 184 176 } 177 + up_write(&fi->i_sem); 185 178 } 186 179 187 180 static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end, 188 181 int datasync, bool atomic) 189 182 { 190 183 struct inode *inode = file->f_mapping->host; 191 - struct f2fs_inode_info *fi = F2FS_I(inode); 192 184 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 193 185 nid_t ino = inode->i_ino; 194 186 int ret = 0; ··· 200 204 201 205 /* if fdatasync is triggered, let's do in-place-update */ 202 206 if (datasync || get_dirty_pages(inode) <= SM_I(sbi)->min_fsync_blocks) 203 - set_inode_flag(fi, FI_NEED_IPU); 207 + set_inode_flag(inode, FI_NEED_IPU); 204 208 ret = filemap_write_and_wait_range(inode->i_mapping, start, end); 205 - clear_inode_flag(fi, FI_NEED_IPU); 209 + clear_inode_flag(inode, FI_NEED_IPU); 206 210 207 211 if (ret) { 208 212 trace_f2fs_sync_file_exit(inode, need_cp, datasync, ret); ··· 210 214 } 211 215 212 216 /* if the inode is dirty, let's recover all the time */ 213 - if (!datasync) { 217 + if (!datasync && !f2fs_skip_inode_update(inode)) { 214 218 f2fs_write_inode(inode, NULL); 215 219 goto go_write; 216 220 } ··· 218 222 /* 219 223 * if there is no written data, don't waste time to write recovery info. 220 224 */ 221 - if (!is_inode_flag_set(fi, FI_APPEND_WRITE) && 225 + if (!is_inode_flag_set(inode, FI_APPEND_WRITE) && 222 226 !exist_written_data(sbi, ino, APPEND_INO)) { 223 227 224 228 /* it may call write_inode just prior to fsync */ 225 229 if (need_inode_page_update(sbi, ino)) 226 230 goto go_write; 227 231 228 - if (is_inode_flag_set(fi, FI_UPDATE_WRITE) || 232 + if (is_inode_flag_set(inode, FI_UPDATE_WRITE) || 229 233 exist_written_data(sbi, ino, UPDATE_INO)) 230 234 goto flush_out; 231 235 goto out; ··· 235 239 * Both of fdatasync() and fsync() are able to be recovered from 236 240 * sudden-power-off. 237 241 */ 238 - down_read(&fi->i_sem); 242 + down_read(&F2FS_I(inode)->i_sem); 239 243 need_cp = need_do_checkpoint(inode); 240 - up_read(&fi->i_sem); 244 + up_read(&F2FS_I(inode)->i_sem); 241 245 242 246 if (need_cp) { 243 247 /* all the dirty node pages should be flushed for POR */ ··· 248 252 * will be used only for fsynced inodes after checkpoint. 249 253 */ 250 254 try_to_fix_pino(inode); 251 - clear_inode_flag(fi, FI_APPEND_WRITE); 252 - clear_inode_flag(fi, FI_UPDATE_WRITE); 255 + clear_inode_flag(inode, FI_APPEND_WRITE); 256 + clear_inode_flag(inode, FI_UPDATE_WRITE); 253 257 goto out; 254 258 } 255 259 sync_nodes: 256 - ret = fsync_node_pages(sbi, ino, &wbc, atomic); 260 + ret = fsync_node_pages(sbi, inode, &wbc, atomic); 257 261 if (ret) 258 262 goto out; 259 263 ··· 264 268 } 265 269 266 270 if (need_inode_block_update(sbi, ino)) { 267 - mark_inode_dirty_sync(inode); 271 + f2fs_mark_inode_dirty_sync(inode); 268 272 f2fs_write_inode(inode, NULL); 269 273 goto sync_nodes; 270 274 } ··· 275 279 276 280 /* once recovery info is written, don't need to tack this */ 277 281 remove_ino_entry(sbi, ino, APPEND_INO); 278 - clear_inode_flag(fi, FI_APPEND_WRITE); 282 + clear_inode_flag(inode, FI_APPEND_WRITE); 279 283 flush_out: 280 284 remove_ino_entry(sbi, ino, UPDATE_INO); 281 - clear_inode_flag(fi, FI_UPDATE_WRITE); 285 + clear_inode_flag(inode, FI_UPDATE_WRITE); 282 286 ret = f2fs_issue_flush(sbi); 283 287 f2fs_update_time(sbi, REQ_TIME); 284 288 out: ··· 356 360 357 361 for (; data_ofs < isize; data_ofs = (loff_t)pgofs << PAGE_SHIFT) { 358 362 set_new_dnode(&dn, inode, NULL, NULL, 0); 359 - err = get_dnode_of_data(&dn, pgofs, LOOKUP_NODE_RA); 363 + err = get_dnode_of_data(&dn, pgofs, LOOKUP_NODE); 360 364 if (err && err != -ENOENT) { 361 365 goto fail; 362 366 } else if (err == -ENOENT) { ··· 483 487 set_data_blkaddr(dn); 484 488 invalidate_blocks(sbi, blkaddr); 485 489 if (dn->ofs_in_node == 0 && IS_INODE(dn->node_page)) 486 - clear_inode_flag(F2FS_I(dn->inode), 487 - FI_FIRST_BLOCK_WRITTEN); 490 + clear_inode_flag(dn->inode, FI_FIRST_BLOCK_WRITTEN); 488 491 nr_free++; 489 492 } 490 493 ··· 497 502 dn->inode) + ofs; 498 503 f2fs_update_extent_cache_range(dn, fofs, 0, len); 499 504 dec_valid_block_count(sbi, dn->inode, nr_free); 500 - sync_inode_page(dn); 501 505 } 502 506 dn->ofs_in_node = ofs; 503 507 ··· 610 616 return err; 611 617 } 612 618 613 - int f2fs_truncate(struct inode *inode, bool lock) 619 + int f2fs_truncate(struct inode *inode) 614 620 { 615 621 int err; 616 622 ··· 627 633 return err; 628 634 } 629 635 630 - err = truncate_blocks(inode, i_size_read(inode), lock); 636 + err = truncate_blocks(inode, i_size_read(inode), true); 631 637 if (err) 632 638 return err; 633 639 634 640 inode->i_mtime = inode->i_ctime = CURRENT_TIME; 635 - mark_inode_dirty(inode); 641 + f2fs_mark_inode_dirty_sync(inode); 636 642 return 0; 637 643 } 638 644 ··· 648 654 #ifdef CONFIG_F2FS_FS_POSIX_ACL 649 655 static void __setattr_copy(struct inode *inode, const struct iattr *attr) 650 656 { 651 - struct f2fs_inode_info *fi = F2FS_I(inode); 652 657 unsigned int ia_valid = attr->ia_valid; 653 658 654 659 if (ia_valid & ATTR_UID) ··· 668 675 669 676 if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) 670 677 mode &= ~S_ISGID; 671 - set_acl_inode(fi, mode); 678 + set_acl_inode(inode, mode); 672 679 } 673 680 } 674 681 #else ··· 678 685 int f2fs_setattr(struct dentry *dentry, struct iattr *attr) 679 686 { 680 687 struct inode *inode = d_inode(dentry); 681 - struct f2fs_inode_info *fi = F2FS_I(inode); 682 688 int err; 683 689 684 690 err = inode_change_ok(inode, attr); ··· 691 699 692 700 if (attr->ia_size <= i_size_read(inode)) { 693 701 truncate_setsize(inode, attr->ia_size); 694 - err = f2fs_truncate(inode, true); 702 + err = f2fs_truncate(inode); 695 703 if (err) 696 704 return err; 697 705 f2fs_balance_fs(F2FS_I_SB(inode), true); ··· 716 724 717 725 if (attr->ia_valid & ATTR_MODE) { 718 726 err = posix_acl_chmod(inode, get_inode_mode(inode)); 719 - if (err || is_inode_flag_set(fi, FI_ACL_MODE)) { 720 - inode->i_mode = fi->i_acl_mode; 721 - clear_inode_flag(fi, FI_ACL_MODE); 727 + if (err || is_inode_flag_set(inode, FI_ACL_MODE)) { 728 + inode->i_mode = F2FS_I(inode)->i_acl_mode; 729 + clear_inode_flag(inode, FI_ACL_MODE); 722 730 } 723 731 } 724 732 725 - mark_inode_dirty(inode); 733 + f2fs_mark_inode_dirty_sync(inode); 726 734 return err; 727 735 } 728 736 ··· 851 859 return ret; 852 860 } 853 861 854 - static int __exchange_data_block(struct inode *inode, pgoff_t src, 855 - pgoff_t dst, bool full) 862 + static int __read_out_blkaddrs(struct inode *inode, block_t *blkaddr, 863 + int *do_replace, pgoff_t off, pgoff_t len) 856 864 { 857 865 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 858 866 struct dnode_of_data dn; 859 - block_t new_addr; 860 - bool do_replace = false; 861 - int ret; 867 + int ret, done, i; 862 868 869 + next_dnode: 863 870 set_new_dnode(&dn, inode, NULL, NULL, 0); 864 - ret = get_dnode_of_data(&dn, src, LOOKUP_NODE_RA); 871 + ret = get_dnode_of_data(&dn, off, LOOKUP_NODE_RA); 865 872 if (ret && ret != -ENOENT) { 866 873 return ret; 867 874 } else if (ret == -ENOENT) { 868 - new_addr = NULL_ADDR; 869 - } else { 870 - new_addr = dn.data_blkaddr; 871 - if (!is_checkpointed_data(sbi, new_addr)) { 875 + if (dn.max_level == 0) 876 + return -ENOENT; 877 + done = min((pgoff_t)ADDRS_PER_BLOCK - dn.ofs_in_node, len); 878 + blkaddr += done; 879 + do_replace += done; 880 + goto next; 881 + } 882 + 883 + done = min((pgoff_t)ADDRS_PER_PAGE(dn.node_page, inode) - 884 + dn.ofs_in_node, len); 885 + for (i = 0; i < done; i++, blkaddr++, do_replace++, dn.ofs_in_node++) { 886 + *blkaddr = datablock_addr(dn.node_page, dn.ofs_in_node); 887 + if (!is_checkpointed_data(sbi, *blkaddr)) { 888 + 889 + if (test_opt(sbi, LFS)) { 890 + f2fs_put_dnode(&dn); 891 + return -ENOTSUPP; 892 + } 893 + 872 894 /* do not invalidate this block address */ 873 895 f2fs_update_data_blkaddr(&dn, NULL_ADDR); 874 - do_replace = true; 896 + *do_replace = 1; 897 + } 898 + } 899 + f2fs_put_dnode(&dn); 900 + next: 901 + len -= done; 902 + off += done; 903 + if (len) 904 + goto next_dnode; 905 + return 0; 906 + } 907 + 908 + static int __roll_back_blkaddrs(struct inode *inode, block_t *blkaddr, 909 + int *do_replace, pgoff_t off, int len) 910 + { 911 + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 912 + struct dnode_of_data dn; 913 + int ret, i; 914 + 915 + for (i = 0; i < len; i++, do_replace++, blkaddr++) { 916 + if (*do_replace == 0) 917 + continue; 918 + 919 + set_new_dnode(&dn, inode, NULL, NULL, 0); 920 + ret = get_dnode_of_data(&dn, off + i, LOOKUP_NODE_RA); 921 + if (ret) { 922 + dec_valid_block_count(sbi, inode, 1); 923 + invalidate_blocks(sbi, *blkaddr); 924 + } else { 925 + f2fs_update_data_blkaddr(&dn, *blkaddr); 875 926 } 876 927 f2fs_put_dnode(&dn); 877 928 } 929 + return 0; 930 + } 878 931 879 - if (new_addr == NULL_ADDR) 880 - return full ? truncate_hole(inode, dst, dst + 1) : 0; 932 + static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode, 933 + block_t *blkaddr, int *do_replace, 934 + pgoff_t src, pgoff_t dst, pgoff_t len, bool full) 935 + { 936 + struct f2fs_sb_info *sbi = F2FS_I_SB(src_inode); 937 + pgoff_t i = 0; 938 + int ret; 881 939 882 - if (do_replace) { 883 - struct page *ipage = get_node_page(sbi, inode->i_ino); 884 - struct node_info ni; 885 - 886 - if (IS_ERR(ipage)) { 887 - ret = PTR_ERR(ipage); 888 - goto err_out; 940 + while (i < len) { 941 + if (blkaddr[i] == NULL_ADDR && !full) { 942 + i++; 943 + continue; 889 944 } 890 945 891 - set_new_dnode(&dn, inode, ipage, NULL, 0); 892 - ret = f2fs_reserve_block(&dn, dst); 893 - if (ret) 894 - goto err_out; 946 + if (do_replace[i] || blkaddr[i] == NULL_ADDR) { 947 + struct dnode_of_data dn; 948 + struct node_info ni; 949 + size_t new_size; 950 + pgoff_t ilen; 895 951 896 - truncate_data_blocks_range(&dn, 1); 952 + set_new_dnode(&dn, dst_inode, NULL, NULL, 0); 953 + ret = get_dnode_of_data(&dn, dst + i, ALLOC_NODE); 954 + if (ret) 955 + return ret; 897 956 898 - get_node_info(sbi, dn.nid, &ni); 899 - f2fs_replace_block(sbi, &dn, dn.data_blkaddr, new_addr, 900 - ni.version, true, false); 901 - f2fs_put_dnode(&dn); 902 - } else { 903 - struct page *psrc, *pdst; 957 + get_node_info(sbi, dn.nid, &ni); 958 + ilen = min((pgoff_t) 959 + ADDRS_PER_PAGE(dn.node_page, dst_inode) - 960 + dn.ofs_in_node, len - i); 961 + do { 962 + dn.data_blkaddr = datablock_addr(dn.node_page, 963 + dn.ofs_in_node); 964 + truncate_data_blocks_range(&dn, 1); 904 965 905 - psrc = get_lock_data_page(inode, src, true); 906 - if (IS_ERR(psrc)) 907 - return PTR_ERR(psrc); 908 - pdst = get_new_data_page(inode, NULL, dst, true); 909 - if (IS_ERR(pdst)) { 966 + if (do_replace[i]) { 967 + f2fs_i_blocks_write(src_inode, 968 + 1, false); 969 + f2fs_i_blocks_write(dst_inode, 970 + 1, true); 971 + f2fs_replace_block(sbi, &dn, dn.data_blkaddr, 972 + blkaddr[i], ni.version, true, false); 973 + 974 + do_replace[i] = 0; 975 + } 976 + dn.ofs_in_node++; 977 + i++; 978 + new_size = (dst + i) << PAGE_SHIFT; 979 + if (dst_inode->i_size < new_size) 980 + f2fs_i_size_write(dst_inode, new_size); 981 + } while ((do_replace[i] || blkaddr[i] == NULL_ADDR) && --ilen); 982 + 983 + f2fs_put_dnode(&dn); 984 + } else { 985 + struct page *psrc, *pdst; 986 + 987 + psrc = get_lock_data_page(src_inode, src + i, true); 988 + if (IS_ERR(psrc)) 989 + return PTR_ERR(psrc); 990 + pdst = get_new_data_page(dst_inode, NULL, dst + i, 991 + true); 992 + if (IS_ERR(pdst)) { 993 + f2fs_put_page(psrc, 1); 994 + return PTR_ERR(pdst); 995 + } 996 + f2fs_copy_page(psrc, pdst); 997 + set_page_dirty(pdst); 998 + f2fs_put_page(pdst, 1); 910 999 f2fs_put_page(psrc, 1); 911 - return PTR_ERR(pdst); 912 - } 913 - f2fs_copy_page(psrc, pdst); 914 - set_page_dirty(pdst); 915 - f2fs_put_page(pdst, 1); 916 - f2fs_put_page(psrc, 1); 917 1000 918 - return truncate_hole(inode, src, src + 1); 1001 + ret = truncate_hole(src_inode, src + i, src + i + 1); 1002 + if (ret) 1003 + return ret; 1004 + i++; 1005 + } 1006 + } 1007 + return 0; 1008 + } 1009 + 1010 + static int __exchange_data_block(struct inode *src_inode, 1011 + struct inode *dst_inode, pgoff_t src, pgoff_t dst, 1012 + pgoff_t len, bool full) 1013 + { 1014 + block_t *src_blkaddr; 1015 + int *do_replace; 1016 + pgoff_t olen; 1017 + int ret; 1018 + 1019 + while (len) { 1020 + olen = min((pgoff_t)4 * ADDRS_PER_BLOCK, len); 1021 + 1022 + src_blkaddr = f2fs_kvzalloc(sizeof(block_t) * olen, GFP_KERNEL); 1023 + if (!src_blkaddr) 1024 + return -ENOMEM; 1025 + 1026 + do_replace = f2fs_kvzalloc(sizeof(int) * olen, GFP_KERNEL); 1027 + if (!do_replace) { 1028 + kvfree(src_blkaddr); 1029 + return -ENOMEM; 1030 + } 1031 + 1032 + ret = __read_out_blkaddrs(src_inode, src_blkaddr, 1033 + do_replace, src, olen); 1034 + if (ret) 1035 + goto roll_back; 1036 + 1037 + ret = __clone_blkaddrs(src_inode, dst_inode, src_blkaddr, 1038 + do_replace, src, dst, olen, full); 1039 + if (ret) 1040 + goto roll_back; 1041 + 1042 + src += olen; 1043 + dst += olen; 1044 + len -= olen; 1045 + 1046 + kvfree(src_blkaddr); 1047 + kvfree(do_replace); 919 1048 } 920 1049 return 0; 921 1050 922 - err_out: 923 - if (!get_dnode_of_data(&dn, src, LOOKUP_NODE)) { 924 - f2fs_update_data_blkaddr(&dn, new_addr); 925 - f2fs_put_dnode(&dn); 926 - } 1051 + roll_back: 1052 + __roll_back_blkaddrs(src_inode, src_blkaddr, do_replace, src, len); 1053 + kvfree(src_blkaddr); 1054 + kvfree(do_replace); 927 1055 return ret; 928 1056 } 929 1057 ··· 1051 939 { 1052 940 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 1053 941 pgoff_t nrpages = (i_size_read(inode) + PAGE_SIZE - 1) / PAGE_SIZE; 1054 - int ret = 0; 942 + int ret; 1055 943 1056 - for (; end < nrpages; start++, end++) { 1057 - f2fs_balance_fs(sbi, true); 1058 - f2fs_lock_op(sbi); 1059 - ret = __exchange_data_block(inode, end, start, true); 1060 - f2fs_unlock_op(sbi); 1061 - if (ret) 1062 - break; 1063 - } 944 + f2fs_balance_fs(sbi, true); 945 + f2fs_lock_op(sbi); 946 + 947 + f2fs_drop_extent_tree(inode); 948 + 949 + ret = __exchange_data_block(inode, inode, end, start, nrpages - end, true); 950 + f2fs_unlock_op(sbi); 1064 951 return ret; 1065 952 } 1066 953 ··· 1103 992 1104 993 ret = truncate_blocks(inode, new_size, true); 1105 994 if (!ret) 1106 - i_size_write(inode, new_size); 995 + f2fs_i_size_write(inode, new_size); 1107 996 1108 997 return ret; 1109 998 } ··· 1239 1128 } 1240 1129 1241 1130 out: 1242 - if (!(mode & FALLOC_FL_KEEP_SIZE) && i_size_read(inode) < new_size) { 1243 - i_size_write(inode, new_size); 1244 - mark_inode_dirty(inode); 1245 - update_inode_page(inode); 1246 - } 1131 + if (!(mode & FALLOC_FL_KEEP_SIZE) && i_size_read(inode) < new_size) 1132 + f2fs_i_size_write(inode, new_size); 1247 1133 1248 1134 return ret; 1249 1135 } ··· 1248 1140 static int f2fs_insert_range(struct inode *inode, loff_t offset, loff_t len) 1249 1141 { 1250 1142 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 1251 - pgoff_t pg_start, pg_end, delta, nrpages, idx; 1143 + pgoff_t nr, pg_start, pg_end, delta, idx; 1252 1144 loff_t new_size; 1253 1145 int ret = 0; 1254 1146 ··· 1283 1175 pg_start = offset >> PAGE_SHIFT; 1284 1176 pg_end = (offset + len) >> PAGE_SHIFT; 1285 1177 delta = pg_end - pg_start; 1286 - nrpages = (i_size_read(inode) + PAGE_SIZE - 1) / PAGE_SIZE; 1178 + idx = (i_size_read(inode) + PAGE_SIZE - 1) / PAGE_SIZE; 1287 1179 1288 - for (idx = nrpages - 1; idx >= pg_start && idx != -1; idx--) { 1180 + while (!ret && idx > pg_start) { 1181 + nr = idx - pg_start; 1182 + if (nr > delta) 1183 + nr = delta; 1184 + idx -= nr; 1185 + 1289 1186 f2fs_lock_op(sbi); 1290 - ret = __exchange_data_block(inode, idx, idx + delta, false); 1187 + f2fs_drop_extent_tree(inode); 1188 + 1189 + ret = __exchange_data_block(inode, inode, idx, 1190 + idx + delta, nr, false); 1291 1191 f2fs_unlock_op(sbi); 1292 - if (ret) 1293 - break; 1294 1192 } 1295 1193 1296 1194 /* write out all moved pages, if possible */ ··· 1304 1190 truncate_pagecache(inode, offset); 1305 1191 1306 1192 if (!ret) 1307 - i_size_write(inode, new_size); 1193 + f2fs_i_size_write(inode, new_size); 1308 1194 return ret; 1309 1195 } 1310 1196 ··· 1352 1238 new_size = ((loff_t)pg_end << PAGE_SHIFT) + off_end; 1353 1239 } 1354 1240 1355 - if (!(mode & FALLOC_FL_KEEP_SIZE) && i_size_read(inode) < new_size) { 1356 - i_size_write(inode, new_size); 1357 - mark_inode_dirty(inode); 1358 - update_inode_page(inode); 1359 - } 1241 + if (!(mode & FALLOC_FL_KEEP_SIZE) && i_size_read(inode) < new_size) 1242 + f2fs_i_size_write(inode, new_size); 1360 1243 1361 1244 return ret; 1362 1245 } ··· 1396 1285 1397 1286 if (!ret) { 1398 1287 inode->i_mtime = inode->i_ctime = CURRENT_TIME; 1399 - mark_inode_dirty(inode); 1288 + f2fs_mark_inode_dirty_sync(inode); 1400 1289 f2fs_update_time(F2FS_I_SB(inode), REQ_TIME); 1401 1290 } 1402 1291 ··· 1421 1310 if (f2fs_is_atomic_file(inode)) 1422 1311 drop_inmem_pages(inode); 1423 1312 if (f2fs_is_volatile_file(inode)) { 1424 - clear_inode_flag(F2FS_I(inode), FI_VOLATILE_FILE); 1425 - set_inode_flag(F2FS_I(inode), FI_DROP_CACHE); 1313 + clear_inode_flag(inode, FI_VOLATILE_FILE); 1314 + set_inode_flag(inode, FI_DROP_CACHE); 1426 1315 filemap_fdatawrite(inode->i_mapping); 1427 - clear_inode_flag(F2FS_I(inode), FI_DROP_CACHE); 1316 + clear_inode_flag(inode, FI_DROP_CACHE); 1428 1317 } 1429 1318 return 0; 1430 1319 } ··· 1487 1376 fi->i_flags = flags; 1488 1377 inode_unlock(inode); 1489 1378 1490 - f2fs_set_inode_flags(inode); 1491 1379 inode->i_ctime = CURRENT_TIME; 1492 - mark_inode_dirty(inode); 1380 + f2fs_set_inode_flags(inode); 1493 1381 out: 1494 1382 mnt_drop_write_file(filp); 1495 1383 return ret; ··· 1522 1412 if (ret) 1523 1413 goto out; 1524 1414 1525 - set_inode_flag(F2FS_I(inode), FI_ATOMIC_FILE); 1415 + set_inode_flag(inode, FI_ATOMIC_FILE); 1526 1416 f2fs_update_time(F2FS_I_SB(inode), REQ_TIME); 1527 1417 1528 1418 if (!get_dirty_pages(inode)) ··· 1533 1423 inode->i_ino, get_dirty_pages(inode)); 1534 1424 ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX); 1535 1425 if (ret) 1536 - clear_inode_flag(F2FS_I(inode), FI_ATOMIC_FILE); 1426 + clear_inode_flag(inode, FI_ATOMIC_FILE); 1537 1427 out: 1538 1428 inode_unlock(inode); 1539 1429 mnt_drop_write_file(filp); ··· 1558 1448 goto err_out; 1559 1449 1560 1450 if (f2fs_is_atomic_file(inode)) { 1561 - clear_inode_flag(F2FS_I(inode), FI_ATOMIC_FILE); 1451 + clear_inode_flag(inode, FI_ATOMIC_FILE); 1562 1452 ret = commit_inmem_pages(inode); 1563 1453 if (ret) { 1564 - set_inode_flag(F2FS_I(inode), FI_ATOMIC_FILE); 1454 + set_inode_flag(inode, FI_ATOMIC_FILE); 1565 1455 goto err_out; 1566 1456 } 1567 1457 } ··· 1594 1484 if (ret) 1595 1485 goto out; 1596 1486 1597 - set_inode_flag(F2FS_I(inode), FI_VOLATILE_FILE); 1487 + set_inode_flag(inode, FI_VOLATILE_FILE); 1598 1488 f2fs_update_time(F2FS_I_SB(inode), REQ_TIME); 1599 1489 out: 1600 1490 inode_unlock(inode); ··· 1648 1538 if (f2fs_is_atomic_file(inode)) 1649 1539 drop_inmem_pages(inode); 1650 1540 if (f2fs_is_volatile_file(inode)) { 1651 - clear_inode_flag(F2FS_I(inode), FI_VOLATILE_FILE); 1541 + clear_inode_flag(inode, FI_VOLATILE_FILE); 1652 1542 ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 0, true); 1653 1543 } 1654 1544 ··· 1981 1871 continue; 1982 1872 } 1983 1873 1984 - set_inode_flag(F2FS_I(inode), FI_DO_DEFRAG); 1874 + set_inode_flag(inode, FI_DO_DEFRAG); 1985 1875 1986 1876 idx = map.m_lblk; 1987 1877 while (idx < map.m_lblk + map.m_len && cnt < blk_per_seg) { ··· 2006 1896 if (idx < pg_end && cnt < blk_per_seg) 2007 1897 goto do_map; 2008 1898 2009 - clear_inode_flag(F2FS_I(inode), FI_DO_DEFRAG); 1899 + clear_inode_flag(inode, FI_DO_DEFRAG); 2010 1900 2011 1901 err = filemap_fdatawrite(inode->i_mapping); 2012 1902 if (err) 2013 1903 goto out; 2014 1904 } 2015 1905 clear_out: 2016 - clear_inode_flag(F2FS_I(inode), FI_DO_DEFRAG); 1906 + clear_inode_flag(inode, FI_DO_DEFRAG); 2017 1907 out: 2018 1908 inode_unlock(inode); 2019 1909 if (!err) ··· 2069 1959 return err; 2070 1960 } 2071 1961 1962 + static int f2fs_move_file_range(struct file *file_in, loff_t pos_in, 1963 + struct file *file_out, loff_t pos_out, size_t len) 1964 + { 1965 + struct inode *src = file_inode(file_in); 1966 + struct inode *dst = file_inode(file_out); 1967 + struct f2fs_sb_info *sbi = F2FS_I_SB(src); 1968 + size_t olen = len, dst_max_i_size = 0; 1969 + size_t dst_osize; 1970 + int ret; 1971 + 1972 + if (file_in->f_path.mnt != file_out->f_path.mnt || 1973 + src->i_sb != dst->i_sb) 1974 + return -EXDEV; 1975 + 1976 + if (unlikely(f2fs_readonly(src->i_sb))) 1977 + return -EROFS; 1978 + 1979 + if (S_ISDIR(src->i_mode) || S_ISDIR(dst->i_mode)) 1980 + return -EISDIR; 1981 + 1982 + if (f2fs_encrypted_inode(src) || f2fs_encrypted_inode(dst)) 1983 + return -EOPNOTSUPP; 1984 + 1985 + inode_lock(src); 1986 + if (src != dst) 1987 + inode_lock(dst); 1988 + 1989 + ret = -EINVAL; 1990 + if (pos_in + len > src->i_size || pos_in + len < pos_in) 1991 + goto out_unlock; 1992 + if (len == 0) 1993 + olen = len = src->i_size - pos_in; 1994 + if (pos_in + len == src->i_size) 1995 + len = ALIGN(src->i_size, F2FS_BLKSIZE) - pos_in; 1996 + if (len == 0) { 1997 + ret = 0; 1998 + goto out_unlock; 1999 + } 2000 + 2001 + dst_osize = dst->i_size; 2002 + if (pos_out + olen > dst->i_size) 2003 + dst_max_i_size = pos_out + olen; 2004 + 2005 + /* verify the end result is block aligned */ 2006 + if (!IS_ALIGNED(pos_in, F2FS_BLKSIZE) || 2007 + !IS_ALIGNED(pos_in + len, F2FS_BLKSIZE) || 2008 + !IS_ALIGNED(pos_out, F2FS_BLKSIZE)) 2009 + goto out_unlock; 2010 + 2011 + ret = f2fs_convert_inline_inode(src); 2012 + if (ret) 2013 + goto out_unlock; 2014 + 2015 + ret = f2fs_convert_inline_inode(dst); 2016 + if (ret) 2017 + goto out_unlock; 2018 + 2019 + /* write out all dirty pages from offset */ 2020 + ret = filemap_write_and_wait_range(src->i_mapping, 2021 + pos_in, pos_in + len); 2022 + if (ret) 2023 + goto out_unlock; 2024 + 2025 + ret = filemap_write_and_wait_range(dst->i_mapping, 2026 + pos_out, pos_out + len); 2027 + if (ret) 2028 + goto out_unlock; 2029 + 2030 + f2fs_balance_fs(sbi, true); 2031 + f2fs_lock_op(sbi); 2032 + ret = __exchange_data_block(src, dst, pos_in, 2033 + pos_out, len >> F2FS_BLKSIZE_BITS, false); 2034 + 2035 + if (!ret) { 2036 + if (dst_max_i_size) 2037 + f2fs_i_size_write(dst, dst_max_i_size); 2038 + else if (dst_osize != dst->i_size) 2039 + f2fs_i_size_write(dst, dst_osize); 2040 + } 2041 + f2fs_unlock_op(sbi); 2042 + out_unlock: 2043 + if (src != dst) 2044 + inode_unlock(dst); 2045 + inode_unlock(src); 2046 + return ret; 2047 + } 2048 + 2049 + static int f2fs_ioc_move_range(struct file *filp, unsigned long arg) 2050 + { 2051 + struct f2fs_move_range range; 2052 + struct fd dst; 2053 + int err; 2054 + 2055 + if (!(filp->f_mode & FMODE_READ) || 2056 + !(filp->f_mode & FMODE_WRITE)) 2057 + return -EBADF; 2058 + 2059 + if (copy_from_user(&range, (struct f2fs_move_range __user *)arg, 2060 + sizeof(range))) 2061 + return -EFAULT; 2062 + 2063 + dst = fdget(range.dst_fd); 2064 + if (!dst.file) 2065 + return -EBADF; 2066 + 2067 + if (!(dst.file->f_mode & FMODE_WRITE)) { 2068 + err = -EBADF; 2069 + goto err_out; 2070 + } 2071 + 2072 + err = mnt_want_write_file(filp); 2073 + if (err) 2074 + goto err_out; 2075 + 2076 + err = f2fs_move_file_range(filp, range.pos_in, dst.file, 2077 + range.pos_out, range.len); 2078 + 2079 + mnt_drop_write_file(filp); 2080 + 2081 + if (copy_to_user((struct f2fs_move_range __user *)arg, 2082 + &range, sizeof(range))) 2083 + err = -EFAULT; 2084 + err_out: 2085 + fdput(dst); 2086 + return err; 2087 + } 2088 + 2072 2089 long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) 2073 2090 { 2074 2091 switch (cmd) { ··· 2231 1994 return f2fs_ioc_write_checkpoint(filp, arg); 2232 1995 case F2FS_IOC_DEFRAGMENT: 2233 1996 return f2fs_ioc_defragment(filp, arg); 1997 + case F2FS_IOC_MOVE_RANGE: 1998 + return f2fs_ioc_move_range(filp, arg); 2234 1999 default: 2235 2000 return -ENOTTY; 2236 2001 } ··· 2242 2003 { 2243 2004 struct file *file = iocb->ki_filp; 2244 2005 struct inode *inode = file_inode(file); 2006 + struct blk_plug plug; 2245 2007 ssize_t ret; 2246 2008 2247 2009 if (f2fs_encrypted_inode(inode) && ··· 2254 2014 ret = generic_write_checks(iocb, from); 2255 2015 if (ret > 0) { 2256 2016 ret = f2fs_preallocate_blocks(iocb, from); 2257 - if (!ret) 2017 + if (!ret) { 2018 + blk_start_plug(&plug); 2258 2019 ret = __generic_file_write_iter(iocb, from); 2020 + blk_finish_plug(&plug); 2021 + } 2259 2022 } 2260 2023 inode_unlock(inode); 2261 2024 ··· 2292 2049 case F2FS_IOC_GARBAGE_COLLECT: 2293 2050 case F2FS_IOC_WRITE_CHECKPOINT: 2294 2051 case F2FS_IOC_DEFRAGMENT: 2052 + break; 2053 + case F2FS_IOC_MOVE_RANGE: 2295 2054 break; 2296 2055 default: 2297 2056 return -ENOIOCTLCMD;
+45 -7
fs/f2fs/gc.c
··· 594 594 /* write page */ 595 595 lock_page(fio.encrypted_page); 596 596 597 - if (unlikely(!PageUptodate(fio.encrypted_page))) { 597 + if (unlikely(fio.encrypted_page->mapping != META_MAPPING(fio.sbi))) { 598 598 err = -EIO; 599 599 goto put_page_out; 600 600 } 601 - if (unlikely(fio.encrypted_page->mapping != META_MAPPING(fio.sbi))) { 601 + if (unlikely(!PageUptodate(fio.encrypted_page))) { 602 602 err = -EIO; 603 603 goto put_page_out; 604 604 } ··· 619 619 f2fs_submit_page_mbio(&fio); 620 620 621 621 f2fs_update_data_blkaddr(&dn, newaddr); 622 - set_inode_flag(F2FS_I(inode), FI_APPEND_WRITE); 622 + set_inode_flag(inode, FI_APPEND_WRITE); 623 623 if (page->index == 0) 624 - set_inode_flag(F2FS_I(inode), FI_FIRST_BLOCK_WRITTEN); 624 + set_inode_flag(inode, FI_FIRST_BLOCK_WRITTEN); 625 625 put_page_out: 626 626 f2fs_put_page(fio.encrypted_page, 1); 627 627 recover_block: ··· 656 656 .page = page, 657 657 .encrypted_page = NULL, 658 658 }; 659 + bool is_dirty = PageDirty(page); 660 + int err; 661 + 662 + retry: 659 663 set_page_dirty(page); 660 664 f2fs_wait_on_page_writeback(page, DATA, true); 661 665 if (clear_page_dirty_for_io(page)) 662 666 inode_dec_dirty_pages(inode); 667 + 663 668 set_cold_data(page); 664 - do_write_data_page(&fio); 669 + 670 + err = do_write_data_page(&fio); 671 + if (err == -ENOMEM && is_dirty) { 672 + congestion_wait(BLK_RW_ASYNC, HZ/50); 673 + goto retry; 674 + } 675 + 665 676 clear_cold_data(page); 666 677 } 667 678 out: ··· 759 748 /* phase 3 */ 760 749 inode = find_gc_inode(gc_list, dni.ino); 761 750 if (inode) { 751 + struct f2fs_inode_info *fi = F2FS_I(inode); 752 + bool locked = false; 753 + 754 + if (S_ISREG(inode->i_mode)) { 755 + if (!down_write_trylock(&fi->dio_rwsem[READ])) 756 + continue; 757 + if (!down_write_trylock( 758 + &fi->dio_rwsem[WRITE])) { 759 + up_write(&fi->dio_rwsem[READ]); 760 + continue; 761 + } 762 + locked = true; 763 + } 764 + 762 765 start_bidx = start_bidx_of_node(nofs, inode) 763 766 + ofs_in_node; 764 767 if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode)) 765 768 move_encrypted_block(inode, start_bidx); 766 769 else 767 770 move_data_page(inode, start_bidx, gc_type); 771 + 772 + if (locked) { 773 + up_write(&fi->dio_rwsem[WRITE]); 774 + up_write(&fi->dio_rwsem[READ]); 775 + } 776 + 768 777 stat_inc_data_blk_count(sbi, 1, gc_type); 769 778 } 770 779 } ··· 833 802 blk_start_plug(&plug); 834 803 835 804 for (segno = start_segno; segno < end_segno; segno++) { 805 + 806 + if (get_valid_blocks(sbi, segno, 1) == 0) 807 + continue; 808 + 836 809 /* find segment summary of victim */ 837 810 sum_page = find_get_page(META_MAPPING(sbi), 838 811 GET_SUM_BLOCK(sbi, segno)); ··· 912 877 * enough free sections, we should flush dent/node blocks and do 913 878 * garbage collections. 914 879 */ 915 - if (__get_victim(sbi, &segno, gc_type) || prefree_segments(sbi)) 880 + if (__get_victim(sbi, &segno, gc_type) || 881 + prefree_segments(sbi)) { 916 882 write_checkpoint(sbi, &cpc); 917 - else if (has_not_enough_free_secs(sbi, 0)) 883 + segno = NULL_SEGNO; 884 + } else if (has_not_enough_free_secs(sbi, 0)) { 918 885 write_checkpoint(sbi, &cpc); 886 + } 919 887 } 920 888 921 889 if (segno == NULL_SEGNO && !__get_victim(sbi, &segno, gc_type))
+31 -61
fs/f2fs/inline.c
··· 59 59 memcpy(dst_addr, src_addr, MAX_INLINE_DATA); 60 60 flush_dcache_page(page); 61 61 kunmap_atomic(dst_addr); 62 - SetPageUptodate(page); 62 + if (!PageUptodate(page)) 63 + SetPageUptodate(page); 63 64 } 64 65 65 66 bool truncate_inline_inode(struct page *ipage, u64 from) ··· 74 73 75 74 f2fs_wait_on_page_writeback(ipage, NODE, true); 76 75 memset(addr + from, 0, MAX_INLINE_DATA - from); 77 - 76 + set_page_dirty(ipage); 78 77 return true; 79 78 } 80 79 ··· 98 97 else 99 98 read_inline_data(page, ipage); 100 99 101 - SetPageUptodate(page); 100 + if (!PageUptodate(page)) 101 + SetPageUptodate(page); 102 102 f2fs_put_page(ipage, 1); 103 103 unlock_page(page); 104 104 return 0; ··· 141 139 inode_dec_dirty_pages(dn->inode); 142 140 143 141 /* this converted inline_data should be recovered. */ 144 - set_inode_flag(F2FS_I(dn->inode), FI_APPEND_WRITE); 142 + set_inode_flag(dn->inode, FI_APPEND_WRITE); 145 143 146 144 /* clear inline data and flag after data writeback */ 147 145 truncate_inline_inode(dn->inode_page, 0); ··· 149 147 clear_out: 150 148 stat_dec_inline_inode(dn->inode); 151 149 f2fs_clear_inline_inode(dn->inode); 152 - sync_inode_page(dn); 153 150 f2fs_put_dnode(dn); 154 151 return 0; 155 152 } ··· 214 213 dst_addr = inline_data_addr(dn.inode_page); 215 214 memcpy(dst_addr, src_addr, MAX_INLINE_DATA); 216 215 kunmap_atomic(src_addr); 216 + set_page_dirty(dn.inode_page); 217 217 218 - set_inode_flag(F2FS_I(inode), FI_APPEND_WRITE); 219 - set_inode_flag(F2FS_I(inode), FI_DATA_EXIST); 218 + set_inode_flag(inode, FI_APPEND_WRITE); 219 + set_inode_flag(inode, FI_DATA_EXIST); 220 220 221 - sync_inode_page(&dn); 222 221 clear_inline_node(dn.inode_page); 223 222 f2fs_put_dnode(&dn); 224 223 return 0; ··· 254 253 dst_addr = inline_data_addr(ipage); 255 254 memcpy(dst_addr, src_addr, MAX_INLINE_DATA); 256 255 257 - set_inode_flag(F2FS_I(inode), FI_INLINE_DATA); 258 - set_inode_flag(F2FS_I(inode), FI_DATA_EXIST); 256 + set_inode_flag(inode, FI_INLINE_DATA); 257 + set_inode_flag(inode, FI_DATA_EXIST); 259 258 260 - update_inode(inode, ipage); 259 + set_page_dirty(ipage); 261 260 f2fs_put_page(ipage, 1); 262 261 return true; 263 262 } ··· 268 267 if (!truncate_inline_inode(ipage, 0)) 269 268 return false; 270 269 f2fs_clear_inline_inode(inode); 271 - update_inode(inode, ipage); 272 270 f2fs_put_page(ipage, 1); 273 271 } else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) { 274 272 if (truncate_blocks(inode, 0, false)) ··· 289 289 f2fs_hash_t namehash; 290 290 291 291 ipage = get_node_page(sbi, dir->i_ino); 292 - if (IS_ERR(ipage)) 292 + if (IS_ERR(ipage)) { 293 + *res_page = ipage; 293 294 return NULL; 295 + } 294 296 295 297 namehash = f2fs_dentry_hash(&name); 296 298 ··· 306 304 else 307 305 f2fs_put_page(ipage, 0); 308 306 309 - return de; 310 - } 311 - 312 - struct f2fs_dir_entry *f2fs_parent_inline_dir(struct inode *dir, 313 - struct page **p) 314 - { 315 - struct f2fs_sb_info *sbi = F2FS_I_SB(dir); 316 - struct page *ipage; 317 - struct f2fs_dir_entry *de; 318 - struct f2fs_inline_dentry *dentry_blk; 319 - 320 - ipage = get_node_page(sbi, dir->i_ino); 321 - if (IS_ERR(ipage)) 322 - return NULL; 323 - 324 - dentry_blk = inline_data_addr(ipage); 325 - de = &dentry_blk->dentry[1]; 326 - *p = ipage; 327 - unlock_page(ipage); 328 307 return de; 329 308 } 330 309 ··· 323 340 set_page_dirty(ipage); 324 341 325 342 /* update i_size to MAX_INLINE_DATA */ 326 - if (i_size_read(inode) < MAX_INLINE_DATA) { 327 - i_size_write(inode, MAX_INLINE_DATA); 328 - set_inode_flag(F2FS_I(inode), FI_UPDATE_DIR); 329 - } 343 + if (i_size_read(inode) < MAX_INLINE_DATA) 344 + f2fs_i_size_write(inode, MAX_INLINE_DATA); 330 345 return 0; 331 346 } 332 347 ··· 373 392 NR_INLINE_DENTRY * F2FS_SLOT_LEN); 374 393 375 394 kunmap_atomic(dentry_blk); 376 - SetPageUptodate(page); 395 + if (!PageUptodate(page)) 396 + SetPageUptodate(page); 377 397 set_page_dirty(page); 378 398 379 399 /* clear inline dir and flag after data writeback */ 380 400 truncate_inline_inode(ipage, 0); 381 401 382 402 stat_dec_inline_dir(dir); 383 - clear_inode_flag(F2FS_I(dir), FI_INLINE_DENTRY); 403 + clear_inode_flag(dir, FI_INLINE_DENTRY); 384 404 385 - F2FS_I(dir)->i_current_depth = 1; 386 - if (i_size_read(dir) < PAGE_SIZE) { 387 - i_size_write(dir, PAGE_SIZE); 388 - set_inode_flag(F2FS_I(dir), FI_UPDATE_DIR); 389 - } 390 - 391 - sync_inode_page(&dn); 405 + f2fs_i_depth_write(dir, 1); 406 + if (i_size_read(dir) < PAGE_SIZE) 407 + f2fs_i_size_write(dir, PAGE_SIZE); 392 408 out: 393 409 f2fs_put_page(page, 1); 394 410 return err; ··· 443 465 struct f2fs_inline_dentry *inline_dentry) 444 466 { 445 467 struct f2fs_inline_dentry *backup_dentry; 446 - struct f2fs_inode_info *fi = F2FS_I(dir); 447 468 int err; 448 469 449 470 backup_dentry = f2fs_kmalloc(sizeof(struct f2fs_inline_dentry), ··· 464 487 lock_page(ipage); 465 488 466 489 stat_dec_inline_dir(dir); 467 - clear_inode_flag(fi, FI_INLINE_DENTRY); 468 - update_inode(dir, ipage); 490 + clear_inode_flag(dir, FI_INLINE_DENTRY); 469 491 kfree(backup_dentry); 470 492 return 0; 471 493 recover: 472 494 lock_page(ipage); 473 495 memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA); 474 - fi->i_current_depth = 0; 475 - i_size_write(dir, MAX_INLINE_DATA); 476 - update_inode(dir, ipage); 496 + f2fs_i_depth_write(dir, 0); 497 + f2fs_i_size_write(dir, MAX_INLINE_DATA); 498 + set_page_dirty(ipage); 477 499 f2fs_put_page(ipage, 1); 478 500 479 501 kfree(backup_dentry); ··· 536 560 537 561 /* we don't need to mark_inode_dirty now */ 538 562 if (inode) { 539 - F2FS_I(inode)->i_pino = dir->i_ino; 540 - update_inode(inode, page); 563 + f2fs_i_pino_write(inode, dir->i_ino); 541 564 f2fs_put_page(page, 1); 542 565 } 543 566 ··· 544 569 fail: 545 570 if (inode) 546 571 up_write(&F2FS_I(inode)->i_sem); 547 - 548 - if (is_inode_flag_set(F2FS_I(dir), FI_UPDATE_DIR)) { 549 - update_inode(dir, ipage); 550 - clear_inode_flag(F2FS_I(dir), FI_UPDATE_DIR); 551 - } 552 572 out: 553 573 f2fs_put_page(ipage, 1); 554 574 return err; ··· 567 597 &inline_dentry->dentry_bitmap); 568 598 569 599 set_page_dirty(page); 600 + f2fs_put_page(page, 1); 570 601 571 602 dir->i_ctime = dir->i_mtime = CURRENT_TIME; 603 + f2fs_mark_inode_dirty_sync(dir); 572 604 573 605 if (inode) 574 - f2fs_drop_nlink(dir, inode, page); 575 - 576 - f2fs_put_page(page, 1); 606 + f2fs_drop_nlink(dir, inode); 577 607 } 578 608 579 609 bool f2fs_empty_inline_dir(struct inode *dir)
+36 -17
fs/f2fs/inode.c
··· 18 18 19 19 #include <trace/events/f2fs.h> 20 20 21 + void f2fs_mark_inode_dirty_sync(struct inode *inode) 22 + { 23 + if (f2fs_inode_dirtied(inode)) 24 + return; 25 + mark_inode_dirty_sync(inode); 26 + } 27 + 21 28 void f2fs_set_inode_flags(struct inode *inode) 22 29 { 23 30 unsigned int flags = F2FS_I(inode)->i_flags; ··· 42 35 new_fl |= S_DIRSYNC; 43 36 inode_set_flags(inode, new_fl, 44 37 S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC); 38 + f2fs_mark_inode_dirty_sync(inode); 45 39 } 46 40 47 41 static void __get_inode_rdev(struct inode *inode, struct f2fs_inode *ri) ··· 93 85 if (*start++) { 94 86 f2fs_wait_on_page_writeback(ipage, NODE, true); 95 87 96 - set_inode_flag(F2FS_I(inode), FI_DATA_EXIST); 97 - set_raw_inline(F2FS_I(inode), F2FS_INODE(ipage)); 88 + set_inode_flag(inode, FI_DATA_EXIST); 89 + set_raw_inline(inode, F2FS_INODE(ipage)); 98 90 set_page_dirty(ipage); 99 91 return; 100 92 } ··· 149 141 if (f2fs_init_extent_tree(inode, &ri->i_ext)) 150 142 set_page_dirty(node_page); 151 143 152 - get_inline_info(fi, ri); 144 + get_inline_info(inode, ri); 153 145 154 146 /* check data exist */ 155 147 if (f2fs_has_inline_data(inode) && !f2fs_exist_data(inode)) ··· 159 151 __get_inode_rdev(inode, ri); 160 152 161 153 if (__written_first_block(ri)) 162 - set_inode_flag(F2FS_I(inode), FI_FIRST_BLOCK_WRITTEN); 154 + set_inode_flag(inode, FI_FIRST_BLOCK_WRITTEN); 155 + 156 + if (!need_inode_block_update(sbi, inode->i_ino)) 157 + fi->last_disk_size = inode->i_size; 163 158 164 159 f2fs_put_page(node_page, 1); 165 160 ··· 238 227 { 239 228 struct f2fs_inode *ri; 240 229 230 + f2fs_inode_synced(inode); 231 + 241 232 f2fs_wait_on_page_writeback(node_page, NODE, true); 242 233 243 234 ri = F2FS_INODE(node_page); ··· 257 244 &ri->i_ext); 258 245 else 259 246 memset(&ri->i_ext, 0, sizeof(ri->i_ext)); 260 - set_raw_inline(F2FS_I(inode), ri); 247 + set_raw_inline(inode, ri); 261 248 262 249 ri->i_atime = cpu_to_le64(inode->i_atime.tv_sec); 263 250 ri->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec); ··· 274 261 275 262 __set_inode_rdev(inode, ri); 276 263 set_cold_node(inode, node_page); 277 - clear_inode_flag(F2FS_I(inode), FI_DIRTY_INODE); 278 264 279 265 /* deleted inode */ 280 266 if (inode->i_nlink == 0) ··· 297 285 } else if (err != -ENOENT) { 298 286 f2fs_stop_checkpoint(sbi, false); 299 287 } 288 + f2fs_inode_synced(inode); 300 289 return 0; 301 290 } 302 291 ret = update_inode(inode, node_page); ··· 313 300 inode->i_ino == F2FS_META_INO(sbi)) 314 301 return 0; 315 302 316 - if (!is_inode_flag_set(F2FS_I(inode), FI_DIRTY_INODE)) 303 + if (!is_inode_flag_set(inode, FI_DIRTY_INODE)) 317 304 return 0; 318 305 319 306 /* ··· 331 318 void f2fs_evict_inode(struct inode *inode) 332 319 { 333 320 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 334 - struct f2fs_inode_info *fi = F2FS_I(inode); 335 - nid_t xnid = fi->i_xattr_nid; 321 + nid_t xnid = F2FS_I(inode)->i_xattr_nid; 336 322 int err = 0; 337 323 338 324 /* some remained atomic pages should discarded */ ··· 353 341 if (inode->i_nlink || is_bad_inode(inode)) 354 342 goto no_delete; 355 343 344 + #ifdef CONFIG_F2FS_FAULT_INJECTION 345 + if (time_to_inject(FAULT_EVICT_INODE)) 346 + goto no_delete; 347 + #endif 348 + 356 349 sb_start_intwrite(inode->i_sb); 357 - set_inode_flag(fi, FI_NO_ALLOC); 350 + set_inode_flag(inode, FI_NO_ALLOC); 358 351 i_size_write(inode, 0); 359 352 retry: 360 353 if (F2FS_HAS_BLOCKS(inode)) 361 - err = f2fs_truncate(inode, true); 354 + err = f2fs_truncate(inode); 362 355 363 356 if (!err) { 364 357 f2fs_lock_op(sbi); ··· 377 360 goto retry; 378 361 } 379 362 363 + if (err) 364 + update_inode_page(inode); 380 365 sb_end_intwrite(inode->i_sb); 381 366 no_delete: 382 367 stat_dec_inline_xattr(inode); ··· 388 369 invalidate_mapping_pages(NODE_MAPPING(sbi), inode->i_ino, inode->i_ino); 389 370 if (xnid) 390 371 invalidate_mapping_pages(NODE_MAPPING(sbi), xnid, xnid); 391 - if (is_inode_flag_set(fi, FI_APPEND_WRITE)) 372 + if (is_inode_flag_set(inode, FI_APPEND_WRITE)) 392 373 add_ino_entry(sbi, inode->i_ino, APPEND_INO); 393 - if (is_inode_flag_set(fi, FI_UPDATE_WRITE)) 374 + if (is_inode_flag_set(inode, FI_UPDATE_WRITE)) 394 375 add_ino_entry(sbi, inode->i_ino, UPDATE_INO); 395 - if (is_inode_flag_set(fi, FI_FREE_NID)) { 376 + if (is_inode_flag_set(inode, FI_FREE_NID)) { 396 377 alloc_nid_failed(sbi, inode->i_ino); 397 - clear_inode_flag(fi, FI_FREE_NID); 378 + clear_inode_flag(inode, FI_FREE_NID); 398 379 } 399 380 f2fs_bug_on(sbi, err && 400 381 !exist_written_data(sbi, inode->i_ino, ORPHAN_INO)); ··· 426 407 f2fs_msg(sbi->sb, KERN_WARNING, 427 408 "Too many orphan inodes, run fsck to fix."); 428 409 } else { 429 - add_orphan_inode(sbi, inode->i_ino); 410 + add_orphan_inode(inode); 430 411 } 431 412 alloc_nid_done(sbi, inode->i_ino); 432 413 } else { 433 - set_inode_flag(F2FS_I(inode), FI_FREE_NID); 414 + set_inode_flag(inode, FI_FREE_NID); 434 415 } 435 416 436 417 f2fs_unlock_op(sbi);
+79 -68
fs/f2fs/namei.c
··· 60 60 if (f2fs_encrypted_inode(dir) && f2fs_may_encrypt(inode)) 61 61 f2fs_set_encrypted_inode(inode); 62 62 63 + set_inode_flag(inode, FI_NEW_INODE); 64 + 65 + if (test_opt(sbi, INLINE_XATTR)) 66 + set_inode_flag(inode, FI_INLINE_XATTR); 63 67 if (test_opt(sbi, INLINE_DATA) && f2fs_may_inline_data(inode)) 64 - set_inode_flag(F2FS_I(inode), FI_INLINE_DATA); 68 + set_inode_flag(inode, FI_INLINE_DATA); 65 69 if (f2fs_may_inline_dentry(inode)) 66 - set_inode_flag(F2FS_I(inode), FI_INLINE_DENTRY); 70 + set_inode_flag(inode, FI_INLINE_DENTRY); 67 71 68 72 f2fs_init_extent_tree(inode, NULL); 69 73 ··· 76 72 stat_inc_inline_dir(inode); 77 73 78 74 trace_f2fs_new_inode(inode, 0); 79 - mark_inode_dirty(inode); 80 75 return inode; 81 76 82 77 fail: 83 78 trace_f2fs_new_inode(inode, err); 84 79 make_bad_inode(inode); 85 80 if (nid_free) 86 - set_inode_flag(F2FS_I(inode), FI_FREE_NID); 81 + set_inode_flag(inode, FI_FREE_NID); 87 82 iput(inode); 88 83 return ERR_PTR(err); 89 84 } ··· 180 177 inode->i_ctime = CURRENT_TIME; 181 178 ihold(inode); 182 179 183 - set_inode_flag(F2FS_I(inode), FI_INC_LINK); 180 + set_inode_flag(inode, FI_INC_LINK); 184 181 f2fs_lock_op(sbi); 185 182 err = f2fs_add_link(dentry, inode); 186 183 if (err) ··· 193 190 f2fs_sync_fs(sbi->sb, 1); 194 191 return 0; 195 192 out: 196 - clear_inode_flag(F2FS_I(inode), FI_INC_LINK); 193 + clear_inode_flag(inode, FI_INC_LINK); 197 194 iput(inode); 198 195 f2fs_unlock_op(sbi); 199 196 return err; ··· 202 199 struct dentry *f2fs_get_parent(struct dentry *child) 203 200 { 204 201 struct qstr dotdot = QSTR_INIT("..", 2); 205 - unsigned long ino = f2fs_inode_by_name(d_inode(child), &dotdot); 206 - if (!ino) 202 + struct page *page; 203 + unsigned long ino = f2fs_inode_by_name(d_inode(child), &dotdot, &page); 204 + if (!ino) { 205 + if (IS_ERR(page)) 206 + return ERR_CAST(page); 207 207 return ERR_PTR(-ENOENT); 208 + } 208 209 return d_obtain_alias(f2fs_iget(child->d_sb, ino)); 209 210 } 210 211 ··· 236 229 if (de) { 237 230 f2fs_dentry_kunmap(dir, page); 238 231 f2fs_put_page(page, 0); 232 + } else if (IS_ERR(page)) { 233 + err = PTR_ERR(page); 234 + goto out; 239 235 } else { 240 236 err = __f2fs_add_link(dir, &dot, NULL, dir->i_ino, S_IFDIR); 241 237 if (err) ··· 249 239 if (de) { 250 240 f2fs_dentry_kunmap(dir, page); 251 241 f2fs_put_page(page, 0); 242 + } else if (IS_ERR(page)) { 243 + err = PTR_ERR(page); 252 244 } else { 253 245 err = __f2fs_add_link(dir, &dotdot, NULL, pino, S_IFDIR); 254 246 } 255 247 out: 256 - if (!err) { 257 - clear_inode_flag(F2FS_I(dir), FI_INLINE_DOTS); 258 - mark_inode_dirty(dir); 259 - } 248 + if (!err) 249 + clear_inode_flag(dir, FI_INLINE_DOTS); 260 250 261 251 f2fs_unlock_op(sbi); 262 252 return err; ··· 291 281 return ERR_PTR(-ENAMETOOLONG); 292 282 293 283 de = f2fs_find_entry(dir, &dentry->d_name, &page); 294 - if (!de) 284 + if (!de) { 285 + if (IS_ERR(page)) 286 + return (struct dentry *)page; 295 287 return d_splice_alias(inode, dentry); 288 + } 296 289 297 290 ino = le32_to_cpu(de->ino); 298 291 f2fs_dentry_kunmap(dir, page); ··· 342 329 trace_f2fs_unlink_enter(dir, dentry); 343 330 344 331 de = f2fs_find_entry(dir, &dentry->d_name, &page); 345 - if (!de) 332 + if (!de) { 333 + if (IS_ERR(page)) 334 + err = PTR_ERR(page); 346 335 goto fail; 336 + } 347 337 348 338 f2fs_balance_fs(sbi, true); 349 339 ··· 360 344 } 361 345 f2fs_delete_entry(de, page, dir, inode); 362 346 f2fs_unlock_op(sbi); 363 - 364 - /* In order to evict this inode, we set it dirty */ 365 - mark_inode_dirty(inode); 366 347 367 348 if (IS_DIRSYNC(dir)) 368 349 f2fs_sync_fs(sbi->sb, 1); ··· 505 492 506 493 f2fs_balance_fs(sbi, true); 507 494 508 - set_inode_flag(F2FS_I(inode), FI_INC_LINK); 495 + set_inode_flag(inode, FI_INC_LINK); 509 496 f2fs_lock_op(sbi); 510 497 err = f2fs_add_link(dentry, inode); 511 498 if (err) ··· 522 509 return 0; 523 510 524 511 out_fail: 525 - clear_inode_flag(F2FS_I(inode), FI_INC_LINK); 512 + clear_inode_flag(inode, FI_INC_LINK); 526 513 handle_failed_inode(inode); 527 514 return err; 528 515 } ··· 605 592 * add this non-linked tmpfile to orphan list, in this way we could 606 593 * remove all unused data of tmpfile after abnormal power-off. 607 594 */ 608 - add_orphan_inode(sbi, inode->i_ino); 609 - f2fs_unlock_op(sbi); 610 - 595 + add_orphan_inode(inode); 611 596 alloc_nid_done(sbi, inode->i_ino); 612 597 613 598 if (whiteout) { 614 - inode_dec_link_count(inode); 599 + f2fs_i_links_write(inode, false); 615 600 *whiteout = inode; 616 601 } else { 617 602 d_tmpfile(dentry, inode); 618 603 } 604 + /* link_count was changed by d_tmpfile as well. */ 605 + f2fs_unlock_op(sbi); 619 606 unlock_new_inode(inode); 620 607 return 0; 621 608 ··· 665 652 } 666 653 667 654 old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page); 668 - if (!old_entry) 655 + if (!old_entry) { 656 + if (IS_ERR(old_page)) 657 + err = PTR_ERR(old_page); 669 658 goto out; 659 + } 670 660 671 661 if (S_ISDIR(old_inode->i_mode)) { 672 - err = -EIO; 673 662 old_dir_entry = f2fs_parent_dir(old_inode, &old_dir_page); 674 - if (!old_dir_entry) 663 + if (!old_dir_entry) { 664 + if (IS_ERR(old_dir_page)) 665 + err = PTR_ERR(old_dir_page); 675 666 goto out_old; 667 + } 676 668 } 677 669 678 670 if (flags & RENAME_WHITEOUT) { ··· 695 677 err = -ENOENT; 696 678 new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name, 697 679 &new_page); 698 - if (!new_entry) 680 + if (!new_entry) { 681 + if (IS_ERR(new_page)) 682 + err = PTR_ERR(new_page); 699 683 goto out_whiteout; 684 + } 700 685 701 686 f2fs_balance_fs(sbi, true); 702 687 ··· 721 700 new_inode->i_ctime = CURRENT_TIME; 722 701 down_write(&F2FS_I(new_inode)->i_sem); 723 702 if (old_dir_entry) 724 - drop_nlink(new_inode); 725 - drop_nlink(new_inode); 703 + f2fs_i_links_write(new_inode, false); 704 + f2fs_i_links_write(new_inode, false); 726 705 up_write(&F2FS_I(new_inode)->i_sem); 727 706 728 - mark_inode_dirty(new_inode); 729 - 730 707 if (!new_inode->i_nlink) 731 - add_orphan_inode(sbi, new_inode->i_ino); 708 + add_orphan_inode(new_inode); 732 709 else 733 710 release_orphan_inode(sbi); 734 - 735 - update_inode_page(old_inode); 736 - update_inode_page(new_inode); 737 711 } else { 738 712 f2fs_balance_fs(sbi, true); 739 713 ··· 740 724 goto out_whiteout; 741 725 } 742 726 743 - if (old_dir_entry) { 744 - inc_nlink(new_dir); 745 - update_inode_page(new_dir); 746 - } 727 + if (old_dir_entry) 728 + f2fs_i_links_write(new_dir, true); 747 729 748 730 /* 749 731 * old entry and new entry can locate in the same inline ··· 757 743 old_entry = f2fs_find_entry(old_dir, 758 744 &old_dentry->d_name, &old_page); 759 745 if (!old_entry) { 760 - err = -EIO; 746 + err = -ENOENT; 747 + if (IS_ERR(old_page)) 748 + err = PTR_ERR(old_page); 761 749 f2fs_unlock_op(sbi); 762 750 goto out_whiteout; 763 751 } ··· 773 757 up_write(&F2FS_I(old_inode)->i_sem); 774 758 775 759 old_inode->i_ctime = CURRENT_TIME; 776 - mark_inode_dirty(old_inode); 760 + f2fs_mark_inode_dirty_sync(old_inode); 777 761 778 762 f2fs_delete_entry(old_entry, old_page, old_dir, NULL); 779 763 780 764 if (whiteout) { 781 765 whiteout->i_state |= I_LINKABLE; 782 - set_inode_flag(F2FS_I(whiteout), FI_INC_LINK); 766 + set_inode_flag(whiteout, FI_INC_LINK); 783 767 err = f2fs_add_link(old_dentry, whiteout); 784 768 if (err) 785 769 goto put_out_dir; ··· 791 775 if (old_dir != new_dir && !whiteout) { 792 776 f2fs_set_link(old_inode, old_dir_entry, 793 777 old_dir_page, new_dir); 794 - update_inode_page(old_inode); 795 778 } else { 796 779 f2fs_dentry_kunmap(old_inode, old_dir_page); 797 780 f2fs_put_page(old_dir_page, 0); 798 781 } 799 - drop_nlink(old_dir); 800 - mark_inode_dirty(old_dir); 801 - update_inode_page(old_dir); 782 + f2fs_i_links_write(old_dir, false); 802 783 } 803 784 804 785 f2fs_unlock_op(sbi); ··· 845 832 return -EPERM; 846 833 847 834 old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page); 848 - if (!old_entry) 835 + if (!old_entry) { 836 + if (IS_ERR(old_page)) 837 + err = PTR_ERR(old_page); 849 838 goto out; 839 + } 850 840 851 841 new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name, &new_page); 852 - if (!new_entry) 842 + if (!new_entry) { 843 + if (IS_ERR(new_page)) 844 + err = PTR_ERR(new_page); 853 845 goto out_old; 846 + } 854 847 855 848 /* prepare for updating ".." directory entry info later */ 856 849 if (old_dir != new_dir) { 857 850 if (S_ISDIR(old_inode->i_mode)) { 858 - err = -EIO; 859 851 old_dir_entry = f2fs_parent_dir(old_inode, 860 852 &old_dir_page); 861 - if (!old_dir_entry) 853 + if (!old_dir_entry) { 854 + if (IS_ERR(old_dir_page)) 855 + err = PTR_ERR(old_dir_page); 862 856 goto out_new; 857 + } 863 858 } 864 859 865 860 if (S_ISDIR(new_inode->i_mode)) { 866 - err = -EIO; 867 861 new_dir_entry = f2fs_parent_dir(new_inode, 868 862 &new_dir_page); 869 - if (!new_dir_entry) 863 + if (!new_dir_entry) { 864 + if (IS_ERR(new_dir_page)) 865 + err = PTR_ERR(new_dir_page); 870 866 goto out_old_dir; 867 + } 871 868 } 872 869 } 873 870 ··· 927 904 file_lost_pino(old_inode); 928 905 up_write(&F2FS_I(old_inode)->i_sem); 929 906 930 - update_inode_page(old_inode); 931 - 932 907 old_dir->i_ctime = CURRENT_TIME; 933 908 if (old_nlink) { 934 909 down_write(&F2FS_I(old_dir)->i_sem); 935 - if (old_nlink < 0) 936 - drop_nlink(old_dir); 937 - else 938 - inc_nlink(old_dir); 910 + f2fs_i_links_write(old_dir, old_nlink > 0); 939 911 up_write(&F2FS_I(old_dir)->i_sem); 940 912 } 941 - mark_inode_dirty(old_dir); 942 - update_inode_page(old_dir); 913 + f2fs_mark_inode_dirty_sync(old_dir); 943 914 944 915 /* update directory entry info of new dir inode */ 945 916 f2fs_set_link(new_dir, new_entry, new_page, old_inode); ··· 942 925 file_lost_pino(new_inode); 943 926 up_write(&F2FS_I(new_inode)->i_sem); 944 927 945 - update_inode_page(new_inode); 946 - 947 928 new_dir->i_ctime = CURRENT_TIME; 948 929 if (new_nlink) { 949 930 down_write(&F2FS_I(new_dir)->i_sem); 950 - if (new_nlink < 0) 951 - drop_nlink(new_dir); 952 - else 953 - inc_nlink(new_dir); 931 + f2fs_i_links_write(new_dir, new_nlink > 0); 954 932 up_write(&F2FS_I(new_dir)->i_sem); 955 933 } 956 - mark_inode_dirty(new_dir); 957 - update_inode_page(new_dir); 934 + f2fs_mark_inode_dirty_sync(new_dir); 958 935 959 936 f2fs_unlock_op(sbi); 960 937
+71 -73
fs/f2fs/node.c
··· 52 52 mem_size = (nm_i->nat_cnt * sizeof(struct nat_entry)) >> 53 53 PAGE_SHIFT; 54 54 res = mem_size < ((avail_ram * nm_i->ram_thresh / 100) >> 2); 55 + if (excess_cached_nats(sbi)) 56 + res = false; 57 + if (nm_i->nat_cnt > DEF_NAT_CACHE_THRESHOLD) 58 + res = false; 55 59 } else if (type == DIRTY_DENTS) { 56 60 if (sbi->sb->s_bdi->wb.dirty_exceeded) 57 61 return false; ··· 206 202 struct nat_entry *e; 207 203 bool need = false; 208 204 209 - down_read(&nm_i->nat_tree_lock); 205 + percpu_down_read(&nm_i->nat_tree_lock); 210 206 e = __lookup_nat_cache(nm_i, nid); 211 207 if (e) { 212 208 if (!get_nat_flag(e, IS_CHECKPOINTED) && 213 209 !get_nat_flag(e, HAS_FSYNCED_INODE)) 214 210 need = true; 215 211 } 216 - up_read(&nm_i->nat_tree_lock); 212 + percpu_up_read(&nm_i->nat_tree_lock); 217 213 return need; 218 214 } 219 215 ··· 223 219 struct nat_entry *e; 224 220 bool is_cp = true; 225 221 226 - down_read(&nm_i->nat_tree_lock); 222 + percpu_down_read(&nm_i->nat_tree_lock); 227 223 e = __lookup_nat_cache(nm_i, nid); 228 224 if (e && !get_nat_flag(e, IS_CHECKPOINTED)) 229 225 is_cp = false; 230 - up_read(&nm_i->nat_tree_lock); 226 + percpu_up_read(&nm_i->nat_tree_lock); 231 227 return is_cp; 232 228 } 233 229 ··· 237 233 struct nat_entry *e; 238 234 bool need_update = true; 239 235 240 - down_read(&nm_i->nat_tree_lock); 236 + percpu_down_read(&nm_i->nat_tree_lock); 241 237 e = __lookup_nat_cache(nm_i, ino); 242 238 if (e && get_nat_flag(e, HAS_LAST_FSYNC) && 243 239 (get_nat_flag(e, IS_CHECKPOINTED) || 244 240 get_nat_flag(e, HAS_FSYNCED_INODE))) 245 241 need_update = false; 246 - up_read(&nm_i->nat_tree_lock); 242 + percpu_up_read(&nm_i->nat_tree_lock); 247 243 return need_update; 248 244 } 249 245 ··· 284 280 struct f2fs_nm_info *nm_i = NM_I(sbi); 285 281 struct nat_entry *e; 286 282 287 - down_write(&nm_i->nat_tree_lock); 283 + percpu_down_write(&nm_i->nat_tree_lock); 288 284 e = __lookup_nat_cache(nm_i, ni->nid); 289 285 if (!e) { 290 286 e = grab_nat_entry(nm_i, ni->nid); ··· 334 330 set_nat_flag(e, HAS_FSYNCED_INODE, true); 335 331 set_nat_flag(e, HAS_LAST_FSYNC, fsync_done); 336 332 } 337 - up_write(&nm_i->nat_tree_lock); 333 + percpu_up_write(&nm_i->nat_tree_lock); 338 334 } 339 335 340 336 int try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink) ··· 342 338 struct f2fs_nm_info *nm_i = NM_I(sbi); 343 339 int nr = nr_shrink; 344 340 345 - if (!down_write_trylock(&nm_i->nat_tree_lock)) 346 - return 0; 341 + percpu_down_write(&nm_i->nat_tree_lock); 347 342 348 343 while (nr_shrink && !list_empty(&nm_i->nat_entries)) { 349 344 struct nat_entry *ne; ··· 351 348 __del_from_nat_cache(nm_i, ne); 352 349 nr_shrink--; 353 350 } 354 - up_write(&nm_i->nat_tree_lock); 351 + percpu_up_write(&nm_i->nat_tree_lock); 355 352 return nr - nr_shrink; 356 353 } 357 354 ··· 373 370 ni->nid = nid; 374 371 375 372 /* Check nat cache */ 376 - down_read(&nm_i->nat_tree_lock); 373 + percpu_down_read(&nm_i->nat_tree_lock); 377 374 e = __lookup_nat_cache(nm_i, nid); 378 375 if (e) { 379 376 ni->ino = nat_get_ino(e); 380 377 ni->blk_addr = nat_get_blkaddr(e); 381 378 ni->version = nat_get_version(e); 382 - up_read(&nm_i->nat_tree_lock); 379 + percpu_up_read(&nm_i->nat_tree_lock); 383 380 return; 384 381 } 385 382 ··· 403 400 node_info_from_raw_nat(ni, &ne); 404 401 f2fs_put_page(page, 1); 405 402 cache: 406 - up_read(&nm_i->nat_tree_lock); 403 + percpu_up_read(&nm_i->nat_tree_lock); 407 404 /* cache nat entry */ 408 - down_write(&nm_i->nat_tree_lock); 405 + percpu_down_write(&nm_i->nat_tree_lock); 409 406 cache_nat_entry(sbi, nid, &ne); 410 - up_write(&nm_i->nat_tree_lock); 407 + percpu_up_write(&nm_i->nat_tree_lock); 411 408 } 412 409 413 410 /* ··· 649 646 if (err == -ENOENT) { 650 647 dn->cur_level = i; 651 648 dn->max_level = level; 649 + dn->ofs_in_node = offset[level]; 652 650 } 653 651 return err; 654 652 } ··· 674 670 if (dn->nid == dn->inode->i_ino) { 675 671 remove_orphan_inode(sbi, dn->nid); 676 672 dec_valid_inode_count(sbi); 677 - } else { 678 - sync_inode_page(dn); 673 + f2fs_inode_synced(dn->inode); 679 674 } 680 675 invalidate: 681 676 clear_node_page_dirty(dn->node_page); ··· 956 953 if (IS_ERR(npage)) 957 954 return PTR_ERR(npage); 958 955 959 - F2FS_I(inode)->i_xattr_nid = 0; 956 + f2fs_i_xnid_write(inode, 0); 960 957 961 958 /* need to do checkpoint during fsync */ 962 959 F2FS_I(inode)->xattr_ver = cur_cp_version(F2FS_CKPT(sbi)); ··· 1022 1019 struct page *page; 1023 1020 int err; 1024 1021 1025 - if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))) 1022 + if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC))) 1026 1023 return ERR_PTR(-EPERM); 1027 1024 1028 1025 page = f2fs_grab_cache_page(NODE_MAPPING(sbi), dn->nid, false); ··· 1045 1042 f2fs_wait_on_page_writeback(page, NODE, true); 1046 1043 fill_node_footer(page, dn->nid, dn->inode->i_ino, ofs, true); 1047 1044 set_cold_node(dn->inode, page); 1048 - SetPageUptodate(page); 1045 + if (!PageUptodate(page)) 1046 + SetPageUptodate(page); 1049 1047 if (set_page_dirty(page)) 1050 1048 dn->node_changed = true; 1051 1049 1052 1050 if (f2fs_has_xattr_block(ofs)) 1053 - F2FS_I(dn->inode)->i_xattr_nid = dn->nid; 1051 + f2fs_i_xnid_write(dn->inode, dn->nid); 1054 1052 1055 - dn->node_page = page; 1056 - if (ipage) 1057 - update_inode(dn->inode, ipage); 1058 - else 1059 - sync_inode_page(dn); 1060 1053 if (ofs == 0) 1061 1054 inc_valid_inode_count(sbi); 1062 - 1063 1055 return page; 1064 1056 1065 1057 fail: ··· 1081 1083 .encrypted_page = NULL, 1082 1084 }; 1083 1085 1086 + if (PageUptodate(page)) 1087 + return LOCKED_PAGE; 1088 + 1084 1089 get_node_info(sbi, page->index, &ni); 1085 1090 1086 1091 if (unlikely(ni.blk_addr == NULL_ADDR)) { 1087 1092 ClearPageUptodate(page); 1088 1093 return -ENOENT; 1089 1094 } 1090 - 1091 - if (PageUptodate(page)) 1092 - return LOCKED_PAGE; 1093 1095 1094 1096 fio.new_blkaddr = fio.old_blkaddr = ni.blk_addr; 1095 1097 return f2fs_submit_page_bio(&fio); ··· 1148 1150 1149 1151 lock_page(page); 1150 1152 1151 - if (unlikely(!PageUptodate(page))) { 1152 - f2fs_put_page(page, 1); 1153 - return ERR_PTR(-EIO); 1154 - } 1155 1153 if (unlikely(page->mapping != NODE_MAPPING(sbi))) { 1156 1154 f2fs_put_page(page, 1); 1157 1155 goto repeat; 1158 1156 } 1157 + 1158 + if (unlikely(!PageUptodate(page))) 1159 + goto out_err; 1159 1160 page_hit: 1160 - f2fs_bug_on(sbi, nid != nid_of_node(page)); 1161 + if(unlikely(nid != nid_of_node(page))) { 1162 + f2fs_bug_on(sbi, 1); 1163 + ClearPageUptodate(page); 1164 + out_err: 1165 + f2fs_put_page(page, 1); 1166 + return ERR_PTR(-EIO); 1167 + } 1161 1168 return page; 1162 1169 } 1163 1170 ··· 1177 1174 nid_t nid = get_nid(parent, start, false); 1178 1175 1179 1176 return __get_node_page(sbi, nid, parent, start); 1180 - } 1181 - 1182 - void sync_inode_page(struct dnode_of_data *dn) 1183 - { 1184 - int ret = 0; 1185 - 1186 - if (IS_INODE(dn->node_page) || dn->inode_page == dn->node_page) { 1187 - ret = update_inode(dn->inode, dn->node_page); 1188 - } else if (dn->inode_page) { 1189 - if (!dn->inode_page_locked) 1190 - lock_page(dn->inode_page); 1191 - ret = update_inode(dn->inode, dn->inode_page); 1192 - if (!dn->inode_page_locked) 1193 - unlock_page(dn->inode_page); 1194 - } else { 1195 - ret = update_inode_page(dn->inode); 1196 - } 1197 - dn->node_changed = ret ? true: false; 1198 1177 } 1199 1178 1200 1179 static void flush_inline_data(struct f2fs_sb_info *sbi, nid_t ino) ··· 1304 1319 return last_page; 1305 1320 } 1306 1321 1307 - int fsync_node_pages(struct f2fs_sb_info *sbi, nid_t ino, 1322 + int fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode, 1308 1323 struct writeback_control *wbc, bool atomic) 1309 1324 { 1310 1325 pgoff_t index, end; ··· 1312 1327 int ret = 0; 1313 1328 struct page *last_page = NULL; 1314 1329 bool marked = false; 1330 + nid_t ino = inode->i_ino; 1315 1331 1316 1332 if (atomic) { 1317 1333 last_page = last_fsync_dnode(sbi, ino); ··· 1366 1380 1367 1381 if (!atomic || page == last_page) { 1368 1382 set_fsync_mark(page, 1); 1369 - if (IS_INODE(page)) 1383 + if (IS_INODE(page)) { 1384 + if (is_inode_flag_set(inode, 1385 + FI_DIRTY_INODE)) 1386 + update_inode(inode, page); 1370 1387 set_dentry_mark(page, 1371 1388 need_dentry_mark(sbi, ino)); 1389 + } 1372 1390 /* may be written by other thread */ 1373 1391 if (!PageDirty(page)) 1374 1392 set_page_dirty(page); ··· 1620 1630 struct writeback_control *wbc) 1621 1631 { 1622 1632 struct f2fs_sb_info *sbi = F2FS_M_SB(mapping); 1633 + struct blk_plug plug; 1623 1634 long diff; 1624 1635 1625 1636 /* balancing f2fs's metadata in background */ ··· 1634 1643 1635 1644 diff = nr_pages_to_write(sbi, NODE, wbc); 1636 1645 wbc->sync_mode = WB_SYNC_NONE; 1646 + blk_start_plug(&plug); 1637 1647 sync_node_pages(sbi, wbc); 1648 + blk_finish_plug(&plug); 1638 1649 wbc->nr_to_write = max((long)0, wbc->nr_to_write - diff); 1639 1650 return 0; 1640 1651 ··· 1650 1657 { 1651 1658 trace_f2fs_set_page_dirty(page, NODE); 1652 1659 1653 - SetPageUptodate(page); 1660 + if (!PageUptodate(page)) 1661 + SetPageUptodate(page); 1654 1662 if (!PageDirty(page)) { 1655 - __set_page_dirty_nobuffers(page); 1663 + f2fs_set_page_dirty_nobuffers(page); 1656 1664 inc_page_count(F2FS_P_SB(page), F2FS_DIRTY_NODES); 1657 1665 SetPagePrivate(page); 1658 1666 f2fs_trace_pid(page); ··· 1772 1778 } 1773 1779 } 1774 1780 1775 - static void build_free_nids(struct f2fs_sb_info *sbi) 1781 + void build_free_nids(struct f2fs_sb_info *sbi) 1776 1782 { 1777 1783 struct f2fs_nm_info *nm_i = NM_I(sbi); 1778 1784 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); ··· 1781 1787 nid_t nid = nm_i->next_scan_nid; 1782 1788 1783 1789 /* Enough entries */ 1784 - if (nm_i->fcnt > NAT_ENTRY_PER_BLOCK) 1790 + if (nm_i->fcnt >= NAT_ENTRY_PER_BLOCK) 1785 1791 return; 1786 1792 1787 1793 /* readahead nat pages to be scanned */ 1788 1794 ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nid), FREE_NID_PAGES, 1789 1795 META_NAT, true); 1790 1796 1791 - down_read(&nm_i->nat_tree_lock); 1797 + percpu_down_read(&nm_i->nat_tree_lock); 1792 1798 1793 1799 while (1) { 1794 1800 struct page *page = get_current_nat_page(sbi, nid); ··· 1820 1826 remove_free_nid(nm_i, nid); 1821 1827 } 1822 1828 up_read(&curseg->journal_rwsem); 1823 - up_read(&nm_i->nat_tree_lock); 1829 + percpu_up_read(&nm_i->nat_tree_lock); 1824 1830 1825 1831 ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nm_i->next_scan_nid), 1826 1832 nm_i->ra_nid_pages, META_NAT, false); ··· 1919 1925 struct free_nid *i, *next; 1920 1926 int nr = nr_shrink; 1921 1927 1928 + if (nm_i->fcnt <= MAX_FREE_NIDS) 1929 + return 0; 1930 + 1922 1931 if (!mutex_trylock(&nm_i->build_lock)) 1923 1932 return 0; 1924 1933 1925 1934 spin_lock(&nm_i->free_nid_list_lock); 1926 1935 list_for_each_entry_safe(i, next, &nm_i->free_nid_list, list) { 1927 - if (nr_shrink <= 0 || nm_i->fcnt <= NAT_ENTRY_PER_BLOCK) 1936 + if (nr_shrink <= 0 || nm_i->fcnt <= MAX_FREE_NIDS) 1928 1937 break; 1929 1938 if (i->state == NID_ALLOC) 1930 1939 continue; ··· 1954 1957 1955 1958 ri = F2FS_INODE(page); 1956 1959 if (!(ri->i_inline & F2FS_INLINE_XATTR)) { 1957 - clear_inode_flag(F2FS_I(inode), FI_INLINE_XATTR); 1960 + clear_inode_flag(inode, FI_INLINE_XATTR); 1958 1961 goto update_inode; 1959 1962 } 1960 1963 ··· 1996 1999 get_node_info(sbi, new_xnid, &ni); 1997 2000 ni.ino = inode->i_ino; 1998 2001 set_node_addr(sbi, &ni, NEW_ADDR, false); 1999 - F2FS_I(inode)->i_xattr_nid = new_xnid; 2002 + f2fs_i_xnid_write(inode, new_xnid); 2000 2003 2001 2004 /* 3: update xattr blkaddr */ 2002 2005 refresh_sit_entry(sbi, NEW_ADDR, blkaddr); 2003 2006 set_node_addr(sbi, &ni, blkaddr, false); 2004 - 2005 - update_inode_page(inode); 2006 2007 } 2007 2008 2008 2009 int recover_inode_page(struct f2fs_sb_info *sbi, struct page *page) ··· 2022 2027 /* Should not use this inode from free nid list */ 2023 2028 remove_free_nid(NM_I(sbi), ino); 2024 2029 2025 - SetPageUptodate(ipage); 2030 + if (!PageUptodate(ipage)) 2031 + SetPageUptodate(ipage); 2026 2032 fill_node_footer(ipage, ino, ino, 0, true); 2027 2033 2028 2034 src = F2FS_INODE(page); ··· 2209 2213 if (!nm_i->dirty_nat_cnt) 2210 2214 return; 2211 2215 2212 - down_write(&nm_i->nat_tree_lock); 2216 + percpu_down_write(&nm_i->nat_tree_lock); 2213 2217 2214 2218 /* 2215 2219 * if there are no enough space in journal to store dirty nat ··· 2232 2236 list_for_each_entry_safe(set, tmp, &sets, set_list) 2233 2237 __flush_nat_entry_set(sbi, set); 2234 2238 2235 - up_write(&nm_i->nat_tree_lock); 2239 + percpu_up_write(&nm_i->nat_tree_lock); 2236 2240 2237 2241 f2fs_bug_on(sbi, nm_i->dirty_nat_cnt); 2238 2242 } ··· 2268 2272 2269 2273 mutex_init(&nm_i->build_lock); 2270 2274 spin_lock_init(&nm_i->free_nid_list_lock); 2271 - init_rwsem(&nm_i->nat_tree_lock); 2275 + if (percpu_init_rwsem(&nm_i->nat_tree_lock)) 2276 + return -ENOMEM; 2272 2277 2273 2278 nm_i->next_scan_nid = le32_to_cpu(sbi->ckpt->next_free_nid); 2274 2279 nm_i->bitmap_size = __bitmap_size(sbi, NAT_BITMAP); ··· 2326 2329 spin_unlock(&nm_i->free_nid_list_lock); 2327 2330 2328 2331 /* destroy nat cache */ 2329 - down_write(&nm_i->nat_tree_lock); 2332 + percpu_down_write(&nm_i->nat_tree_lock); 2330 2333 while ((found = __gang_lookup_nat_cache(nm_i, 2331 2334 nid, NATVEC_SIZE, natvec))) { 2332 2335 unsigned idx; ··· 2351 2354 kmem_cache_free(nat_entry_set_slab, setvec[idx]); 2352 2355 } 2353 2356 } 2354 - up_write(&nm_i->nat_tree_lock); 2357 + percpu_up_write(&nm_i->nat_tree_lock); 2355 2358 2359 + percpu_free_rwsem(&nm_i->nat_tree_lock); 2356 2360 kfree(nm_i->nat_bitmap); 2357 2361 sbi->nm_info = NULL; 2358 2362 kfree(nm_i);
+11 -3
fs/f2fs/node.h
··· 15 15 #define NAT_BLOCK_OFFSET(start_nid) (start_nid / NAT_ENTRY_PER_BLOCK) 16 16 17 17 /* # of pages to perform synchronous readahead before building free nids */ 18 - #define FREE_NID_PAGES 4 18 + #define FREE_NID_PAGES 8 19 + #define MAX_FREE_NIDS (NAT_ENTRY_PER_BLOCK * FREE_NID_PAGES) 19 20 20 - #define DEF_RA_NID_PAGES 4 /* # of nid pages to be readaheaded */ 21 + #define DEF_RA_NID_PAGES 0 /* # of nid pages to be readaheaded */ 21 22 22 23 /* maximum readahead size for node during getting data blocks */ 23 24 #define MAX_RA_NODE 128 24 25 25 26 /* control the memory footprint threshold (10MB per 1GB ram) */ 26 - #define DEF_RAM_THRESHOLD 10 27 + #define DEF_RAM_THRESHOLD 1 27 28 28 29 /* control dirty nats ratio threshold (default: 10% over max nid count) */ 29 30 #define DEF_DIRTY_NAT_RATIO_THRESHOLD 10 31 + /* control total # of nats */ 32 + #define DEF_NAT_CACHE_THRESHOLD 100000 30 33 31 34 /* vector size for gang look-up from nat cache that consists of radix tree */ 32 35 #define NATVEC_SIZE 64 ··· 127 124 { 128 125 return NM_I(sbi)->dirty_nat_cnt >= NM_I(sbi)->max_nid * 129 126 NM_I(sbi)->dirty_nats_ratio / 100; 127 + } 128 + 129 + static inline bool excess_cached_nats(struct f2fs_sb_info *sbi) 130 + { 131 + return NM_I(sbi)->nat_cnt >= DEF_NAT_CACHE_THRESHOLD; 130 132 } 131 133 132 134 enum mem_type {
+16 -7
fs/f2fs/recovery.c
··· 153 153 f2fs_delete_entry(de, page, dir, einode); 154 154 iput(einode); 155 155 goto retry; 156 + } else if (IS_ERR(page)) { 157 + err = PTR_ERR(page); 158 + } else { 159 + err = __f2fs_add_link(dir, &name, inode, 160 + inode->i_ino, inode->i_mode); 156 161 } 157 - err = __f2fs_add_link(dir, &name, inode, inode->i_ino, inode->i_mode); 158 - 159 162 goto out; 160 163 161 164 out_unmap_put: ··· 178 175 char *name; 179 176 180 177 inode->i_mode = le16_to_cpu(raw->i_mode); 181 - i_size_write(inode, le64_to_cpu(raw->i_size)); 178 + f2fs_i_size_write(inode, le64_to_cpu(raw->i_size)); 182 179 inode->i_atime.tv_sec = le64_to_cpu(raw->i_mtime); 183 180 inode->i_ctime.tv_sec = le64_to_cpu(raw->i_ctime); 184 181 inode->i_mtime.tv_sec = le64_to_cpu(raw->i_mtime); ··· 458 455 continue; 459 456 } 460 457 458 + if ((start + 1) << PAGE_SHIFT > i_size_read(inode)) 459 + f2fs_i_size_write(inode, (start + 1) << PAGE_SHIFT); 460 + 461 461 /* 462 462 * dest is reserved block, invalidate src block 463 463 * and then reserve one new block in dnode page. ··· 482 476 #endif 483 477 /* We should not get -ENOSPC */ 484 478 f2fs_bug_on(sbi, err); 479 + if (err) 480 + goto err; 485 481 } 486 482 487 483 /* Check the previous node page having this index */ ··· 497 489 recovered++; 498 490 } 499 491 } 500 - 501 - if (IS_INODE(dn.node_page)) 502 - sync_inode_page(&dn); 503 492 504 493 copy_node_footer(dn.node_page, page); 505 494 fill_node_footer(dn.node_page, dn.nid, ni.ino, ··· 629 624 if (err) { 630 625 bool invalidate = false; 631 626 632 - if (discard_next_dnode(sbi, blkaddr)) 627 + if (test_opt(sbi, LFS)) { 628 + update_meta_page(sbi, NULL, blkaddr); 633 629 invalidate = true; 630 + } else if (discard_next_dnode(sbi, blkaddr)) { 631 + invalidate = true; 632 + } 634 633 635 634 /* Flush all the NAT/SIT pages */ 636 635 while (get_pages(sbi, F2FS_DIRTY_META))
+52 -7
fs/f2fs/segment.c
··· 241 241 { 242 242 struct f2fs_inode_info *fi = F2FS_I(inode); 243 243 244 - clear_inode_flag(F2FS_I(inode), FI_ATOMIC_FILE); 244 + clear_inode_flag(inode, FI_ATOMIC_FILE); 245 245 246 246 mutex_lock(&fi->inmem_lock); 247 247 __revoke_inmem_pages(inode, &fi->inmem_pages, true, false); ··· 346 346 { 347 347 if (!need) 348 348 return; 349 + 350 + /* balance_fs_bg is able to be pending */ 351 + if (excess_cached_nats(sbi)) 352 + f2fs_balance_fs_bg(sbi); 353 + 349 354 /* 350 355 * We should do GC or end up with checkpoint, if there are so many dirty 351 356 * dir/node pages without enough free segments. ··· 372 367 try_to_free_nats(sbi, NAT_ENTRY_PER_BLOCK); 373 368 374 369 if (!available_free_memory(sbi, FREE_NIDS)) 375 - try_to_free_nids(sbi, NAT_ENTRY_PER_BLOCK * FREE_NID_PAGES); 370 + try_to_free_nids(sbi, MAX_FREE_NIDS); 371 + else 372 + build_free_nids(sbi); 376 373 377 374 /* checkpoint is the only way to shrink partial cached entries */ 378 375 if (!available_free_memory(sbi, NAT_ENTRIES) || ··· 442 435 if (test_opt(sbi, NOBARRIER)) 443 436 return 0; 444 437 445 - if (!test_opt(sbi, FLUSH_MERGE)) { 438 + if (!test_opt(sbi, FLUSH_MERGE) || !atomic_read(&fcc->submit_flush)) { 446 439 struct bio *bio = f2fs_bio_alloc(0); 447 440 int ret; 448 441 442 + atomic_inc(&fcc->submit_flush); 449 443 bio->bi_bdev = sbi->sb->s_bdev; 450 444 bio_set_op_attrs(bio, REQ_OP_WRITE, WRITE_FLUSH); 451 445 ret = submit_bio_wait(bio); 446 + atomic_dec(&fcc->submit_flush); 452 447 bio_put(bio); 453 448 return ret; 454 449 } 455 450 456 451 init_completion(&cmd.wait); 457 452 453 + atomic_inc(&fcc->submit_flush); 458 454 llist_add(&cmd.llnode, &fcc->issue_list); 459 455 460 456 if (!fcc->dispatch_list) 461 457 wake_up(&fcc->flush_wait_queue); 462 458 463 459 wait_for_completion(&cmd.wait); 460 + atomic_dec(&fcc->submit_flush); 464 461 465 462 return cmd.ret; 466 463 } ··· 478 467 fcc = kzalloc(sizeof(struct flush_cmd_control), GFP_KERNEL); 479 468 if (!fcc) 480 469 return -ENOMEM; 470 + atomic_set(&fcc->submit_flush, 0); 481 471 init_waitqueue_head(&fcc->flush_wait_queue); 482 472 init_llist_head(&fcc->issue_list); 483 473 SM_I(sbi)->cmd_control_info = fcc; ··· 680 668 break; 681 669 682 670 end = __find_rev_next_zero_bit(dmap, max_blocks, start + 1); 671 + if (force && start && end != max_blocks 672 + && (end - start) < cpc->trim_minlen) 673 + continue; 674 + 683 675 __add_discard_entry(sbi, cpc, se, start, end); 684 676 } 685 677 } ··· 721 705 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 722 706 unsigned long *prefree_map = dirty_i->dirty_segmap[PRE]; 723 707 unsigned int start = 0, end = -1; 708 + unsigned int secno, start_segno; 709 + bool force = (cpc->reason == CP_DISCARD); 724 710 725 711 mutex_lock(&dirty_i->seglist_lock); 726 712 ··· 739 721 740 722 dirty_i->nr_dirty[PRE] -= end - start; 741 723 742 - if (!test_opt(sbi, DISCARD)) 724 + if (force || !test_opt(sbi, DISCARD)) 743 725 continue; 744 726 745 - f2fs_issue_discard(sbi, START_BLOCK(sbi, start), 727 + if (!test_opt(sbi, LFS) || sbi->segs_per_sec == 1) { 728 + f2fs_issue_discard(sbi, START_BLOCK(sbi, start), 746 729 (end - start) << sbi->log_blocks_per_seg); 730 + continue; 731 + } 732 + next: 733 + secno = GET_SECNO(sbi, start); 734 + start_segno = secno * sbi->segs_per_sec; 735 + if (!IS_CURSEC(sbi, secno) && 736 + !get_valid_blocks(sbi, start, sbi->segs_per_sec)) 737 + f2fs_issue_discard(sbi, START_BLOCK(sbi, start_segno), 738 + sbi->segs_per_sec << sbi->log_blocks_per_seg); 739 + 740 + start = start_segno + sbi->segs_per_sec; 741 + if (start < end) 742 + goto next; 747 743 } 748 744 mutex_unlock(&dirty_i->seglist_lock); 749 745 750 746 /* send small discards */ 751 747 list_for_each_entry_safe(entry, this, head, list) { 752 - if (cpc->reason == CP_DISCARD && entry->len < cpc->trim_minlen) 748 + if (force && entry->len < cpc->trim_minlen) 753 749 goto skip; 754 750 f2fs_issue_discard(sbi, entry->blkaddr, entry->len); 755 751 cpc->trimmed += entry->len; ··· 1251 1219 { 1252 1220 int i; 1253 1221 1222 + if (test_opt(sbi, LFS)) 1223 + return; 1224 + 1254 1225 for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) 1255 1226 __allocate_new_segments(sbi, i); 1256 1227 } ··· 1427 1392 { 1428 1393 int type = __get_segment_type(fio->page, fio->type); 1429 1394 1395 + if (fio->type == NODE || fio->type == DATA) 1396 + mutex_lock(&fio->sbi->wio_mutex[fio->type]); 1397 + 1430 1398 allocate_data_block(fio->sbi, fio->page, fio->old_blkaddr, 1431 1399 &fio->new_blkaddr, sum, type); 1432 1400 1433 1401 /* writeout dirty page into bdev */ 1434 1402 f2fs_submit_page_mbio(fio); 1403 + 1404 + if (fio->type == NODE || fio->type == DATA) 1405 + mutex_unlock(&fio->sbi->wio_mutex[fio->type]); 1435 1406 } 1436 1407 1437 1408 void write_meta_page(struct f2fs_sb_info *sbi, struct page *page) ··· 2418 2377 sm_info->ssa_blkaddr = le32_to_cpu(raw_super->ssa_blkaddr); 2419 2378 sm_info->rec_prefree_segments = sm_info->main_segments * 2420 2379 DEF_RECLAIM_PREFREE_SEGMENTS / 100; 2421 - sm_info->ipu_policy = 1 << F2FS_IPU_FSYNC; 2380 + if (sm_info->rec_prefree_segments > DEF_MAX_RECLAIM_PREFREE_SEGMENTS) 2381 + sm_info->rec_prefree_segments = DEF_MAX_RECLAIM_PREFREE_SEGMENTS; 2382 + 2383 + if (!test_opt(sbi, LFS)) 2384 + sm_info->ipu_policy = 1 << F2FS_IPU_FSYNC; 2422 2385 sm_info->min_ipu_util = DEF_MIN_IPU_UTIL; 2423 2386 sm_info->min_fsync_blocks = DEF_MIN_FSYNC_BLOCKS; 2424 2387
+15 -7
fs/f2fs/segment.h
··· 16 16 #define NULL_SECNO ((unsigned int)(~0)) 17 17 18 18 #define DEF_RECLAIM_PREFREE_SEGMENTS 5 /* 5% over total segments */ 19 + #define DEF_MAX_RECLAIM_PREFREE_SEGMENTS 4096 /* 8GB in maximum */ 19 20 20 21 /* L: Logical segment # in volume, R: Relative segment # in main area */ 21 22 #define GET_L2R_SEGNO(free_i, segno) (segno - free_i->start_segno) ··· 471 470 { 472 471 int node_secs = get_blocktype_secs(sbi, F2FS_DIRTY_NODES); 473 472 int dent_secs = get_blocktype_secs(sbi, F2FS_DIRTY_DENTS); 473 + 474 + if (test_opt(sbi, LFS)) 475 + return false; 476 + 474 477 return free_sections(sbi) <= (node_secs + 2 * dent_secs + 475 478 reserved_sections(sbi) + 1); 476 479 } ··· 483 478 { 484 479 int node_secs = get_blocktype_secs(sbi, F2FS_DIRTY_NODES); 485 480 int dent_secs = get_blocktype_secs(sbi, F2FS_DIRTY_DENTS); 481 + 482 + node_secs += get_blocktype_secs(sbi, F2FS_DIRTY_IMETA); 486 483 487 484 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING))) 488 485 return false; ··· 538 531 if (S_ISDIR(inode->i_mode) || f2fs_is_atomic_file(inode)) 539 532 return false; 540 533 534 + if (test_opt(sbi, LFS)) 535 + return false; 536 + 541 537 if (policy & (0x1 << F2FS_IPU_FORCE)) 542 538 return true; 543 539 if (policy & (0x1 << F2FS_IPU_SSR) && need_SSR(sbi)) ··· 554 544 555 545 /* this is only set during fdatasync */ 556 546 if (policy & (0x1 << F2FS_IPU_FSYNC) && 557 - is_inode_flag_set(F2FS_I(inode), FI_NEED_IPU)) 547 + is_inode_flag_set(inode, FI_NEED_IPU)) 558 548 return true; 559 549 560 550 return false; ··· 716 706 if (type == DATA) 717 707 return sbi->blocks_per_seg; 718 708 else if (type == NODE) 719 - return 3 * sbi->blocks_per_seg; 709 + return 8 * sbi->blocks_per_seg; 720 710 else if (type == META) 721 - return MAX_BIO_BLOCKS(sbi); 711 + return 8 * MAX_BIO_BLOCKS(sbi); 722 712 else 723 713 return 0; 724 714 } ··· 736 726 737 727 nr_to_write = wbc->nr_to_write; 738 728 739 - if (type == DATA) 740 - desired = 4096; 741 - else if (type == NODE) 742 - desired = 3 * max_hw_blocks(sbi); 729 + if (type == NODE) 730 + desired = 2 * max_hw_blocks(sbi); 743 731 else 744 732 desired = MAX_BIO_BLOCKS(sbi); 745 733
+3 -2
fs/f2fs/shrinker.c
··· 13 13 #include <linux/f2fs_fs.h> 14 14 15 15 #include "f2fs.h" 16 + #include "node.h" 16 17 17 18 static LIST_HEAD(f2fs_list); 18 19 static DEFINE_SPINLOCK(f2fs_list_lock); ··· 26 25 27 26 static unsigned long __count_free_nids(struct f2fs_sb_info *sbi) 28 27 { 29 - if (NM_I(sbi)->fcnt > NAT_ENTRY_PER_BLOCK) 30 - return NM_I(sbi)->fcnt - NAT_ENTRY_PER_BLOCK; 28 + if (NM_I(sbi)->fcnt > MAX_FREE_NIDS) 29 + return NM_I(sbi)->fcnt - MAX_FREE_NIDS; 31 30 return 0; 32 31 } 33 32
+121 -13
fs/f2fs/super.c
··· 49 49 [FAULT_ORPHAN] = "orphan", 50 50 [FAULT_BLOCK] = "no more block", 51 51 [FAULT_DIR_DEPTH] = "too big dir depth", 52 + [FAULT_EVICT_INODE] = "evict_inode fail", 52 53 }; 53 54 54 55 static void f2fs_build_fault_attr(unsigned int rate) ··· 76 75 Opt_disable_roll_forward, 77 76 Opt_norecovery, 78 77 Opt_discard, 78 + Opt_nodiscard, 79 79 Opt_noheap, 80 80 Opt_user_xattr, 81 81 Opt_nouser_xattr, ··· 88 86 Opt_inline_data, 89 87 Opt_inline_dentry, 90 88 Opt_flush_merge, 89 + Opt_noflush_merge, 91 90 Opt_nobarrier, 92 91 Opt_fastboot, 93 92 Opt_extent_cache, 94 93 Opt_noextent_cache, 95 94 Opt_noinline_data, 96 95 Opt_data_flush, 96 + Opt_mode, 97 97 Opt_fault_injection, 98 + Opt_lazytime, 99 + Opt_nolazytime, 98 100 Opt_err, 99 101 }; 100 102 ··· 107 101 {Opt_disable_roll_forward, "disable_roll_forward"}, 108 102 {Opt_norecovery, "norecovery"}, 109 103 {Opt_discard, "discard"}, 104 + {Opt_nodiscard, "nodiscard"}, 110 105 {Opt_noheap, "no_heap"}, 111 106 {Opt_user_xattr, "user_xattr"}, 112 107 {Opt_nouser_xattr, "nouser_xattr"}, ··· 119 112 {Opt_inline_data, "inline_data"}, 120 113 {Opt_inline_dentry, "inline_dentry"}, 121 114 {Opt_flush_merge, "flush_merge"}, 115 + {Opt_noflush_merge, "noflush_merge"}, 122 116 {Opt_nobarrier, "nobarrier"}, 123 117 {Opt_fastboot, "fastboot"}, 124 118 {Opt_extent_cache, "extent_cache"}, 125 119 {Opt_noextent_cache, "noextent_cache"}, 126 120 {Opt_noinline_data, "noinline_data"}, 127 121 {Opt_data_flush, "data_flush"}, 122 + {Opt_mode, "mode=%s"}, 128 123 {Opt_fault_injection, "fault_injection=%u"}, 124 + {Opt_lazytime, "lazytime"}, 125 + {Opt_nolazytime, "nolazytime"}, 129 126 {Opt_err, NULL}, 130 127 }; 131 128 ··· 428 417 "the device does not support discard"); 429 418 } 430 419 break; 420 + case Opt_nodiscard: 421 + clear_opt(sbi, DISCARD); 431 422 case Opt_noheap: 432 423 set_opt(sbi, NOHEAP); 433 424 break; ··· 491 478 case Opt_flush_merge: 492 479 set_opt(sbi, FLUSH_MERGE); 493 480 break; 481 + case Opt_noflush_merge: 482 + clear_opt(sbi, FLUSH_MERGE); 483 + break; 494 484 case Opt_nobarrier: 495 485 set_opt(sbi, NOBARRIER); 496 486 break; ··· 512 496 case Opt_data_flush: 513 497 set_opt(sbi, DATA_FLUSH); 514 498 break; 499 + case Opt_mode: 500 + name = match_strdup(&args[0]); 501 + 502 + if (!name) 503 + return -ENOMEM; 504 + if (strlen(name) == 8 && 505 + !strncmp(name, "adaptive", 8)) { 506 + set_opt_mode(sbi, F2FS_MOUNT_ADAPTIVE); 507 + } else if (strlen(name) == 3 && 508 + !strncmp(name, "lfs", 3)) { 509 + set_opt_mode(sbi, F2FS_MOUNT_LFS); 510 + } else { 511 + kfree(name); 512 + return -EINVAL; 513 + } 514 + kfree(name); 515 + break; 515 516 case Opt_fault_injection: 516 517 if (args->from && match_int(args, &arg)) 517 518 return -EINVAL; ··· 538 505 f2fs_msg(sb, KERN_INFO, 539 506 "FAULT_INJECTION was not selected"); 540 507 #endif 508 + break; 509 + case Opt_lazytime: 510 + sb->s_flags |= MS_LAZYTIME; 511 + break; 512 + case Opt_nolazytime: 513 + sb->s_flags &= ~MS_LAZYTIME; 541 514 break; 542 515 default: 543 516 f2fs_msg(sb, KERN_ERR, ··· 576 537 fi->i_advise = 0; 577 538 init_rwsem(&fi->i_sem); 578 539 INIT_LIST_HEAD(&fi->dirty_list); 540 + INIT_LIST_HEAD(&fi->gdirty_list); 579 541 INIT_LIST_HEAD(&fi->inmem_pages); 580 542 mutex_init(&fi->inmem_lock); 581 - 582 - set_inode_flag(fi, FI_NEW_INODE); 583 - 584 - if (test_opt(F2FS_SB(sb), INLINE_XATTR)) 585 - set_inode_flag(fi, FI_INLINE_XATTR); 543 + init_rwsem(&fi->dio_rwsem[READ]); 544 + init_rwsem(&fi->dio_rwsem[WRITE]); 586 545 587 546 /* Will be used by directory only */ 588 547 fi->i_dir_level = F2FS_SB(sb)->dir_level; ··· 596 559 * - f2fs_gc -> iput -> evict 597 560 * - inode_wait_for_writeback(inode) 598 561 */ 599 - if (!inode_unhashed(inode) && inode->i_state & I_SYNC) { 562 + if ((!inode_unhashed(inode) && inode->i_state & I_SYNC)) { 600 563 if (!inode->i_nlink && !is_bad_inode(inode)) { 601 564 /* to avoid evict_inode call simultaneously */ 602 565 atomic_inc(&inode->i_count); ··· 610 573 f2fs_destroy_extent_node(inode); 611 574 612 575 sb_start_intwrite(inode->i_sb); 613 - i_size_write(inode, 0); 576 + f2fs_i_size_write(inode, 0); 614 577 615 578 if (F2FS_HAS_BLOCKS(inode)) 616 - f2fs_truncate(inode, true); 579 + f2fs_truncate(inode); 617 580 618 581 sb_end_intwrite(inode->i_sb); 619 582 ··· 623 586 } 624 587 return 0; 625 588 } 589 + 626 590 return generic_drop_inode(inode); 591 + } 592 + 593 + int f2fs_inode_dirtied(struct inode *inode) 594 + { 595 + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 596 + 597 + spin_lock(&sbi->inode_lock[DIRTY_META]); 598 + if (is_inode_flag_set(inode, FI_DIRTY_INODE)) { 599 + spin_unlock(&sbi->inode_lock[DIRTY_META]); 600 + return 1; 601 + } 602 + 603 + set_inode_flag(inode, FI_DIRTY_INODE); 604 + list_add_tail(&F2FS_I(inode)->gdirty_list, 605 + &sbi->inode_list[DIRTY_META]); 606 + inc_page_count(sbi, F2FS_DIRTY_IMETA); 607 + stat_inc_dirty_inode(sbi, DIRTY_META); 608 + spin_unlock(&sbi->inode_lock[DIRTY_META]); 609 + 610 + return 0; 611 + } 612 + 613 + void f2fs_inode_synced(struct inode *inode) 614 + { 615 + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 616 + 617 + spin_lock(&sbi->inode_lock[DIRTY_META]); 618 + if (!is_inode_flag_set(inode, FI_DIRTY_INODE)) { 619 + spin_unlock(&sbi->inode_lock[DIRTY_META]); 620 + return; 621 + } 622 + list_del_init(&F2FS_I(inode)->gdirty_list); 623 + clear_inode_flag(inode, FI_DIRTY_INODE); 624 + clear_inode_flag(inode, FI_AUTO_RECOVER); 625 + dec_page_count(sbi, F2FS_DIRTY_IMETA); 626 + stat_dec_dirty_inode(F2FS_I_SB(inode), DIRTY_META); 627 + spin_unlock(&sbi->inode_lock[DIRTY_META]); 627 628 } 628 629 629 630 /* ··· 671 596 */ 672 597 static void f2fs_dirty_inode(struct inode *inode, int flags) 673 598 { 674 - set_inode_flag(F2FS_I(inode), FI_DIRTY_INODE); 599 + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 600 + 601 + if (inode->i_ino == F2FS_NODE_INO(sbi) || 602 + inode->i_ino == F2FS_META_INO(sbi)) 603 + return; 604 + 605 + if (flags == I_DIRTY_TIME) 606 + return; 607 + 608 + if (is_inode_flag_set(inode, FI_AUTO_RECOVER)) 609 + clear_inode_flag(inode, FI_AUTO_RECOVER); 610 + 611 + f2fs_inode_dirtied(inode); 675 612 } 676 613 677 614 static void f2fs_i_callback(struct rcu_head *head) ··· 706 619 percpu_counter_destroy(&sbi->nr_pages[i]); 707 620 percpu_counter_destroy(&sbi->alloc_valid_block_count); 708 621 percpu_counter_destroy(&sbi->total_valid_inode_count); 622 + 623 + percpu_free_rwsem(&sbi->cp_rwsem); 709 624 } 710 625 711 626 static void f2fs_put_super(struct super_block *sb) ··· 827 738 buf->f_bsize = sbi->blocksize; 828 739 829 740 buf->f_blocks = total_count - start_count; 830 - buf->f_bfree = buf->f_blocks - valid_user_blocks(sbi) - ovp_count; 741 + buf->f_bfree = user_block_count - valid_user_blocks(sbi) + ovp_count; 831 742 buf->f_bavail = user_block_count - valid_user_blocks(sbi); 832 743 833 744 buf->f_files = sbi->total_node_count - F2FS_RESERVED_NODE_NUM; ··· 892 803 seq_puts(seq, ",noextent_cache"); 893 804 if (test_opt(sbi, DATA_FLUSH)) 894 805 seq_puts(seq, ",data_flush"); 806 + 807 + seq_puts(seq, ",mode="); 808 + if (test_opt(sbi, ADAPTIVE)) 809 + seq_puts(seq, "adaptive"); 810 + else if (test_opt(sbi, LFS)) 811 + seq_puts(seq, "lfs"); 895 812 seq_printf(seq, ",active_logs=%u", sbi->active_logs); 896 813 897 814 return 0; ··· 979 884 set_opt(sbi, BG_GC); 980 885 set_opt(sbi, INLINE_DATA); 981 886 set_opt(sbi, EXTENT_CACHE); 887 + sbi->sb->s_flags |= MS_LAZYTIME; 888 + set_opt(sbi, FLUSH_MERGE); 889 + if (f2fs_sb_mounted_hmsmr(sbi->sb)) { 890 + set_opt_mode(sbi, F2FS_MOUNT_LFS); 891 + set_opt(sbi, DISCARD); 892 + } else { 893 + set_opt_mode(sbi, F2FS_MOUNT_ADAPTIVE); 894 + } 982 895 983 896 #ifdef CONFIG_F2FS_FS_XATTR 984 897 set_opt(sbi, XATTR_USER); ··· 1470 1367 1471 1368 INIT_LIST_HEAD(&sbi->s_list); 1472 1369 mutex_init(&sbi->umount_mutex); 1370 + mutex_init(&sbi->wio_mutex[NODE]); 1371 + mutex_init(&sbi->wio_mutex[DATA]); 1473 1372 1474 1373 #ifdef CONFIG_F2FS_FS_ENCRYPTION 1475 1374 memcpy(sbi->key_prefix, F2FS_KEY_DESC_PREFIX, ··· 1483 1378 static int init_percpu_info(struct f2fs_sb_info *sbi) 1484 1379 { 1485 1380 int i, err; 1381 + 1382 + if (percpu_init_rwsem(&sbi->cp_rwsem)) 1383 + return -ENOMEM; 1486 1384 1487 1385 for (i = 0; i < NR_COUNT_TYPE; i++) { 1488 1386 err = percpu_counter_init(&sbi->nr_pages[i], 0, GFP_KERNEL); ··· 1638 1530 goto free_sbi; 1639 1531 1640 1532 sb->s_fs_info = sbi; 1533 + sbi->raw_super = raw_super; 1534 + 1641 1535 default_options(sbi); 1642 1536 /* parse mount options */ 1643 1537 options = kstrdup((const char *)data, GFP_KERNEL); ··· 1669 1559 memcpy(sb->s_uuid, raw_super->uuid, sizeof(raw_super->uuid)); 1670 1560 1671 1561 /* init f2fs-specific super block info */ 1672 - sbi->raw_super = raw_super; 1673 1562 sbi->valid_super_block = valid_super_block; 1674 1563 mutex_init(&sbi->gc_mutex); 1675 - mutex_init(&sbi->writepages); 1676 1564 mutex_init(&sbi->cp_mutex); 1677 1565 init_rwsem(&sbi->node_write); 1678 1566 ··· 1687 1579 sbi->write_io[i].bio = NULL; 1688 1580 } 1689 1581 1690 - init_rwsem(&sbi->cp_rwsem); 1691 1582 init_waitqueue_head(&sbi->cp_wait); 1692 1583 init_sb_info(sbi); 1693 1584 ··· 1869 1762 return 0; 1870 1763 1871 1764 free_kobj: 1765 + f2fs_sync_inode_meta(sbi); 1872 1766 kobject_del(&sbi->s_kobj); 1873 1767 kobject_put(&sbi->s_kobj); 1874 1768 wait_for_completion(&sbi->s_kobj_unregister);
+8 -12
fs/f2fs/xattr.c
··· 106 106 return -EINVAL; 107 107 108 108 F2FS_I(inode)->i_advise |= *(char *)value; 109 - mark_inode_dirty(inode); 109 + f2fs_mark_inode_dirty_sync(inode); 110 110 return 0; 111 111 } 112 112 ··· 299 299 if (ipage) { 300 300 inline_addr = inline_xattr_addr(ipage); 301 301 f2fs_wait_on_page_writeback(ipage, NODE, true); 302 + set_page_dirty(ipage); 302 303 } else { 303 304 page = get_node_page(sbi, inode->i_ino); 304 305 if (IS_ERR(page)) { ··· 442 441 const char *name, const void *value, size_t size, 443 442 struct page *ipage, int flags) 444 443 { 445 - struct f2fs_inode_info *fi = F2FS_I(inode); 446 444 struct f2fs_xattr_entry *here, *last; 447 445 void *base_addr; 448 446 int found, newsize; 449 447 size_t len; 450 448 __u32 new_hsize; 451 - int error = -ENOMEM; 449 + int error = 0; 452 450 453 451 if (name == NULL) 454 452 return -EINVAL; ··· 465 465 466 466 base_addr = read_all_xattrs(inode, ipage); 467 467 if (!base_addr) 468 - goto exit; 468 + return -ENOMEM; 469 469 470 470 /* find entry with wanted name. */ 471 471 here = __find_xattr(base_addr, index, len, name); ··· 539 539 if (error) 540 540 goto exit; 541 541 542 - if (is_inode_flag_set(fi, FI_ACL_MODE)) { 543 - inode->i_mode = fi->i_acl_mode; 542 + if (is_inode_flag_set(inode, FI_ACL_MODE)) { 543 + inode->i_mode = F2FS_I(inode)->i_acl_mode; 544 544 inode->i_ctime = CURRENT_TIME; 545 - clear_inode_flag(fi, FI_ACL_MODE); 545 + clear_inode_flag(inode, FI_ACL_MODE); 546 546 } 547 547 if (index == F2FS_XATTR_INDEX_ENCRYPTION && 548 548 !strcmp(name, F2FS_XATTR_NAME_ENCRYPTION_CONTEXT)) 549 549 f2fs_set_encrypted_inode(inode); 550 - 551 - if (ipage) 552 - update_inode(inode, ipage); 553 - else 554 - update_inode_page(inode); 550 + f2fs_mark_inode_dirty_sync(inode); 555 551 exit: 556 552 kzfree(base_addr); 557 553 return error;