f2fs.h (e98bdb3059cbf2b1cd4261e126b08429f64466c3) | f2fs.h (ad4d307fce0909a5f70635826f779321ab95b469) |
---|---|
1/* 2 * fs/f2fs/f2fs.h 3 * 4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 5 * http://www.samsung.com/ 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 94 unchanged lines hidden (view full) --- 103}; 104 105#define F2FS_FEATURE_ENCRYPT 0x0001 106#define F2FS_FEATURE_BLKZONED 0x0002 107 108#define F2FS_HAS_FEATURE(sb, mask) \ 109 ((F2FS_SB(sb)->raw_super->feature & cpu_to_le32(mask)) != 0) 110#define F2FS_SET_FEATURE(sb, mask) \ | 1/* 2 * fs/f2fs/f2fs.h 3 * 4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 5 * http://www.samsung.com/ 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 94 unchanged lines hidden (view full) --- 103}; 104 105#define F2FS_FEATURE_ENCRYPT 0x0001 106#define F2FS_FEATURE_BLKZONED 0x0002 107 108#define F2FS_HAS_FEATURE(sb, mask) \ 109 ((F2FS_SB(sb)->raw_super->feature & cpu_to_le32(mask)) != 0) 110#define F2FS_SET_FEATURE(sb, mask) \ |
111 F2FS_SB(sb)->raw_super->feature |= cpu_to_le32(mask) | 111 (F2FS_SB(sb)->raw_super->feature |= cpu_to_le32(mask)) |
112#define F2FS_CLEAR_FEATURE(sb, mask) \ | 112#define F2FS_CLEAR_FEATURE(sb, mask) \ |
113 F2FS_SB(sb)->raw_super->feature &= ~cpu_to_le32(mask) | 113 (F2FS_SB(sb)->raw_super->feature &= ~cpu_to_le32(mask)) |
114 115/* 116 * For checkpoint manager 117 */ 118enum { 119 NAT_BITMAP, 120 SIT_BITMAP 121}; --- 6 unchanged lines hidden (view full) --- 128 CP_DISCARD, 129}; 130 131#define DEF_BATCHED_TRIM_SECTIONS 2 132#define BATCHED_TRIM_SEGMENTS(sbi) \ 133 (SM_I(sbi)->trim_sections * (sbi)->segs_per_sec) 134#define BATCHED_TRIM_BLOCKS(sbi) \ 135 (BATCHED_TRIM_SEGMENTS(sbi) << (sbi)->log_blocks_per_seg) | 114 115/* 116 * For checkpoint manager 117 */ 118enum { 119 NAT_BITMAP, 120 SIT_BITMAP 121}; --- 6 unchanged lines hidden (view full) --- 128 CP_DISCARD, 129}; 130 131#define DEF_BATCHED_TRIM_SECTIONS 2 132#define BATCHED_TRIM_SEGMENTS(sbi) \ 133 (SM_I(sbi)->trim_sections * (sbi)->segs_per_sec) 134#define BATCHED_TRIM_BLOCKS(sbi) \ 135 (BATCHED_TRIM_SEGMENTS(sbi) << (sbi)->log_blocks_per_seg) |
136#define MAX_DISCARD_BLOCKS(sbi) \ 137 ((1 << (sbi)->log_blocks_per_seg) * (sbi)->segs_per_sec) 138#define DISCARD_ISSUE_RATE 8 |
|
136#define DEF_CP_INTERVAL 60 /* 60 secs */ 137#define DEF_IDLE_INTERVAL 5 /* 5 secs */ 138 139struct cp_control { 140 int reason; 141 __u64 trim_start; 142 __u64 trim_end; 143 __u64 trim_minlen; --- 32 unchanged lines hidden (view full) --- 176 177/* for the list of blockaddresses to be discarded */ 178struct discard_entry { 179 struct list_head list; /* list head */ 180 block_t blkaddr; /* block address to be discarded */ 181 int len; /* # of consecutive blocks of the discard */ 182}; 183 | 139#define DEF_CP_INTERVAL 60 /* 60 secs */ 140#define DEF_IDLE_INTERVAL 5 /* 5 secs */ 141 142struct cp_control { 143 int reason; 144 __u64 trim_start; 145 __u64 trim_end; 146 __u64 trim_minlen; --- 32 unchanged lines hidden (view full) --- 179 180/* for the list of blockaddresses to be discarded */ 181struct discard_entry { 182 struct list_head list; /* list head */ 183 block_t blkaddr; /* block address to be discarded */ 184 int len; /* # of consecutive blocks of the discard */ 185}; 186 |
184struct bio_entry { 185 struct list_head list; 186 struct bio *bio; 187 struct completion event; 188 int error; | 187enum { 188 D_PREP, 189 D_SUBMIT, 190 D_DONE, |
189}; 190 | 191}; 192 |
193struct discard_cmd { 194 struct list_head list; /* command list */ 195 struct completion wait; /* compleation */ 196 block_t lstart; /* logical start address */ 197 block_t len; /* length */ 198 struct bio *bio; /* bio */ 199 int state; /* state */ 200}; 201 202struct discard_cmd_control { 203 struct task_struct *f2fs_issue_discard; /* discard thread */ 204 struct list_head discard_entry_list; /* 4KB discard entry list */ 205 int nr_discards; /* # of discards in the list */ 206 struct list_head discard_cmd_list; /* discard cmd list */ 207 wait_queue_head_t discard_wait_queue; /* waiting queue for wake-up */ 208 struct mutex cmd_lock; 209 int max_discards; /* max. discards to be issued */ 210 atomic_t submit_discard; /* # of issued discard */ 211}; 212 |
|
191/* for the list of fsync inodes, used only during recovery */ 192struct fsync_inode_entry { 193 struct list_head list; /* list head */ 194 struct inode *inode; /* vfs inode pointer */ 195 block_t blkaddr; /* block address locating the last fsync */ 196 block_t last_dentry; /* block address locating the last dentry */ 197}; 198 --- 6 unchanged lines hidden (view full) --- 205#define segno_in_journal(jnl, i) (jnl->sit_j.entries[i].segno) 206 207#define MAX_NAT_JENTRIES(jnl) (NAT_JOURNAL_ENTRIES - nats_in_cursum(jnl)) 208#define MAX_SIT_JENTRIES(jnl) (SIT_JOURNAL_ENTRIES - sits_in_cursum(jnl)) 209 210static inline int update_nats_in_cursum(struct f2fs_journal *journal, int i) 211{ 212 int before = nats_in_cursum(journal); | 213/* for the list of fsync inodes, used only during recovery */ 214struct fsync_inode_entry { 215 struct list_head list; /* list head */ 216 struct inode *inode; /* vfs inode pointer */ 217 block_t blkaddr; /* block address locating the last fsync */ 218 block_t last_dentry; /* block address locating the last dentry */ 219}; 220 --- 6 unchanged lines hidden (view full) --- 227#define segno_in_journal(jnl, i) (jnl->sit_j.entries[i].segno) 228 229#define MAX_NAT_JENTRIES(jnl) (NAT_JOURNAL_ENTRIES - nats_in_cursum(jnl)) 230#define MAX_SIT_JENTRIES(jnl) (SIT_JOURNAL_ENTRIES - sits_in_cursum(jnl)) 231 232static inline int update_nats_in_cursum(struct f2fs_journal *journal, int i) 233{ 234 int before = nats_in_cursum(journal); |
235 |
|
213 journal->n_nats = cpu_to_le16(before + i); 214 return before; 215} 216 217static inline int update_sits_in_cursum(struct f2fs_journal *journal, int i) 218{ 219 int before = sits_in_cursum(journal); | 236 journal->n_nats = cpu_to_le16(before + i); 237 return before; 238} 239 240static inline int update_sits_in_cursum(struct f2fs_journal *journal, int i) 241{ 242 int before = sits_in_cursum(journal); |
243 |
|
220 journal->n_sits = cpu_to_le16(before + i); 221 return before; 222} 223 224static inline bool __has_cursum_space(struct f2fs_journal *journal, 225 int size, int type) 226{ 227 if (type == NAT_JOURNAL) --- 69 unchanged lines hidden (view full) --- 297 298static inline void make_dentry_ptr(struct inode *inode, 299 struct f2fs_dentry_ptr *d, void *src, int type) 300{ 301 d->inode = inode; 302 303 if (type == 1) { 304 struct f2fs_dentry_block *t = (struct f2fs_dentry_block *)src; | 244 journal->n_sits = cpu_to_le16(before + i); 245 return before; 246} 247 248static inline bool __has_cursum_space(struct f2fs_journal *journal, 249 int size, int type) 250{ 251 if (type == NAT_JOURNAL) --- 69 unchanged lines hidden (view full) --- 321 322static inline void make_dentry_ptr(struct inode *inode, 323 struct f2fs_dentry_ptr *d, void *src, int type) 324{ 325 d->inode = inode; 326 327 if (type == 1) { 328 struct f2fs_dentry_block *t = (struct f2fs_dentry_block *)src; |
329 |
|
305 d->max = NR_DENTRY_IN_BLOCK; 306 d->bitmap = &t->dentry_bitmap; 307 d->dentry = t->dentry; 308 d->filename = t->filename; 309 } else { 310 struct f2fs_inline_dentry *t = (struct f2fs_inline_dentry *)src; | 330 d->max = NR_DENTRY_IN_BLOCK; 331 d->bitmap = &t->dentry_bitmap; 332 d->dentry = t->dentry; 333 d->filename = t->filename; 334 } else { 335 struct f2fs_inline_dentry *t = (struct f2fs_inline_dentry *)src; |
336 |
|
311 d->max = NR_INLINE_DENTRY; 312 d->bitmap = &t->dentry_bitmap; 313 d->dentry = t->dentry; 314 d->filename = t->filename; 315 } 316} 317 318/* --- 110 unchanged lines hidden (view full) --- 429 umode_t i_acl_mode; /* keep file acl mode temporarily */ 430 431 /* Use below internally in f2fs*/ 432 unsigned long flags; /* use to pass per-file flags */ 433 struct rw_semaphore i_sem; /* protect fi info */ 434 atomic_t dirty_pages; /* # of dirty pages */ 435 f2fs_hash_t chash; /* hash value of given file name */ 436 unsigned int clevel; /* maximum level of given file name */ | 337 d->max = NR_INLINE_DENTRY; 338 d->bitmap = &t->dentry_bitmap; 339 d->dentry = t->dentry; 340 d->filename = t->filename; 341 } 342} 343 344/* --- 110 unchanged lines hidden (view full) --- 455 umode_t i_acl_mode; /* keep file acl mode temporarily */ 456 457 /* Use below internally in f2fs*/ 458 unsigned long flags; /* use to pass per-file flags */ 459 struct rw_semaphore i_sem; /* protect fi info */ 460 atomic_t dirty_pages; /* # of dirty pages */ 461 f2fs_hash_t chash; /* hash value of given file name */ 462 unsigned int clevel; /* maximum level of given file name */ |
463 struct task_struct *task; /* lookup and create consistency */ |
|
437 nid_t i_xattr_nid; /* node id that contains xattrs */ | 464 nid_t i_xattr_nid; /* node id that contains xattrs */ |
438 unsigned long long xattr_ver; /* cp version of xattr modification */ | |
439 loff_t last_disk_size; /* lastly written file size */ 440 441 struct list_head dirty_list; /* dirty list for dirs and files */ 442 struct list_head gdirty_list; /* linked in global dirty list */ 443 struct list_head inmem_pages; /* inmemory pages managed by f2fs */ 444 struct mutex inmem_lock; /* lock for inmemory pages */ 445 struct extent_tree *extent_tree; /* cached extent_tree entry */ 446 struct rw_semaphore dio_rwsem[2];/* avoid racing between dio and gc */ --- 44 unchanged lines hidden (view full) --- 491} 492 493static inline bool __is_front_mergeable(struct extent_info *cur, 494 struct extent_info *front) 495{ 496 return __is_extent_mergeable(cur, front); 497} 498 | 465 loff_t last_disk_size; /* lastly written file size */ 466 467 struct list_head dirty_list; /* dirty list for dirs and files */ 468 struct list_head gdirty_list; /* linked in global dirty list */ 469 struct list_head inmem_pages; /* inmemory pages managed by f2fs */ 470 struct mutex inmem_lock; /* lock for inmemory pages */ 471 struct extent_tree *extent_tree; /* cached extent_tree entry */ 472 struct rw_semaphore dio_rwsem[2];/* avoid racing between dio and gc */ --- 44 unchanged lines hidden (view full) --- 517} 518 519static inline bool __is_front_mergeable(struct extent_info *cur, 520 struct extent_info *front) 521{ 522 return __is_extent_mergeable(cur, front); 523} 524 |
499extern void f2fs_mark_inode_dirty_sync(struct inode *, bool); | 525extern void f2fs_mark_inode_dirty_sync(struct inode *inode, bool sync); |
500static inline void __try_update_largest_extent(struct inode *inode, 501 struct extent_tree *et, struct extent_node *en) 502{ 503 if (en->ei.len > et->largest.len) { 504 et->largest = en->ei; 505 f2fs_mark_inode_dirty_sync(inode, true); 506 } 507} --- 25 unchanged lines hidden (view full) --- 533 struct radix_tree_root free_nid_root;/* root of the free_nid cache */ 534 struct list_head nid_list[MAX_NID_LIST];/* lists for free nids */ 535 unsigned int nid_cnt[MAX_NID_LIST]; /* the number of free node id */ 536 spinlock_t nid_list_lock; /* protect nid lists ops */ 537 struct mutex build_lock; /* lock for build free nids */ 538 539 /* for checkpoint */ 540 char *nat_bitmap; /* NAT bitmap pointer */ | 526static inline void __try_update_largest_extent(struct inode *inode, 527 struct extent_tree *et, struct extent_node *en) 528{ 529 if (en->ei.len > et->largest.len) { 530 et->largest = en->ei; 531 f2fs_mark_inode_dirty_sync(inode, true); 532 } 533} --- 25 unchanged lines hidden (view full) --- 559 struct radix_tree_root free_nid_root;/* root of the free_nid cache */ 560 struct list_head nid_list[MAX_NID_LIST];/* lists for free nids */ 561 unsigned int nid_cnt[MAX_NID_LIST]; /* the number of free node id */ 562 spinlock_t nid_list_lock; /* protect nid lists ops */ 563 struct mutex build_lock; /* lock for build free nids */ 564 565 /* for checkpoint */ 566 char *nat_bitmap; /* NAT bitmap pointer */ |
567#ifdef CONFIG_F2FS_CHECK_FS 568 char *nat_bitmap_mir; /* NAT bitmap mirror */ 569#endif |
|
541 int bitmap_size; /* bitmap size */ 542}; 543 544/* 545 * this structure is used as one of function parameters. 546 * all the information are dedicated to a given direct node block determined 547 * by the data offset in a file. 548 */ --- 74 unchanged lines hidden (view full) --- 623 unsigned int segment_count; /* total # of segments */ 624 unsigned int main_segments; /* # of segments in main area */ 625 unsigned int reserved_segments; /* # of reserved segments */ 626 unsigned int ovp_segments; /* # of overprovision segments */ 627 628 /* a threshold to reclaim prefree segments */ 629 unsigned int rec_prefree_segments; 630 | 570 int bitmap_size; /* bitmap size */ 571}; 572 573/* 574 * this structure is used as one of function parameters. 575 * all the information are dedicated to a given direct node block determined 576 * by the data offset in a file. 577 */ --- 74 unchanged lines hidden (view full) --- 652 unsigned int segment_count; /* total # of segments */ 653 unsigned int main_segments; /* # of segments in main area */ 654 unsigned int reserved_segments; /* # of reserved segments */ 655 unsigned int ovp_segments; /* # of overprovision segments */ 656 657 /* a threshold to reclaim prefree segments */ 658 unsigned int rec_prefree_segments; 659 |
631 /* for small discard management */ 632 struct list_head discard_list; /* 4KB discard list */ 633 struct list_head wait_list; /* linked with issued discard bio */ 634 int nr_discards; /* # of discards in the list */ 635 int max_discards; /* max. discards to be issued */ 636 | |
637 /* for batched trimming */ 638 unsigned int trim_sections; /* # of sections to trim */ 639 640 struct list_head sit_entry_set; /* sit entry set list */ 641 642 unsigned int ipu_policy; /* in-place-update policy */ 643 unsigned int min_ipu_util; /* in-place-update threshold */ 644 unsigned int min_fsync_blocks; /* threshold for fsync */ 645 646 /* for flush command control */ | 660 /* for batched trimming */ 661 unsigned int trim_sections; /* # of sections to trim */ 662 663 struct list_head sit_entry_set; /* sit entry set list */ 664 665 unsigned int ipu_policy; /* in-place-update policy */ 666 unsigned int min_ipu_util; /* in-place-update threshold */ 667 unsigned int min_fsync_blocks; /* threshold for fsync */ 668 669 /* for flush command control */ |
647 struct flush_cmd_control *cmd_control_info; | 670 struct flush_cmd_control *fcc_info; |
648 | 671 |
672 /* for discard command control */ 673 struct discard_cmd_control *dcc_info; |
|
649}; 650 651/* 652 * For superblock 653 */ 654/* 655 * COUNT_TYPE for monitoring 656 * --- 42 unchanged lines hidden (view full) --- 699 struct f2fs_sb_info *sbi; /* f2fs_sb_info pointer */ 700 enum page_type type; /* contains DATA/NODE/META/META_FLUSH */ 701 int op; /* contains REQ_OP_ */ 702 int op_flags; /* req_flag_bits */ 703 block_t new_blkaddr; /* new block address to be written */ 704 block_t old_blkaddr; /* old block address before Cow */ 705 struct page *page; /* page to be written */ 706 struct page *encrypted_page; /* encrypted page */ | 674}; 675 676/* 677 * For superblock 678 */ 679/* 680 * COUNT_TYPE for monitoring 681 * --- 42 unchanged lines hidden (view full) --- 724 struct f2fs_sb_info *sbi; /* f2fs_sb_info pointer */ 725 enum page_type type; /* contains DATA/NODE/META/META_FLUSH */ 726 int op; /* contains REQ_OP_ */ 727 int op_flags; /* req_flag_bits */ 728 block_t new_blkaddr; /* new block address to be written */ 729 block_t old_blkaddr; /* old block address before Cow */ 730 struct page *page; /* page to be written */ 731 struct page *encrypted_page; /* encrypted page */ |
732 bool submitted; /* indicate IO submission */ |
|
707}; 708 709#define is_read_io(rw) (rw == READ) 710struct f2fs_bio_info { 711 struct f2fs_sb_info *sbi; /* f2fs superblock */ 712 struct bio *bio; /* bios to merge */ 713 sector_t last_block_in_bio; /* last block number */ 714 struct f2fs_io_info fio; /* store buffered io info. */ --- 72 unchanged lines hidden (view full) --- 787 788 /* for segment-related operations */ 789 struct f2fs_sm_info *sm_info; /* segment manager */ 790 791 /* for bio operations */ 792 struct f2fs_bio_info read_io; /* for read bios */ 793 struct f2fs_bio_info write_io[NR_PAGE_TYPE]; /* for write bios */ 794 struct mutex wio_mutex[NODE + 1]; /* bio ordering for NODE/DATA */ | 733}; 734 735#define is_read_io(rw) (rw == READ) 736struct f2fs_bio_info { 737 struct f2fs_sb_info *sbi; /* f2fs superblock */ 738 struct bio *bio; /* bios to merge */ 739 sector_t last_block_in_bio; /* last block number */ 740 struct f2fs_io_info fio; /* store buffered io info. */ --- 72 unchanged lines hidden (view full) --- 813 814 /* for segment-related operations */ 815 struct f2fs_sm_info *sm_info; /* segment manager */ 816 817 /* for bio operations */ 818 struct f2fs_bio_info read_io; /* for read bios */ 819 struct f2fs_bio_info write_io[NR_PAGE_TYPE]; /* for write bios */ 820 struct mutex wio_mutex[NODE + 1]; /* bio ordering for NODE/DATA */ |
821 int write_io_size_bits; /* Write IO size bits */ 822 mempool_t *write_io_dummy; /* Dummy pages */ |
|
795 796 /* for checkpoint */ 797 struct f2fs_checkpoint *ckpt; /* raw checkpoint pointer */ 798 int cur_cp_pack; /* remain current cp pack */ 799 spinlock_t cp_lock; /* for flag in ckpt */ 800 struct inode *meta_inode; /* cache meta blocks */ 801 struct mutex cp_mutex; /* checkpoint procedure lock */ 802 struct rw_semaphore cp_rwsem; /* blocking FS operations */ --- 55 unchanged lines hidden (view full) --- 858 859 struct f2fs_mount_info mount_opt; /* mount options */ 860 861 /* for cleaning operations */ 862 struct mutex gc_mutex; /* mutex for GC */ 863 struct f2fs_gc_kthread *gc_thread; /* GC thread */ 864 unsigned int cur_victim_sec; /* current victim section num */ 865 | 823 824 /* for checkpoint */ 825 struct f2fs_checkpoint *ckpt; /* raw checkpoint pointer */ 826 int cur_cp_pack; /* remain current cp pack */ 827 spinlock_t cp_lock; /* for flag in ckpt */ 828 struct inode *meta_inode; /* cache meta blocks */ 829 struct mutex cp_mutex; /* checkpoint procedure lock */ 830 struct rw_semaphore cp_rwsem; /* blocking FS operations */ --- 55 unchanged lines hidden (view full) --- 886 887 struct f2fs_mount_info mount_opt; /* mount options */ 888 889 /* for cleaning operations */ 890 struct mutex gc_mutex; /* mutex for GC */ 891 struct f2fs_gc_kthread *gc_thread; /* GC thread */ 892 unsigned int cur_victim_sec; /* current victim section num */ 893 |
894 /* threshold for converting bg victims for fg */ 895 u64 fggc_threshold; 896 |
|
866 /* maximum # of trials to find a victim segment for SSR and GC */ 867 unsigned int max_victim_search; 868 869 /* 870 * for stat information. 871 * one is for the LFS mode, and the other is for the SSR mode. 872 */ 873#ifdef CONFIG_F2FS_STAT_FS 874 struct f2fs_stat_info *stat_info; /* FS status information */ 875 unsigned int segment_count[2]; /* # of allocated segments */ 876 unsigned int block_count[2]; /* # of allocated blocks */ 877 atomic_t inplace_count; /* # of inplace update */ 878 atomic64_t total_hit_ext; /* # of lookup extent cache */ 879 atomic64_t read_hit_rbtree; /* # of hit rbtree extent node */ 880 atomic64_t read_hit_largest; /* # of hit largest extent node */ 881 atomic64_t read_hit_cached; /* # of hit cached extent node */ 882 atomic_t inline_xattr; /* # of inline_xattr inodes */ 883 atomic_t inline_inode; /* # of inline_data inodes */ 884 atomic_t inline_dir; /* # of inline_dentry inodes */ | 897 /* maximum # of trials to find a victim segment for SSR and GC */ 898 unsigned int max_victim_search; 899 900 /* 901 * for stat information. 902 * one is for the LFS mode, and the other is for the SSR mode. 903 */ 904#ifdef CONFIG_F2FS_STAT_FS 905 struct f2fs_stat_info *stat_info; /* FS status information */ 906 unsigned int segment_count[2]; /* # of allocated segments */ 907 unsigned int block_count[2]; /* # of allocated blocks */ 908 atomic_t inplace_count; /* # of inplace update */ 909 atomic64_t total_hit_ext; /* # of lookup extent cache */ 910 atomic64_t read_hit_rbtree; /* # of hit rbtree extent node */ 911 atomic64_t read_hit_largest; /* # of hit largest extent node */ 912 atomic64_t read_hit_cached; /* # of hit cached extent node */ 913 atomic_t inline_xattr; /* # of inline_xattr inodes */ 914 atomic_t inline_inode; /* # of inline_data inodes */ 915 atomic_t inline_dir; /* # of inline_dentry inodes */ |
916 atomic_t aw_cnt; /* # of atomic writes */ 917 atomic_t max_aw_cnt; /* max # of atomic writes */ |
|
885 int bg_gc; /* background gc calls */ 886 unsigned int ndirty_inode[NR_INODE_TYPE]; /* # of dirty inodes */ 887#endif 888 unsigned int last_victim[2]; /* last victim segment # */ 889 spinlock_t stat_lock; /* lock for stat operations */ 890 891 /* For sysfs suppport */ 892 struct kobject s_kobj; --- 556 unchanged lines hidden (view full) --- 1449 return percpu_counter_sum_positive(&sbi->total_valid_inode_count); 1450} 1451 1452static inline struct page *f2fs_grab_cache_page(struct address_space *mapping, 1453 pgoff_t index, bool for_write) 1454{ 1455#ifdef CONFIG_F2FS_FAULT_INJECTION 1456 struct page *page = find_lock_page(mapping, index); | 918 int bg_gc; /* background gc calls */ 919 unsigned int ndirty_inode[NR_INODE_TYPE]; /* # of dirty inodes */ 920#endif 921 unsigned int last_victim[2]; /* last victim segment # */ 922 spinlock_t stat_lock; /* lock for stat operations */ 923 924 /* For sysfs suppport */ 925 struct kobject s_kobj; --- 556 unchanged lines hidden (view full) --- 1482 return percpu_counter_sum_positive(&sbi->total_valid_inode_count); 1483} 1484 1485static inline struct page *f2fs_grab_cache_page(struct address_space *mapping, 1486 pgoff_t index, bool for_write) 1487{ 1488#ifdef CONFIG_F2FS_FAULT_INJECTION 1489 struct page *page = find_lock_page(mapping, index); |
1490 |
|
1457 if (page) 1458 return page; 1459 1460 if (time_to_inject(F2FS_M_SB(mapping), FAULT_PAGE_ALLOC)) 1461 return NULL; 1462#endif 1463 if (!for_write) 1464 return grab_cache_page(mapping, index); --- 67 unchanged lines hidden (view full) --- 1532 cond_resched(); 1533} 1534 1535#define RAW_IS_INODE(p) ((p)->footer.nid == (p)->footer.ino) 1536 1537static inline bool IS_INODE(struct page *page) 1538{ 1539 struct f2fs_node *p = F2FS_NODE(page); | 1491 if (page) 1492 return page; 1493 1494 if (time_to_inject(F2FS_M_SB(mapping), FAULT_PAGE_ALLOC)) 1495 return NULL; 1496#endif 1497 if (!for_write) 1498 return grab_cache_page(mapping, index); --- 67 unchanged lines hidden (view full) --- 1566 cond_resched(); 1567} 1568 1569#define RAW_IS_INODE(p) ((p)->footer.nid == (p)->footer.ino) 1570 1571static inline bool IS_INODE(struct page *page) 1572{ 1573 struct f2fs_node *p = F2FS_NODE(page); |
1574 |
|
1540 return RAW_IS_INODE(p); 1541} 1542 1543static inline __le32 *blkaddr_in_node(struct f2fs_node *node) 1544{ 1545 return RAW_IS_INODE(node) ? node->i.i_addr : node->dn.addr; 1546} 1547 1548static inline block_t datablock_addr(struct page *node_page, 1549 unsigned int offset) 1550{ 1551 struct f2fs_node *raw_node; 1552 __le32 *addr_array; | 1575 return RAW_IS_INODE(p); 1576} 1577 1578static inline __le32 *blkaddr_in_node(struct f2fs_node *node) 1579{ 1580 return RAW_IS_INODE(node) ? node->i.i_addr : node->dn.addr; 1581} 1582 1583static inline block_t datablock_addr(struct page *node_page, 1584 unsigned int offset) 1585{ 1586 struct f2fs_node *raw_node; 1587 __le32 *addr_array; |
1588 |
|
1553 raw_node = F2FS_NODE(node_page); 1554 addr_array = blkaddr_in_node(raw_node); 1555 return le32_to_cpu(addr_array[offset]); 1556} 1557 1558static inline int f2fs_test_bit(unsigned int nr, char *addr) 1559{ 1560 int mask; --- 67 unchanged lines hidden (view full) --- 1628 FI_NO_EXTENT, /* not to use the extent cache */ 1629 FI_INLINE_XATTR, /* used for inline xattr */ 1630 FI_INLINE_DATA, /* used for inline data*/ 1631 FI_INLINE_DENTRY, /* used for inline dentry */ 1632 FI_APPEND_WRITE, /* inode has appended data */ 1633 FI_UPDATE_WRITE, /* inode has in-place-update data */ 1634 FI_NEED_IPU, /* used for ipu per file */ 1635 FI_ATOMIC_FILE, /* indicate atomic file */ | 1589 raw_node = F2FS_NODE(node_page); 1590 addr_array = blkaddr_in_node(raw_node); 1591 return le32_to_cpu(addr_array[offset]); 1592} 1593 1594static inline int f2fs_test_bit(unsigned int nr, char *addr) 1595{ 1596 int mask; --- 67 unchanged lines hidden (view full) --- 1664 FI_NO_EXTENT, /* not to use the extent cache */ 1665 FI_INLINE_XATTR, /* used for inline xattr */ 1666 FI_INLINE_DATA, /* used for inline data*/ 1667 FI_INLINE_DENTRY, /* used for inline dentry */ 1668 FI_APPEND_WRITE, /* inode has appended data */ 1669 FI_UPDATE_WRITE, /* inode has in-place-update data */ 1670 FI_NEED_IPU, /* used for ipu per file */ 1671 FI_ATOMIC_FILE, /* indicate atomic file */ |
1672 FI_ATOMIC_COMMIT, /* indicate the state of atomical committing */ |
|
1636 FI_VOLATILE_FILE, /* indicate volatile file */ 1637 FI_FIRST_BLOCK_WRITTEN, /* indicate #0 data block was written */ 1638 FI_DROP_CACHE, /* drop dirty page cache */ 1639 FI_DATA_EXIST, /* indicate data exists */ 1640 FI_INLINE_DOTS, /* indicate inline dot dentries */ 1641 FI_DO_DEFRAG, /* indicate defragment is running */ 1642 FI_DIRTY_FILE, /* indicate regular/symlink has dirty pages */ | 1673 FI_VOLATILE_FILE, /* indicate volatile file */ 1674 FI_FIRST_BLOCK_WRITTEN, /* indicate #0 data block was written */ 1675 FI_DROP_CACHE, /* drop dirty page cache */ 1676 FI_DATA_EXIST, /* indicate data exists */ 1677 FI_INLINE_DOTS, /* indicate inline dot dentries */ 1678 FI_DO_DEFRAG, /* indicate defragment is running */ 1679 FI_DIRTY_FILE, /* indicate regular/symlink has dirty pages */ |
1680 FI_NO_PREALLOC, /* indicate skipped preallocated blocks */ |
|
1643}; 1644 1645static inline void __mark_inode_dirty_flag(struct inode *inode, 1646 int flag, bool set) 1647{ 1648 switch (flag) { 1649 case FI_INLINE_XATTR: 1650 case FI_INLINE_DATA: --- 128 unchanged lines hidden (view full) --- 1779 if (f2fs_has_inline_xattr(inode)) 1780 return DEF_ADDRS_PER_INODE - F2FS_INLINE_XATTR_ADDRS; 1781 return DEF_ADDRS_PER_INODE; 1782} 1783 1784static inline void *inline_xattr_addr(struct page *page) 1785{ 1786 struct f2fs_inode *ri = F2FS_INODE(page); | 1681}; 1682 1683static inline void __mark_inode_dirty_flag(struct inode *inode, 1684 int flag, bool set) 1685{ 1686 switch (flag) { 1687 case FI_INLINE_XATTR: 1688 case FI_INLINE_DATA: --- 128 unchanged lines hidden (view full) --- 1817 if (f2fs_has_inline_xattr(inode)) 1818 return DEF_ADDRS_PER_INODE - F2FS_INLINE_XATTR_ADDRS; 1819 return DEF_ADDRS_PER_INODE; 1820} 1821 1822static inline void *inline_xattr_addr(struct page *page) 1823{ 1824 struct f2fs_inode *ri = F2FS_INODE(page); |
1825 |
|
1787 return (void *)&(ri->i_addr[DEF_ADDRS_PER_INODE - 1788 F2FS_INLINE_XATTR_ADDRS]); 1789} 1790 1791static inline int inline_xattr_size(struct inode *inode) 1792{ 1793 if (f2fs_has_inline_xattr(inode)) 1794 return F2FS_INLINE_XATTR_ADDRS << 2; --- 22 unchanged lines hidden (view full) --- 1817 return is_inode_flag_set(inode, FI_INLINE_DOTS); 1818} 1819 1820static inline bool f2fs_is_atomic_file(struct inode *inode) 1821{ 1822 return is_inode_flag_set(inode, FI_ATOMIC_FILE); 1823} 1824 | 1826 return (void *)&(ri->i_addr[DEF_ADDRS_PER_INODE - 1827 F2FS_INLINE_XATTR_ADDRS]); 1828} 1829 1830static inline int inline_xattr_size(struct inode *inode) 1831{ 1832 if (f2fs_has_inline_xattr(inode)) 1833 return F2FS_INLINE_XATTR_ADDRS << 2; --- 22 unchanged lines hidden (view full) --- 1856 return is_inode_flag_set(inode, FI_INLINE_DOTS); 1857} 1858 1859static inline bool f2fs_is_atomic_file(struct inode *inode) 1860{ 1861 return is_inode_flag_set(inode, FI_ATOMIC_FILE); 1862} 1863 |
1864static inline bool f2fs_is_commit_atomic_write(struct inode *inode) 1865{ 1866 return is_inode_flag_set(inode, FI_ATOMIC_COMMIT); 1867} 1868 |
|
1825static inline bool f2fs_is_volatile_file(struct inode *inode) 1826{ 1827 return is_inode_flag_set(inode, FI_VOLATILE_FILE); 1828} 1829 1830static inline bool f2fs_is_first_block_written(struct inode *inode) 1831{ 1832 return is_inode_flag_set(inode, FI_FIRST_BLOCK_WRITTEN); 1833} 1834 1835static inline bool f2fs_is_drop_cache(struct inode *inode) 1836{ 1837 return is_inode_flag_set(inode, FI_DROP_CACHE); 1838} 1839 1840static inline void *inline_data_addr(struct page *page) 1841{ 1842 struct f2fs_inode *ri = F2FS_INODE(page); | 1869static inline bool f2fs_is_volatile_file(struct inode *inode) 1870{ 1871 return is_inode_flag_set(inode, FI_VOLATILE_FILE); 1872} 1873 1874static inline bool f2fs_is_first_block_written(struct inode *inode) 1875{ 1876 return is_inode_flag_set(inode, FI_FIRST_BLOCK_WRITTEN); 1877} 1878 1879static inline bool f2fs_is_drop_cache(struct inode *inode) 1880{ 1881 return is_inode_flag_set(inode, FI_DROP_CACHE); 1882} 1883 1884static inline void *inline_data_addr(struct page *page) 1885{ 1886 struct f2fs_inode *ri = F2FS_INODE(page); |
1887 |
|
1843 return (void *)&(ri->i_addr[1]); 1844} 1845 1846static inline int f2fs_has_inline_dentry(struct inode *inode) 1847{ 1848 return is_inode_flag_set(inode, FI_INLINE_DENTRY); 1849} 1850 --- 106 unchanged lines hidden (view full) --- 1957#define PGOFS_OF_NEXT_DNODE(pgofs, inode) \ 1958 ((pgofs < ADDRS_PER_INODE(inode)) ? ADDRS_PER_INODE(inode) : \ 1959 (pgofs - ADDRS_PER_INODE(inode) + ADDRS_PER_BLOCK) / \ 1960 ADDRS_PER_BLOCK * ADDRS_PER_BLOCK + ADDRS_PER_INODE(inode)) 1961 1962/* 1963 * file.c 1964 */ | 1888 return (void *)&(ri->i_addr[1]); 1889} 1890 1891static inline int f2fs_has_inline_dentry(struct inode *inode) 1892{ 1893 return is_inode_flag_set(inode, FI_INLINE_DENTRY); 1894} 1895 --- 106 unchanged lines hidden (view full) --- 2002#define PGOFS_OF_NEXT_DNODE(pgofs, inode) \ 2003 ((pgofs < ADDRS_PER_INODE(inode)) ? ADDRS_PER_INODE(inode) : \ 2004 (pgofs - ADDRS_PER_INODE(inode) + ADDRS_PER_BLOCK) / \ 2005 ADDRS_PER_BLOCK * ADDRS_PER_BLOCK + ADDRS_PER_INODE(inode)) 2006 2007/* 2008 * file.c 2009 */ |
1965int f2fs_sync_file(struct file *, loff_t, loff_t, int); 1966void truncate_data_blocks(struct dnode_of_data *); 1967int truncate_blocks(struct inode *, u64, bool); 1968int f2fs_truncate(struct inode *); 1969int f2fs_getattr(struct vfsmount *, struct dentry *, struct kstat *); 1970int f2fs_setattr(struct dentry *, struct iattr *); 1971int truncate_hole(struct inode *, pgoff_t, pgoff_t); 1972int truncate_data_blocks_range(struct dnode_of_data *, int); 1973long f2fs_ioctl(struct file *, unsigned int, unsigned long); 1974long f2fs_compat_ioctl(struct file *, unsigned int, unsigned long); | 2010int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync); 2011void truncate_data_blocks(struct dnode_of_data *dn); 2012int truncate_blocks(struct inode *inode, u64 from, bool lock); 2013int f2fs_truncate(struct inode *inode); 2014int f2fs_getattr(struct vfsmount *mnt, struct dentry *dentry, 2015 struct kstat *stat); 2016int f2fs_setattr(struct dentry *dentry, struct iattr *attr); 2017int truncate_hole(struct inode *inode, pgoff_t pg_start, pgoff_t pg_end); 2018int truncate_data_blocks_range(struct dnode_of_data *dn, int count); 2019long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); 2020long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg); |
1975 1976/* 1977 * inode.c 1978 */ | 2021 2022/* 2023 * inode.c 2024 */ |
1979void f2fs_set_inode_flags(struct inode *); 1980struct inode *f2fs_iget(struct super_block *, unsigned long); 1981struct inode *f2fs_iget_retry(struct super_block *, unsigned long); 1982int try_to_free_nats(struct f2fs_sb_info *, int); 1983int update_inode(struct inode *, struct page *); 1984int update_inode_page(struct inode *); 1985int f2fs_write_inode(struct inode *, struct writeback_control *); 1986void f2fs_evict_inode(struct inode *); 1987void handle_failed_inode(struct inode *); | 2025void f2fs_set_inode_flags(struct inode *inode); 2026struct inode *f2fs_iget(struct super_block *sb, unsigned long ino); 2027struct inode *f2fs_iget_retry(struct super_block *sb, unsigned long ino); 2028int try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink); 2029int update_inode(struct inode *inode, struct page *node_page); 2030int update_inode_page(struct inode *inode); 2031int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc); 2032void f2fs_evict_inode(struct inode *inode); 2033void handle_failed_inode(struct inode *inode); |
1988 1989/* 1990 * namei.c 1991 */ 1992struct dentry *f2fs_get_parent(struct dentry *child); 1993 1994/* 1995 * dir.c 1996 */ | 2034 2035/* 2036 * namei.c 2037 */ 2038struct dentry *f2fs_get_parent(struct dentry *child); 2039 2040/* 2041 * dir.c 2042 */ |
1997void set_de_type(struct f2fs_dir_entry *, umode_t); 1998unsigned char get_de_type(struct f2fs_dir_entry *); 1999struct f2fs_dir_entry *find_target_dentry(struct fscrypt_name *, 2000 f2fs_hash_t, int *, struct f2fs_dentry_ptr *); 2001int f2fs_fill_dentries(struct dir_context *, struct f2fs_dentry_ptr *, 2002 unsigned int, struct fscrypt_str *); 2003void do_make_empty_dir(struct inode *, struct inode *, 2004 struct f2fs_dentry_ptr *); 2005struct page *init_inode_metadata(struct inode *, struct inode *, 2006 const struct qstr *, const struct qstr *, struct page *); 2007void update_parent_metadata(struct inode *, struct inode *, unsigned int); 2008int room_for_filename(const void *, int, int); 2009void f2fs_drop_nlink(struct inode *, struct inode *); 2010struct f2fs_dir_entry *__f2fs_find_entry(struct inode *, struct fscrypt_name *, 2011 struct page **); 2012struct f2fs_dir_entry *f2fs_find_entry(struct inode *, const struct qstr *, 2013 struct page **); 2014struct f2fs_dir_entry *f2fs_parent_dir(struct inode *, struct page **); 2015ino_t f2fs_inode_by_name(struct inode *, const struct qstr *, struct page **); 2016void f2fs_set_link(struct inode *, struct f2fs_dir_entry *, 2017 struct page *, struct inode *); 2018int update_dent_inode(struct inode *, struct inode *, const struct qstr *); 2019void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *, 2020 const struct qstr *, f2fs_hash_t , unsigned int); 2021int f2fs_add_regular_entry(struct inode *, const struct qstr *, 2022 const struct qstr *, struct inode *, nid_t, umode_t); 2023int __f2fs_do_add_link(struct inode *, struct fscrypt_name*, struct inode *, 2024 nid_t, umode_t); 2025int __f2fs_add_link(struct inode *, const struct qstr *, struct inode *, nid_t, 2026 umode_t); 2027void f2fs_delete_entry(struct f2fs_dir_entry *, struct page *, struct inode *, 2028 struct inode *); 2029int f2fs_do_tmpfile(struct inode *, struct inode *); 2030bool f2fs_empty_dir(struct inode *); | 2043void set_de_type(struct f2fs_dir_entry *de, umode_t mode); 2044unsigned char get_de_type(struct f2fs_dir_entry *de); 2045struct f2fs_dir_entry *find_target_dentry(struct fscrypt_name *fname, 2046 f2fs_hash_t namehash, int *max_slots, 2047 struct f2fs_dentry_ptr *d); 2048int f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d, 2049 unsigned int start_pos, struct fscrypt_str *fstr); 2050void do_make_empty_dir(struct inode *inode, struct inode *parent, 2051 struct f2fs_dentry_ptr *d); 2052struct page *init_inode_metadata(struct inode *inode, struct inode *dir, 2053 const struct qstr *new_name, 2054 const struct qstr *orig_name, struct page *dpage); 2055void update_parent_metadata(struct inode *dir, struct inode *inode, 2056 unsigned int current_depth); 2057int room_for_filename(const void *bitmap, int slots, int max_slots); 2058void f2fs_drop_nlink(struct inode *dir, struct inode *inode); 2059struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir, 2060 struct fscrypt_name *fname, struct page **res_page); 2061struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir, 2062 const struct qstr *child, struct page **res_page); 2063struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p); 2064ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr, 2065 struct page **page); 2066void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de, 2067 struct page *page, struct inode *inode); 2068int update_dent_inode(struct inode *inode, struct inode *to, 2069 const struct qstr *name); 2070void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d, 2071 const struct qstr *name, f2fs_hash_t name_hash, 2072 unsigned int bit_pos); 2073int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name, 2074 const struct qstr *orig_name, 2075 struct inode *inode, nid_t ino, umode_t mode); 2076int __f2fs_do_add_link(struct inode *dir, struct fscrypt_name *fname, 2077 struct inode *inode, nid_t ino, umode_t mode); 2078int __f2fs_add_link(struct inode *dir, const struct qstr *name, 2079 struct inode *inode, nid_t ino, umode_t mode); 2080void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page, 2081 struct inode *dir, struct inode *inode); 2082int f2fs_do_tmpfile(struct inode *inode, struct inode *dir); 2083bool f2fs_empty_dir(struct inode *dir); |
2031 2032static inline int f2fs_add_link(struct dentry *dentry, struct inode *inode) 2033{ 2034 return __f2fs_add_link(d_inode(dentry->d_parent), &dentry->d_name, 2035 inode, inode->i_ino, inode->i_mode); 2036} 2037 2038/* 2039 * super.c 2040 */ | 2084 2085static inline int f2fs_add_link(struct dentry *dentry, struct inode *inode) 2086{ 2087 return __f2fs_add_link(d_inode(dentry->d_parent), &dentry->d_name, 2088 inode, inode->i_ino, inode->i_mode); 2089} 2090 2091/* 2092 * super.c 2093 */ |
2041int f2fs_inode_dirtied(struct inode *, bool); 2042void f2fs_inode_synced(struct inode *); 2043int f2fs_commit_super(struct f2fs_sb_info *, bool); 2044int f2fs_sync_fs(struct super_block *, int); | 2094int f2fs_inode_dirtied(struct inode *inode, bool sync); 2095void f2fs_inode_synced(struct inode *inode); 2096int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover); 2097int f2fs_sync_fs(struct super_block *sb, int sync); |
2045extern __printf(3, 4) | 2098extern __printf(3, 4) |
2046void f2fs_msg(struct super_block *, const char *, const char *, ...); | 2099void f2fs_msg(struct super_block *sb, const char *level, const char *fmt, ...); |
2047int sanity_check_ckpt(struct f2fs_sb_info *sbi); 2048 2049/* 2050 * hash.c 2051 */ | 2100int sanity_check_ckpt(struct f2fs_sb_info *sbi); 2101 2102/* 2103 * hash.c 2104 */ |
2052f2fs_hash_t f2fs_dentry_hash(const struct qstr *); | 2105f2fs_hash_t f2fs_dentry_hash(const struct qstr *name_info); |
2053 2054/* 2055 * node.c 2056 */ 2057struct dnode_of_data; 2058struct node_info; 2059 | 2106 2107/* 2108 * node.c 2109 */ 2110struct dnode_of_data; 2111struct node_info; 2112 |
2060bool available_free_memory(struct f2fs_sb_info *, int); 2061int need_dentry_mark(struct f2fs_sb_info *, nid_t); 2062bool is_checkpointed_node(struct f2fs_sb_info *, nid_t); 2063bool need_inode_block_update(struct f2fs_sb_info *, nid_t); 2064void get_node_info(struct f2fs_sb_info *, nid_t, struct node_info *); 2065pgoff_t get_next_page_offset(struct dnode_of_data *, pgoff_t); 2066int get_dnode_of_data(struct dnode_of_data *, pgoff_t, int); 2067int truncate_inode_blocks(struct inode *, pgoff_t); 2068int truncate_xattr_node(struct inode *, struct page *); 2069int wait_on_node_pages_writeback(struct f2fs_sb_info *, nid_t); 2070int remove_inode_page(struct inode *); 2071struct page *new_inode_page(struct inode *); 2072struct page *new_node_page(struct dnode_of_data *, unsigned int, struct page *); 2073void ra_node_page(struct f2fs_sb_info *, nid_t); 2074struct page *get_node_page(struct f2fs_sb_info *, pgoff_t); 2075struct page *get_node_page_ra(struct page *, int); 2076void move_node_page(struct page *, int); 2077int fsync_node_pages(struct f2fs_sb_info *, struct inode *, 2078 struct writeback_control *, bool); 2079int sync_node_pages(struct f2fs_sb_info *, struct writeback_control *); 2080void build_free_nids(struct f2fs_sb_info *, bool); 2081bool alloc_nid(struct f2fs_sb_info *, nid_t *); 2082void alloc_nid_done(struct f2fs_sb_info *, nid_t); 2083void alloc_nid_failed(struct f2fs_sb_info *, nid_t); 2084int try_to_free_nids(struct f2fs_sb_info *, int); 2085void recover_inline_xattr(struct inode *, struct page *); 2086void recover_xattr_data(struct inode *, struct page *, block_t); 2087int recover_inode_page(struct f2fs_sb_info *, struct page *); 2088int restore_node_summary(struct f2fs_sb_info *, unsigned int, 2089 struct f2fs_summary_block *); 2090void flush_nat_entries(struct f2fs_sb_info *); 2091int build_node_manager(struct f2fs_sb_info *); 2092void destroy_node_manager(struct f2fs_sb_info *); | 2113bool available_free_memory(struct f2fs_sb_info *sbi, int type); 2114int need_dentry_mark(struct f2fs_sb_info *sbi, nid_t nid); 2115bool is_checkpointed_node(struct f2fs_sb_info *sbi, nid_t nid); 2116bool need_inode_block_update(struct f2fs_sb_info *sbi, nid_t ino); 2117void get_node_info(struct f2fs_sb_info *sbi, nid_t nid, struct node_info *ni); 2118pgoff_t get_next_page_offset(struct dnode_of_data *dn, pgoff_t pgofs); 2119int get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode); 2120int truncate_inode_blocks(struct inode *inode, pgoff_t from); 2121int truncate_xattr_node(struct inode *inode, struct page *page); 2122int wait_on_node_pages_writeback(struct f2fs_sb_info *sbi, nid_t ino); 2123int remove_inode_page(struct inode *inode); 2124struct page *new_inode_page(struct inode *inode); 2125struct page *new_node_page(struct dnode_of_data *dn, 2126 unsigned int ofs, struct page *ipage); 2127void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid); 2128struct page *get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid); 2129struct page *get_node_page_ra(struct page *parent, int start); 2130void move_node_page(struct page *node_page, int gc_type); 2131int fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode, 2132 struct writeback_control *wbc, bool atomic); 2133int sync_node_pages(struct f2fs_sb_info *sbi, struct writeback_control *wbc); 2134void build_free_nids(struct f2fs_sb_info *sbi, bool sync); 2135bool alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid); 2136void alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid); 2137void alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid); 2138int try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink); 2139void recover_inline_xattr(struct inode *inode, struct page *page); 2140int recover_xattr_data(struct inode *inode, struct page *page, 2141 block_t blkaddr); 2142int recover_inode_page(struct f2fs_sb_info *sbi, struct page *page); 2143int restore_node_summary(struct f2fs_sb_info *sbi, 2144 unsigned int segno, struct f2fs_summary_block *sum); 2145void flush_nat_entries(struct f2fs_sb_info *sbi); 2146int build_node_manager(struct f2fs_sb_info *sbi); 2147void destroy_node_manager(struct f2fs_sb_info *sbi); |
2093int __init create_node_manager_caches(void); 2094void destroy_node_manager_caches(void); 2095 2096/* 2097 * segment.c 2098 */ | 2148int __init create_node_manager_caches(void); 2149void destroy_node_manager_caches(void); 2150 2151/* 2152 * segment.c 2153 */ |
2099void register_inmem_page(struct inode *, struct page *); 2100void drop_inmem_pages(struct inode *); 2101int commit_inmem_pages(struct inode *); 2102void f2fs_balance_fs(struct f2fs_sb_info *, bool); 2103void f2fs_balance_fs_bg(struct f2fs_sb_info *); 2104int f2fs_issue_flush(struct f2fs_sb_info *); 2105int create_flush_cmd_control(struct f2fs_sb_info *); 2106void destroy_flush_cmd_control(struct f2fs_sb_info *, bool); 2107void invalidate_blocks(struct f2fs_sb_info *, block_t); 2108bool is_checkpointed_data(struct f2fs_sb_info *, block_t); 2109void refresh_sit_entry(struct f2fs_sb_info *, block_t, block_t); 2110void f2fs_wait_all_discard_bio(struct f2fs_sb_info *); 2111void clear_prefree_segments(struct f2fs_sb_info *, struct cp_control *); 2112void release_discard_addrs(struct f2fs_sb_info *); 2113int npages_for_summary_flush(struct f2fs_sb_info *, bool); 2114void allocate_new_segments(struct f2fs_sb_info *); 2115int f2fs_trim_fs(struct f2fs_sb_info *, struct fstrim_range *); 2116struct page *get_sum_page(struct f2fs_sb_info *, unsigned int); 2117void update_meta_page(struct f2fs_sb_info *, void *, block_t); 2118void write_meta_page(struct f2fs_sb_info *, struct page *); 2119void write_node_page(unsigned int, struct f2fs_io_info *); 2120void write_data_page(struct dnode_of_data *, struct f2fs_io_info *); 2121void rewrite_data_page(struct f2fs_io_info *); 2122void __f2fs_replace_block(struct f2fs_sb_info *, struct f2fs_summary *, 2123 block_t, block_t, bool, bool); 2124void f2fs_replace_block(struct f2fs_sb_info *, struct dnode_of_data *, 2125 block_t, block_t, unsigned char, bool, bool); 2126void allocate_data_block(struct f2fs_sb_info *, struct page *, 2127 block_t, block_t *, struct f2fs_summary *, int); 2128void f2fs_wait_on_page_writeback(struct page *, enum page_type, bool); 2129void f2fs_wait_on_encrypted_page_writeback(struct f2fs_sb_info *, block_t); 2130void write_data_summaries(struct f2fs_sb_info *, block_t); 2131void write_node_summaries(struct f2fs_sb_info *, block_t); 2132int lookup_journal_in_cursum(struct f2fs_journal *, int, unsigned int, int); 2133void flush_sit_entries(struct f2fs_sb_info *, struct cp_control *); 2134int build_segment_manager(struct f2fs_sb_info *); 2135void destroy_segment_manager(struct f2fs_sb_info *); | 2154void register_inmem_page(struct inode *inode, struct page *page); 2155void drop_inmem_pages(struct inode *inode); 2156int commit_inmem_pages(struct inode *inode); 2157void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need); 2158void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi); 2159int f2fs_issue_flush(struct f2fs_sb_info *sbi); 2160int create_flush_cmd_control(struct f2fs_sb_info *sbi); 2161void destroy_flush_cmd_control(struct f2fs_sb_info *sbi, bool free); 2162void invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr); 2163bool is_checkpointed_data(struct f2fs_sb_info *sbi, block_t blkaddr); 2164void refresh_sit_entry(struct f2fs_sb_info *sbi, block_t old, block_t new); 2165void f2fs_wait_discard_bio(struct f2fs_sb_info *sbi, block_t blkaddr); 2166void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc); 2167void release_discard_addrs(struct f2fs_sb_info *sbi); 2168int npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra); 2169void allocate_new_segments(struct f2fs_sb_info *sbi); 2170int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range); 2171bool exist_trim_candidates(struct f2fs_sb_info *sbi, struct cp_control *cpc); 2172struct page *get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno); 2173void update_meta_page(struct f2fs_sb_info *sbi, void *src, block_t blk_addr); 2174void write_meta_page(struct f2fs_sb_info *sbi, struct page *page); 2175void write_node_page(unsigned int nid, struct f2fs_io_info *fio); 2176void write_data_page(struct dnode_of_data *dn, struct f2fs_io_info *fio); 2177void rewrite_data_page(struct f2fs_io_info *fio); 2178void __f2fs_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum, 2179 block_t old_blkaddr, block_t new_blkaddr, 2180 bool recover_curseg, bool recover_newaddr); 2181void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn, 2182 block_t old_addr, block_t new_addr, 2183 unsigned char version, bool recover_curseg, 2184 bool recover_newaddr); 2185void allocate_data_block(struct f2fs_sb_info *sbi, struct page *page, 2186 block_t old_blkaddr, block_t *new_blkaddr, 2187 struct f2fs_summary *sum, int type); 2188void f2fs_wait_on_page_writeback(struct page *page, 2189 enum page_type type, bool ordered); 2190void f2fs_wait_on_encrypted_page_writeback(struct f2fs_sb_info *sbi, 2191 block_t blkaddr); 2192void write_data_summaries(struct f2fs_sb_info *sbi, block_t start_blk); 2193void write_node_summaries(struct f2fs_sb_info *sbi, block_t start_blk); 2194int lookup_journal_in_cursum(struct f2fs_journal *journal, int type, 2195 unsigned int val, int alloc); 2196void flush_sit_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc); 2197int build_segment_manager(struct f2fs_sb_info *sbi); 2198void destroy_segment_manager(struct f2fs_sb_info *sbi); |
2136int __init create_segment_manager_caches(void); 2137void destroy_segment_manager_caches(void); 2138 2139/* 2140 * checkpoint.c 2141 */ | 2199int __init create_segment_manager_caches(void); 2200void destroy_segment_manager_caches(void); 2201 2202/* 2203 * checkpoint.c 2204 */ |
2142void f2fs_stop_checkpoint(struct f2fs_sb_info *, bool); 2143struct page *grab_meta_page(struct f2fs_sb_info *, pgoff_t); 2144struct page *get_meta_page(struct f2fs_sb_info *, pgoff_t); 2145struct page *get_tmp_page(struct f2fs_sb_info *, pgoff_t); 2146bool is_valid_blkaddr(struct f2fs_sb_info *, block_t, int); 2147int ra_meta_pages(struct f2fs_sb_info *, block_t, int, int, bool); 2148void ra_meta_pages_cond(struct f2fs_sb_info *, pgoff_t); 2149long sync_meta_pages(struct f2fs_sb_info *, enum page_type, long); 2150void add_ino_entry(struct f2fs_sb_info *, nid_t, int type); 2151void remove_ino_entry(struct f2fs_sb_info *, nid_t, int type); 2152void release_ino_entry(struct f2fs_sb_info *, bool); 2153bool exist_written_data(struct f2fs_sb_info *, nid_t, int); 2154int f2fs_sync_inode_meta(struct f2fs_sb_info *); 2155int acquire_orphan_inode(struct f2fs_sb_info *); 2156void release_orphan_inode(struct f2fs_sb_info *); 2157void add_orphan_inode(struct inode *); 2158void remove_orphan_inode(struct f2fs_sb_info *, nid_t); 2159int recover_orphan_inodes(struct f2fs_sb_info *); 2160int get_valid_checkpoint(struct f2fs_sb_info *); 2161void update_dirty_page(struct inode *, struct page *); 2162void remove_dirty_inode(struct inode *); 2163int sync_dirty_inodes(struct f2fs_sb_info *, enum inode_type); 2164int write_checkpoint(struct f2fs_sb_info *, struct cp_control *); 2165void init_ino_entry_info(struct f2fs_sb_info *); | 2205void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io); 2206struct page *grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index); 2207struct page *get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index); 2208struct page *get_tmp_page(struct f2fs_sb_info *sbi, pgoff_t index); 2209bool is_valid_blkaddr(struct f2fs_sb_info *sbi, block_t blkaddr, int type); 2210int ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages, 2211 int type, bool sync); 2212void ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index); 2213long sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type, 2214 long nr_to_write); 2215void add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type); 2216void remove_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type); 2217void release_ino_entry(struct f2fs_sb_info *sbi, bool all); 2218bool exist_written_data(struct f2fs_sb_info *sbi, nid_t ino, int mode); 2219int f2fs_sync_inode_meta(struct f2fs_sb_info *sbi); 2220int acquire_orphan_inode(struct f2fs_sb_info *sbi); 2221void release_orphan_inode(struct f2fs_sb_info *sbi); 2222void add_orphan_inode(struct inode *inode); 2223void remove_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino); 2224int recover_orphan_inodes(struct f2fs_sb_info *sbi); 2225int get_valid_checkpoint(struct f2fs_sb_info *sbi); 2226void update_dirty_page(struct inode *inode, struct page *page); 2227void remove_dirty_inode(struct inode *inode); 2228int sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type); 2229int write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc); 2230void init_ino_entry_info(struct f2fs_sb_info *sbi); |
2166int __init create_checkpoint_caches(void); 2167void destroy_checkpoint_caches(void); 2168 2169/* 2170 * data.c 2171 */ | 2231int __init create_checkpoint_caches(void); 2232void destroy_checkpoint_caches(void); 2233 2234/* 2235 * data.c 2236 */ |
2172void f2fs_submit_merged_bio(struct f2fs_sb_info *, enum page_type, int); 2173void f2fs_submit_merged_bio_cond(struct f2fs_sb_info *, struct inode *, 2174 struct page *, nid_t, enum page_type, int); 2175void f2fs_flush_merged_bios(struct f2fs_sb_info *); 2176int f2fs_submit_page_bio(struct f2fs_io_info *); 2177void f2fs_submit_page_mbio(struct f2fs_io_info *); 2178struct block_device *f2fs_target_device(struct f2fs_sb_info *, 2179 block_t, struct bio *); 2180int f2fs_target_device_index(struct f2fs_sb_info *, block_t); 2181void set_data_blkaddr(struct dnode_of_data *); 2182void f2fs_update_data_blkaddr(struct dnode_of_data *, block_t); 2183int reserve_new_blocks(struct dnode_of_data *, blkcnt_t); 2184int reserve_new_block(struct dnode_of_data *); 2185int f2fs_get_block(struct dnode_of_data *, pgoff_t); 2186int f2fs_preallocate_blocks(struct kiocb *, struct iov_iter *); 2187int f2fs_reserve_block(struct dnode_of_data *, pgoff_t); 2188struct page *get_read_data_page(struct inode *, pgoff_t, int, bool); 2189struct page *find_data_page(struct inode *, pgoff_t); 2190struct page *get_lock_data_page(struct inode *, pgoff_t, bool); 2191struct page *get_new_data_page(struct inode *, struct page *, pgoff_t, bool); 2192int do_write_data_page(struct f2fs_io_info *); 2193int f2fs_map_blocks(struct inode *, struct f2fs_map_blocks *, int, int); 2194int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *, u64, u64); 2195void f2fs_set_page_dirty_nobuffers(struct page *); 2196void f2fs_invalidate_page(struct page *, unsigned int, unsigned int); 2197int f2fs_release_page(struct page *, gfp_t); | 2237void f2fs_submit_merged_bio(struct f2fs_sb_info *sbi, enum page_type type, 2238 int rw); 2239void f2fs_submit_merged_bio_cond(struct f2fs_sb_info *sbi, 2240 struct inode *inode, nid_t ino, pgoff_t idx, 2241 enum page_type type, int rw); 2242void f2fs_flush_merged_bios(struct f2fs_sb_info *sbi); 2243int f2fs_submit_page_bio(struct f2fs_io_info *fio); 2244int f2fs_submit_page_mbio(struct f2fs_io_info *fio); 2245struct block_device *f2fs_target_device(struct f2fs_sb_info *sbi, 2246 block_t blk_addr, struct bio *bio); 2247int f2fs_target_device_index(struct f2fs_sb_info *sbi, block_t blkaddr); 2248void set_data_blkaddr(struct dnode_of_data *dn); 2249void f2fs_update_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr); 2250int reserve_new_blocks(struct dnode_of_data *dn, blkcnt_t count); 2251int reserve_new_block(struct dnode_of_data *dn); 2252int f2fs_get_block(struct dnode_of_data *dn, pgoff_t index); 2253int f2fs_preallocate_blocks(struct kiocb *iocb, struct iov_iter *from); 2254int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index); 2255struct page *get_read_data_page(struct inode *inode, pgoff_t index, 2256 int op_flags, bool for_write); 2257struct page *find_data_page(struct inode *inode, pgoff_t index); 2258struct page *get_lock_data_page(struct inode *inode, pgoff_t index, 2259 bool for_write); 2260struct page *get_new_data_page(struct inode *inode, 2261 struct page *ipage, pgoff_t index, bool new_i_size); 2262int do_write_data_page(struct f2fs_io_info *fio); 2263int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map, 2264 int create, int flag); 2265int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, 2266 u64 start, u64 len); 2267void f2fs_set_page_dirty_nobuffers(struct page *page); 2268void f2fs_invalidate_page(struct page *page, unsigned int offset, 2269 unsigned int length); 2270int f2fs_release_page(struct page *page, gfp_t wait); |
2198#ifdef CONFIG_MIGRATION | 2271#ifdef CONFIG_MIGRATION |
2199int f2fs_migrate_page(struct address_space *, struct page *, struct page *, 2200 enum migrate_mode); | 2272int f2fs_migrate_page(struct address_space *mapping, struct page *newpage, 2273 struct page *page, enum migrate_mode mode); |
2201#endif 2202 2203/* 2204 * gc.c 2205 */ | 2274#endif 2275 2276/* 2277 * gc.c 2278 */ |
2206int start_gc_thread(struct f2fs_sb_info *); 2207void stop_gc_thread(struct f2fs_sb_info *); 2208block_t start_bidx_of_node(unsigned int, struct inode *); 2209int f2fs_gc(struct f2fs_sb_info *, bool, bool); 2210void build_gc_manager(struct f2fs_sb_info *); | 2279int start_gc_thread(struct f2fs_sb_info *sbi); 2280void stop_gc_thread(struct f2fs_sb_info *sbi); 2281block_t start_bidx_of_node(unsigned int node_ofs, struct inode *inode); 2282int f2fs_gc(struct f2fs_sb_info *sbi, bool sync, bool background); 2283void build_gc_manager(struct f2fs_sb_info *sbi); |
2211 2212/* 2213 * recovery.c 2214 */ | 2284 2285/* 2286 * recovery.c 2287 */ |
2215int recover_fsync_data(struct f2fs_sb_info *, bool); 2216bool space_for_roll_forward(struct f2fs_sb_info *); | 2288int recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only); 2289bool space_for_roll_forward(struct f2fs_sb_info *sbi); |
2217 2218/* 2219 * debug.c 2220 */ 2221#ifdef CONFIG_F2FS_STAT_FS 2222struct f2fs_stat_info { 2223 struct list_head stat_list; 2224 struct f2fs_sb_info *sbi; 2225 int all_area_segs, sit_area_segs, nat_area_segs, ssa_area_segs; 2226 int main_area_segs, main_area_sections, main_area_zones; 2227 unsigned long long hit_largest, hit_cached, hit_rbtree; 2228 unsigned long long hit_total, total_ext; 2229 int ext_tree, zombie_tree, ext_node; 2230 int ndirty_node, ndirty_dent, ndirty_meta, ndirty_data, ndirty_imeta; 2231 int inmem_pages; 2232 unsigned int ndirty_dirs, ndirty_files, ndirty_all; 2233 int nats, dirty_nats, sits, dirty_sits, free_nids, alloc_nids; 2234 int total_count, utilization; | 2290 2291/* 2292 * debug.c 2293 */ 2294#ifdef CONFIG_F2FS_STAT_FS 2295struct f2fs_stat_info { 2296 struct list_head stat_list; 2297 struct f2fs_sb_info *sbi; 2298 int all_area_segs, sit_area_segs, nat_area_segs, ssa_area_segs; 2299 int main_area_segs, main_area_sections, main_area_zones; 2300 unsigned long long hit_largest, hit_cached, hit_rbtree; 2301 unsigned long long hit_total, total_ext; 2302 int ext_tree, zombie_tree, ext_node; 2303 int ndirty_node, ndirty_dent, ndirty_meta, ndirty_data, ndirty_imeta; 2304 int inmem_pages; 2305 unsigned int ndirty_dirs, ndirty_files, ndirty_all; 2306 int nats, dirty_nats, sits, dirty_sits, free_nids, alloc_nids; 2307 int total_count, utilization; |
2235 int bg_gc, nr_wb_cp_data, nr_wb_data; 2236 int inline_xattr, inline_inode, inline_dir, orphans; | 2308 int bg_gc, nr_wb_cp_data, nr_wb_data, nr_flush, nr_discard; 2309 int inline_xattr, inline_inode, inline_dir, append, update, orphans; 2310 int aw_cnt, max_aw_cnt; |
2237 unsigned int valid_count, valid_node_count, valid_inode_count, discard_blks; 2238 unsigned int bimodal, avg_vblocks; 2239 int util_free, util_valid, util_invalid; 2240 int rsvd_segs, overp_segs; 2241 int dirty_count, node_pages, meta_pages; 2242 int prefree_count, call_count, cp_count, bg_cp_count; 2243 int tot_segs, node_segs, data_segs, free_segs, free_secs; 2244 int bg_node_segs, bg_data_segs; --- 55 unchanged lines hidden (view full) --- 2300 (atomic_dec(&F2FS_I_SB(inode)->inline_dir)); \ 2301 } while (0) 2302#define stat_inc_seg_type(sbi, curseg) \ 2303 ((sbi)->segment_count[(curseg)->alloc_type]++) 2304#define stat_inc_block_count(sbi, curseg) \ 2305 ((sbi)->block_count[(curseg)->alloc_type]++) 2306#define stat_inc_inplace_blocks(sbi) \ 2307 (atomic_inc(&(sbi)->inplace_count)) | 2311 unsigned int valid_count, valid_node_count, valid_inode_count, discard_blks; 2312 unsigned int bimodal, avg_vblocks; 2313 int util_free, util_valid, util_invalid; 2314 int rsvd_segs, overp_segs; 2315 int dirty_count, node_pages, meta_pages; 2316 int prefree_count, call_count, cp_count, bg_cp_count; 2317 int tot_segs, node_segs, data_segs, free_segs, free_secs; 2318 int bg_node_segs, bg_data_segs; --- 55 unchanged lines hidden (view full) --- 2374 (atomic_dec(&F2FS_I_SB(inode)->inline_dir)); \ 2375 } while (0) 2376#define stat_inc_seg_type(sbi, curseg) \ 2377 ((sbi)->segment_count[(curseg)->alloc_type]++) 2378#define stat_inc_block_count(sbi, curseg) \ 2379 ((sbi)->block_count[(curseg)->alloc_type]++) 2380#define stat_inc_inplace_blocks(sbi) \ 2381 (atomic_inc(&(sbi)->inplace_count)) |
2382#define stat_inc_atomic_write(inode) \ 2383 (atomic_inc(&F2FS_I_SB(inode)->aw_cnt)) 2384#define stat_dec_atomic_write(inode) \ 2385 (atomic_dec(&F2FS_I_SB(inode)->aw_cnt)) 2386#define stat_update_max_atomic_write(inode) \ 2387 do { \ 2388 int cur = atomic_read(&F2FS_I_SB(inode)->aw_cnt); \ 2389 int max = atomic_read(&F2FS_I_SB(inode)->max_aw_cnt); \ 2390 if (cur > max) \ 2391 atomic_set(&F2FS_I_SB(inode)->max_aw_cnt, cur); \ 2392 } while (0) |
|
2308#define stat_inc_seg_count(sbi, type, gc_type) \ 2309 do { \ 2310 struct f2fs_stat_info *si = F2FS_STAT(sbi); \ 2311 (si)->tot_segs++; \ 2312 if (type == SUM_TYPE_DATA) { \ 2313 si->data_segs++; \ 2314 si->bg_data_segs += (gc_type == BG_GC) ? 1 : 0; \ 2315 } else { \ --- 16 unchanged lines hidden (view full) --- 2332#define stat_inc_node_blk_count(sbi, blks, gc_type) \ 2333 do { \ 2334 struct f2fs_stat_info *si = F2FS_STAT(sbi); \ 2335 stat_inc_tot_blk_count(si, blks); \ 2336 si->node_blks += (blks); \ 2337 si->bg_node_blks += (gc_type == BG_GC) ? (blks) : 0; \ 2338 } while (0) 2339 | 2393#define stat_inc_seg_count(sbi, type, gc_type) \ 2394 do { \ 2395 struct f2fs_stat_info *si = F2FS_STAT(sbi); \ 2396 (si)->tot_segs++; \ 2397 if (type == SUM_TYPE_DATA) { \ 2398 si->data_segs++; \ 2399 si->bg_data_segs += (gc_type == BG_GC) ? 1 : 0; \ 2400 } else { \ --- 16 unchanged lines hidden (view full) --- 2417#define stat_inc_node_blk_count(sbi, blks, gc_type) \ 2418 do { \ 2419 struct f2fs_stat_info *si = F2FS_STAT(sbi); \ 2420 stat_inc_tot_blk_count(si, blks); \ 2421 si->node_blks += (blks); \ 2422 si->bg_node_blks += (gc_type == BG_GC) ? (blks) : 0; \ 2423 } while (0) 2424 |
2340int f2fs_build_stats(struct f2fs_sb_info *); 2341void f2fs_destroy_stats(struct f2fs_sb_info *); | 2425int f2fs_build_stats(struct f2fs_sb_info *sbi); 2426void f2fs_destroy_stats(struct f2fs_sb_info *sbi); |
2342int __init f2fs_create_root_stats(void); 2343void f2fs_destroy_root_stats(void); 2344#else 2345#define stat_inc_cp_count(si) 2346#define stat_inc_bg_cp_count(si) 2347#define stat_inc_call_count(si) 2348#define stat_inc_bggc_count(si) 2349#define stat_inc_dirty_inode(sbi, type) 2350#define stat_dec_dirty_inode(sbi, type) 2351#define stat_inc_total_hit(sb) 2352#define stat_inc_rbtree_node_hit(sb) 2353#define stat_inc_largest_node_hit(sbi) 2354#define stat_inc_cached_node_hit(sbi) 2355#define stat_inc_inline_xattr(inode) 2356#define stat_dec_inline_xattr(inode) 2357#define stat_inc_inline_inode(inode) 2358#define stat_dec_inline_inode(inode) 2359#define stat_inc_inline_dir(inode) 2360#define stat_dec_inline_dir(inode) | 2427int __init f2fs_create_root_stats(void); 2428void f2fs_destroy_root_stats(void); 2429#else 2430#define stat_inc_cp_count(si) 2431#define stat_inc_bg_cp_count(si) 2432#define stat_inc_call_count(si) 2433#define stat_inc_bggc_count(si) 2434#define stat_inc_dirty_inode(sbi, type) 2435#define stat_dec_dirty_inode(sbi, type) 2436#define stat_inc_total_hit(sb) 2437#define stat_inc_rbtree_node_hit(sb) 2438#define stat_inc_largest_node_hit(sbi) 2439#define stat_inc_cached_node_hit(sbi) 2440#define stat_inc_inline_xattr(inode) 2441#define stat_dec_inline_xattr(inode) 2442#define stat_inc_inline_inode(inode) 2443#define stat_dec_inline_inode(inode) 2444#define stat_inc_inline_dir(inode) 2445#define stat_dec_inline_dir(inode) |
2446#define stat_inc_atomic_write(inode) 2447#define stat_dec_atomic_write(inode) 2448#define stat_update_max_atomic_write(inode) |
|
2361#define stat_inc_seg_type(sbi, curseg) 2362#define stat_inc_block_count(sbi, curseg) 2363#define stat_inc_inplace_blocks(sbi) 2364#define stat_inc_seg_count(sbi, type, gc_type) 2365#define stat_inc_tot_blk_count(si, blks) 2366#define stat_inc_data_blk_count(sbi, blks, gc_type) 2367#define stat_inc_node_blk_count(sbi, blks, gc_type) 2368 --- 13 unchanged lines hidden (view full) --- 2382extern const struct inode_operations f2fs_symlink_inode_operations; 2383extern const struct inode_operations f2fs_encrypted_symlink_inode_operations; 2384extern const struct inode_operations f2fs_special_inode_operations; 2385extern struct kmem_cache *inode_entry_slab; 2386 2387/* 2388 * inline.c 2389 */ | 2449#define stat_inc_seg_type(sbi, curseg) 2450#define stat_inc_block_count(sbi, curseg) 2451#define stat_inc_inplace_blocks(sbi) 2452#define stat_inc_seg_count(sbi, type, gc_type) 2453#define stat_inc_tot_blk_count(si, blks) 2454#define stat_inc_data_blk_count(sbi, blks, gc_type) 2455#define stat_inc_node_blk_count(sbi, blks, gc_type) 2456 --- 13 unchanged lines hidden (view full) --- 2470extern const struct inode_operations f2fs_symlink_inode_operations; 2471extern const struct inode_operations f2fs_encrypted_symlink_inode_operations; 2472extern const struct inode_operations f2fs_special_inode_operations; 2473extern struct kmem_cache *inode_entry_slab; 2474 2475/* 2476 * inline.c 2477 */ |
2390bool f2fs_may_inline_data(struct inode *); 2391bool f2fs_may_inline_dentry(struct inode *); 2392void read_inline_data(struct page *, struct page *); 2393bool truncate_inline_inode(struct page *, u64); 2394int f2fs_read_inline_data(struct inode *, struct page *); 2395int f2fs_convert_inline_page(struct dnode_of_data *, struct page *); 2396int f2fs_convert_inline_inode(struct inode *); 2397int f2fs_write_inline_data(struct inode *, struct page *); 2398bool recover_inline_data(struct inode *, struct page *); 2399struct f2fs_dir_entry *find_in_inline_dir(struct inode *, 2400 struct fscrypt_name *, struct page **); 2401int make_empty_inline_dir(struct inode *inode, struct inode *, struct page *); 2402int f2fs_add_inline_entry(struct inode *, const struct qstr *, 2403 const struct qstr *, struct inode *, nid_t, umode_t); 2404void f2fs_delete_inline_entry(struct f2fs_dir_entry *, struct page *, 2405 struct inode *, struct inode *); 2406bool f2fs_empty_inline_dir(struct inode *); 2407int f2fs_read_inline_dir(struct file *, struct dir_context *, 2408 struct fscrypt_str *); 2409int f2fs_inline_data_fiemap(struct inode *, 2410 struct fiemap_extent_info *, __u64, __u64); | 2478bool f2fs_may_inline_data(struct inode *inode); 2479bool f2fs_may_inline_dentry(struct inode *inode); 2480void read_inline_data(struct page *page, struct page *ipage); 2481bool truncate_inline_inode(struct page *ipage, u64 from); 2482int f2fs_read_inline_data(struct inode *inode, struct page *page); 2483int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page); 2484int f2fs_convert_inline_inode(struct inode *inode); 2485int f2fs_write_inline_data(struct inode *inode, struct page *page); 2486bool recover_inline_data(struct inode *inode, struct page *npage); 2487struct f2fs_dir_entry *find_in_inline_dir(struct inode *dir, 2488 struct fscrypt_name *fname, struct page **res_page); 2489int make_empty_inline_dir(struct inode *inode, struct inode *parent, 2490 struct page *ipage); 2491int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name, 2492 const struct qstr *orig_name, 2493 struct inode *inode, nid_t ino, umode_t mode); 2494void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page, 2495 struct inode *dir, struct inode *inode); 2496bool f2fs_empty_inline_dir(struct inode *dir); 2497int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx, 2498 struct fscrypt_str *fstr); 2499int f2fs_inline_data_fiemap(struct inode *inode, 2500 struct fiemap_extent_info *fieinfo, 2501 __u64 start, __u64 len); |
2411 2412/* 2413 * shrinker.c 2414 */ | 2502 2503/* 2504 * shrinker.c 2505 */ |
2415unsigned long f2fs_shrink_count(struct shrinker *, struct shrink_control *); 2416unsigned long f2fs_shrink_scan(struct shrinker *, struct shrink_control *); 2417void f2fs_join_shrinker(struct f2fs_sb_info *); 2418void f2fs_leave_shrinker(struct f2fs_sb_info *); | 2506unsigned long f2fs_shrink_count(struct shrinker *shrink, 2507 struct shrink_control *sc); 2508unsigned long f2fs_shrink_scan(struct shrinker *shrink, 2509 struct shrink_control *sc); 2510void f2fs_join_shrinker(struct f2fs_sb_info *sbi); 2511void f2fs_leave_shrinker(struct f2fs_sb_info *sbi); |
2419 2420/* 2421 * extent_cache.c 2422 */ | 2512 2513/* 2514 * extent_cache.c 2515 */ |
2423unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *, int); 2424bool f2fs_init_extent_tree(struct inode *, struct f2fs_extent *); 2425void f2fs_drop_extent_tree(struct inode *); 2426unsigned int f2fs_destroy_extent_node(struct inode *); 2427void f2fs_destroy_extent_tree(struct inode *); 2428bool f2fs_lookup_extent_cache(struct inode *, pgoff_t, struct extent_info *); 2429void f2fs_update_extent_cache(struct dnode_of_data *); | 2516unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink); 2517bool f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext); 2518void f2fs_drop_extent_tree(struct inode *inode); 2519unsigned int f2fs_destroy_extent_node(struct inode *inode); 2520void f2fs_destroy_extent_tree(struct inode *inode); 2521bool f2fs_lookup_extent_cache(struct inode *inode, pgoff_t pgofs, 2522 struct extent_info *ei); 2523void f2fs_update_extent_cache(struct dnode_of_data *dn); |
2430void f2fs_update_extent_cache_range(struct dnode_of_data *dn, | 2524void f2fs_update_extent_cache_range(struct dnode_of_data *dn, |
2431 pgoff_t, block_t, unsigned int); 2432void init_extent_cache_info(struct f2fs_sb_info *); | 2525 pgoff_t fofs, block_t blkaddr, unsigned int len); 2526void init_extent_cache_info(struct f2fs_sb_info *sbi); |
2433int __init create_extent_cache(void); 2434void destroy_extent_cache(void); 2435 2436/* 2437 * crypto support 2438 */ 2439static inline bool f2fs_encrypted_inode(struct inode *inode) 2440{ --- 97 unchanged lines hidden --- | 2527int __init create_extent_cache(void); 2528void destroy_extent_cache(void); 2529 2530/* 2531 * crypto support 2532 */ 2533static inline bool f2fs_encrypted_inode(struct inode *inode) 2534{ --- 97 unchanged lines hidden --- |