Lines Matching full:sbi

34 #define f2fs_bug_on(sbi, condition)	BUG_ON(condition)  argument
36 #define f2fs_bug_on(sbi, condition) \ argument
39 set_sbi_flag(sbi, SBI_NEED_FSCK); \
136 #define F2FS_OPTION(sbi) ((sbi)->mount_opt) argument
137 #define clear_opt(sbi, option) (F2FS_OPTION(sbi).opt &= ~F2FS_MOUNT_##option) argument
138 #define set_opt(sbi, option) (F2FS_OPTION(sbi).opt |= F2FS_MOUNT_##option) argument
139 #define test_opt(sbi, option) (F2FS_OPTION(sbi).opt & F2FS_MOUNT_##option) argument
251 #define F2FS_HAS_FEATURE(sbi, mask) __F2FS_HAS_FEATURE(sbi->raw_super, mask) argument
736 struct list_head list; /* node in global extent list of sbi */
745 struct list_head list; /* to be used by sbi->zombie_list */
1286 struct f2fs_sb_info *sbi; /* f2fs_sb_info pointer */ member
1322 struct f2fs_sb_info *sbi; /* f2fs superblock */ member
1338 #define FDEV(i) (sbi->devs[i])
1600 struct f2fs_sb_info *sbi; /* f2fs_sb_info pointer */ member
1659 unsigned long s_flag; /* flags for sbi */
1941 #define SEGS_TO_BLKS(sbi, segs) \ argument
1942 ((segs) << (sbi)->log_blocks_per_seg)
1943 #define BLKS_TO_SEGS(sbi, blks) \ argument
1944 ((blks) >> (sbi)->log_blocks_per_seg)
1946 #define BLKS_PER_SEG(sbi) ((sbi)->blocks_per_seg) argument
1947 #define BLKS_PER_SEC(sbi) (SEGS_TO_BLKS(sbi, (sbi)->segs_per_sec)) argument
1948 #define SEGS_PER_SEC(sbi) ((sbi)->segs_per_sec) argument
1951 void f2fs_printk(struct f2fs_sb_info *sbi, bool limit_rate, const char *fmt, ...);
1953 #define f2fs_err(sbi, fmt, ...) \ argument
1954 f2fs_printk(sbi, false, KERN_ERR fmt, ##__VA_ARGS__)
1955 #define f2fs_warn(sbi, fmt, ...) \ argument
1956 f2fs_printk(sbi, false, KERN_WARNING fmt, ##__VA_ARGS__)
1957 #define f2fs_notice(sbi, fmt, ...) \ argument
1958 f2fs_printk(sbi, false, KERN_NOTICE fmt, ##__VA_ARGS__)
1959 #define f2fs_info(sbi, fmt, ...) \ argument
1960 f2fs_printk(sbi, false, KERN_INFO fmt, ##__VA_ARGS__)
1961 #define f2fs_debug(sbi, fmt, ...) \ argument
1962 f2fs_printk(sbi, false, KERN_DEBUG fmt, ##__VA_ARGS__)
1964 #define f2fs_err_ratelimited(sbi, fmt, ...) \ argument
1965 f2fs_printk(sbi, true, KERN_ERR fmt, ##__VA_ARGS__)
1966 #define f2fs_warn_ratelimited(sbi, fmt, ...) \ argument
1967 f2fs_printk(sbi, true, KERN_WARNING fmt, ##__VA_ARGS__)
1968 #define f2fs_info_ratelimited(sbi, fmt, ...) \ argument
1969 f2fs_printk(sbi, true, KERN_INFO fmt, ##__VA_ARGS__)
1972 #define time_to_inject(sbi, type) __time_to_inject(sbi, type, __func__, \ argument
1974 static inline bool __time_to_inject(struct f2fs_sb_info *sbi, int type, in __time_to_inject() argument
1977 struct f2fs_fault_info *ffi = &F2FS_OPTION(sbi).fault_info; in __time_to_inject()
1989 f2fs_info_ratelimited(sbi, "inject %s in %s of %pS", in __time_to_inject()
1996 static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type) in time_to_inject() argument
2004 * - For a single regular disk volume, sbi->s_ndevs is 0.
2005 * - For a single zoned disk volume, sbi->s_ndevs is 1.
2006 * - For a multi-device volume, sbi->s_ndevs is always 2 or more.
2008 static inline bool f2fs_is_multi_device(struct f2fs_sb_info *sbi) in f2fs_is_multi_device() argument
2010 return sbi->s_ndevs > 1; in f2fs_is_multi_device()
2013 static inline void f2fs_update_time(struct f2fs_sb_info *sbi, int type) in f2fs_update_time() argument
2017 sbi->last_time[type] = now; in f2fs_update_time()
2021 sbi->last_time[DISCARD_TIME] = now; in f2fs_update_time()
2022 sbi->last_time[GC_TIME] = now; in f2fs_update_time()
2026 static inline bool f2fs_time_over(struct f2fs_sb_info *sbi, int type) in f2fs_time_over() argument
2028 unsigned long interval = sbi->interval_time[type] * HZ; in f2fs_time_over()
2030 return time_after(jiffies, sbi->last_time[type] + interval); in f2fs_time_over()
2033 static inline unsigned int f2fs_time_to_wait(struct f2fs_sb_info *sbi, in f2fs_time_to_wait() argument
2036 unsigned long interval = sbi->interval_time[type] * HZ; in f2fs_time_to_wait()
2040 delta = (sbi->last_time[type] + interval) - jiffies; in f2fs_time_to_wait()
2091 static inline struct f2fs_super_block *F2FS_RAW_SUPER(struct f2fs_sb_info *sbi) in F2FS_RAW_SUPER() argument
2093 return (struct f2fs_super_block *)(sbi->raw_super); in F2FS_RAW_SUPER()
2106 static inline struct f2fs_checkpoint *F2FS_CKPT(struct f2fs_sb_info *sbi) in F2FS_CKPT() argument
2108 return (struct f2fs_checkpoint *)(sbi->ckpt); in F2FS_CKPT()
2121 static inline struct f2fs_nm_info *NM_I(struct f2fs_sb_info *sbi) in NM_I() argument
2123 return (struct f2fs_nm_info *)(sbi->nm_info); in NM_I()
2126 static inline struct f2fs_sm_info *SM_I(struct f2fs_sb_info *sbi) in SM_I() argument
2128 return (struct f2fs_sm_info *)(sbi->sm_info); in SM_I()
2131 static inline struct sit_info *SIT_I(struct f2fs_sb_info *sbi) in SIT_I() argument
2133 return (struct sit_info *)(SM_I(sbi)->sit_info); in SIT_I()
2136 static inline struct free_segmap_info *FREE_I(struct f2fs_sb_info *sbi) in FREE_I() argument
2138 return (struct free_segmap_info *)(SM_I(sbi)->free_info); in FREE_I()
2141 static inline struct dirty_seglist_info *DIRTY_I(struct f2fs_sb_info *sbi) in DIRTY_I() argument
2143 return (struct dirty_seglist_info *)(SM_I(sbi)->dirty_info); in DIRTY_I()
2146 static inline struct address_space *META_MAPPING(struct f2fs_sb_info *sbi) in META_MAPPING() argument
2148 return sbi->meta_inode->i_mapping; in META_MAPPING()
2151 static inline struct address_space *NODE_MAPPING(struct f2fs_sb_info *sbi) in NODE_MAPPING() argument
2153 return sbi->node_inode->i_mapping; in NODE_MAPPING()
2166 static inline bool is_sbi_flag_set(struct f2fs_sb_info *sbi, unsigned int type) in is_sbi_flag_set() argument
2168 return test_bit(type, &sbi->s_flag); in is_sbi_flag_set()
2171 static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type) in set_sbi_flag() argument
2173 set_bit(type, &sbi->s_flag); in set_sbi_flag()
2176 static inline void clear_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type) in clear_sbi_flag() argument
2178 clear_bit(type, &sbi->s_flag); in clear_sbi_flag()
2206 static inline bool is_set_ckpt_flags(struct f2fs_sb_info *sbi, unsigned int f) in is_set_ckpt_flags() argument
2208 return __is_set_ckpt_flags(F2FS_CKPT(sbi), f); in is_set_ckpt_flags()
2220 static inline void set_ckpt_flags(struct f2fs_sb_info *sbi, unsigned int f) in set_ckpt_flags() argument
2224 spin_lock_irqsave(&sbi->cp_lock, flags); in set_ckpt_flags()
2225 __set_ckpt_flags(F2FS_CKPT(sbi), f); in set_ckpt_flags()
2226 spin_unlock_irqrestore(&sbi->cp_lock, flags); in set_ckpt_flags()
2238 static inline void clear_ckpt_flags(struct f2fs_sb_info *sbi, unsigned int f) in clear_ckpt_flags() argument
2242 spin_lock_irqsave(&sbi->cp_lock, flags); in clear_ckpt_flags()
2243 __clear_ckpt_flags(F2FS_CKPT(sbi), f); in clear_ckpt_flags()
2244 spin_unlock_irqrestore(&sbi->cp_lock, flags); in clear_ckpt_flags()
2325 static inline void disable_nat_bits(struct f2fs_sb_info *sbi, bool lock) in disable_nat_bits() argument
2332 * set_sbi_flag(sbi, SBI_NEED_FSCK). But it may give huge cost, in disable_nat_bits()
2337 spin_lock_irqsave(&sbi->cp_lock, flags); in disable_nat_bits()
2338 __clear_ckpt_flags(F2FS_CKPT(sbi), CP_NAT_BITS_FLAG); in disable_nat_bits()
2339 nat_bits = NM_I(sbi)->nat_bits; in disable_nat_bits()
2340 NM_I(sbi)->nat_bits = NULL; in disable_nat_bits()
2342 spin_unlock_irqrestore(&sbi->cp_lock, flags); in disable_nat_bits()
2347 static inline bool enabled_nat_bits(struct f2fs_sb_info *sbi, in enabled_nat_bits() argument
2350 bool set = is_set_ckpt_flags(sbi, CP_NAT_BITS_FLAG); in enabled_nat_bits()
2355 static inline void f2fs_lock_op(struct f2fs_sb_info *sbi) in f2fs_lock_op() argument
2357 f2fs_down_read(&sbi->cp_rwsem); in f2fs_lock_op()
2360 static inline int f2fs_trylock_op(struct f2fs_sb_info *sbi) in f2fs_trylock_op() argument
2362 if (time_to_inject(sbi, FAULT_LOCK_OP)) in f2fs_trylock_op()
2364 return f2fs_down_read_trylock(&sbi->cp_rwsem); in f2fs_trylock_op()
2367 static inline void f2fs_unlock_op(struct f2fs_sb_info *sbi) in f2fs_unlock_op() argument
2369 f2fs_up_read(&sbi->cp_rwsem); in f2fs_unlock_op()
2372 static inline void f2fs_lock_all(struct f2fs_sb_info *sbi) in f2fs_lock_all() argument
2374 f2fs_down_write(&sbi->cp_rwsem); in f2fs_lock_all()
2377 static inline void f2fs_unlock_all(struct f2fs_sb_info *sbi) in f2fs_unlock_all() argument
2379 f2fs_up_write(&sbi->cp_rwsem); in f2fs_unlock_all()
2382 static inline int __get_cp_reason(struct f2fs_sb_info *sbi) in __get_cp_reason() argument
2386 if (test_opt(sbi, FASTBOOT)) in __get_cp_reason()
2388 if (is_sbi_flag_set(sbi, SBI_IS_CLOSE)) in __get_cp_reason()
2398 static inline bool __exist_node_summaries(struct f2fs_sb_info *sbi) in __exist_node_summaries() argument
2400 return (is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG) || in __exist_node_summaries()
2401 is_set_ckpt_flags(sbi, CP_FASTBOOT_FLAG)); in __exist_node_summaries()
2419 static inline bool __allow_reserved_root(struct f2fs_sb_info *sbi, in __allow_reserved_root() argument
2426 if (uid_eq(F2FS_OPTION(sbi).s_resuid, current_fsuid())) in __allow_reserved_root()
2428 if (!gid_eq(F2FS_OPTION(sbi).s_resgid, GLOBAL_ROOT_GID) && in __allow_reserved_root()
2429 in_group_p(F2FS_OPTION(sbi).s_resgid)) in __allow_reserved_root()
2436 static inline unsigned int get_available_block_count(struct f2fs_sb_info *sbi, in get_available_block_count() argument
2441 avail_user_block_count = sbi->user_block_count - in get_available_block_count()
2442 sbi->current_reserved_blocks; in get_available_block_count()
2444 if (test_opt(sbi, RESERVE_ROOT) && !__allow_reserved_root(sbi, inode, cap)) in get_available_block_count()
2445 avail_user_block_count -= F2FS_OPTION(sbi).root_reserved_blocks; in get_available_block_count()
2447 if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) { in get_available_block_count()
2448 if (avail_user_block_count > sbi->unusable_block_count) in get_available_block_count()
2449 avail_user_block_count -= sbi->unusable_block_count; in get_available_block_count()
2458 static inline int inc_valid_block_count(struct f2fs_sb_info *sbi, in inc_valid_block_count() argument
2469 if (time_to_inject(sbi, FAULT_BLOCK)) { in inc_valid_block_count()
2478 percpu_counter_add(&sbi->alloc_valid_block_count, (*count)); in inc_valid_block_count()
2480 spin_lock(&sbi->stat_lock); in inc_valid_block_count()
2482 avail_user_block_count = get_available_block_count(sbi, inode, true); in inc_valid_block_count()
2483 diff = (long long)sbi->total_valid_block_count + *count - in inc_valid_block_count()
2487 spin_unlock(&sbi->stat_lock); in inc_valid_block_count()
2496 spin_unlock(&sbi->stat_lock); in inc_valid_block_count()
2500 sbi->total_valid_block_count += (block_t)(*count); in inc_valid_block_count()
2502 spin_unlock(&sbi->stat_lock); in inc_valid_block_count()
2505 percpu_counter_sub(&sbi->alloc_valid_block_count, release); in inc_valid_block_count()
2512 percpu_counter_sub(&sbi->alloc_valid_block_count, release); in inc_valid_block_count()
2605 static inline void dec_valid_block_count(struct f2fs_sb_info *sbi, in dec_valid_block_count() argument
2611 spin_lock(&sbi->stat_lock); in dec_valid_block_count()
2612 if (unlikely(sbi->total_valid_block_count < count)) { in dec_valid_block_count()
2613 f2fs_warn(sbi, "Inconsistent total_valid_block_count:%u, ino:%lu, count:%u", in dec_valid_block_count()
2614 sbi->total_valid_block_count, inode->i_ino, count); in dec_valid_block_count()
2615 sbi->total_valid_block_count = 0; in dec_valid_block_count()
2616 set_sbi_flag(sbi, SBI_NEED_FSCK); in dec_valid_block_count()
2618 sbi->total_valid_block_count -= count; in dec_valid_block_count()
2620 if (sbi->reserved_blocks && in dec_valid_block_count()
2621 sbi->current_reserved_blocks < sbi->reserved_blocks) in dec_valid_block_count()
2622 sbi->current_reserved_blocks = min(sbi->reserved_blocks, in dec_valid_block_count()
2623 sbi->current_reserved_blocks + count); in dec_valid_block_count()
2624 spin_unlock(&sbi->stat_lock); in dec_valid_block_count()
2626 f2fs_warn(sbi, "Inconsistent i_blocks, ino:%lu, iblocks:%llu, sectors:%llu", in dec_valid_block_count()
2630 set_sbi_flag(sbi, SBI_NEED_FSCK); in dec_valid_block_count()
2636 static inline void inc_page_count(struct f2fs_sb_info *sbi, int count_type) in inc_page_count() argument
2638 atomic_inc(&sbi->nr_pages[count_type]); in inc_page_count()
2645 set_sbi_flag(sbi, SBI_IS_DIRTY); in inc_page_count()
2657 static inline void dec_page_count(struct f2fs_sb_info *sbi, int count_type) in dec_page_count() argument
2659 atomic_dec(&sbi->nr_pages[count_type]); in dec_page_count()
2677 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in inc_atomic_write_cnt() local
2682 atomic64_inc(&sbi->current_atomic_write); in inc_atomic_write_cnt()
2683 current_write = atomic64_read(&sbi->current_atomic_write); in inc_atomic_write_cnt()
2684 if (current_write > sbi->peak_atomic_write) in inc_atomic_write_cnt()
2685 sbi->peak_atomic_write = current_write; in inc_atomic_write_cnt()
2690 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in release_atomic_write_cnt() local
2693 atomic64_sub(fi->atomic_write_cnt, &sbi->current_atomic_write); in release_atomic_write_cnt()
2697 static inline s64 get_pages(struct f2fs_sb_info *sbi, int count_type) in get_pages() argument
2699 return atomic_read(&sbi->nr_pages[count_type]); in get_pages()
2707 static inline int get_blocktype_secs(struct f2fs_sb_info *sbi, int block_type) in get_blocktype_secs() argument
2709 return div_u64(get_pages(sbi, block_type) + BLKS_PER_SEC(sbi) - 1, in get_blocktype_secs()
2710 BLKS_PER_SEC(sbi)); in get_blocktype_secs()
2713 static inline block_t valid_user_blocks(struct f2fs_sb_info *sbi) in valid_user_blocks() argument
2715 return sbi->total_valid_block_count; in valid_user_blocks()
2718 static inline block_t discard_blocks(struct f2fs_sb_info *sbi) in discard_blocks() argument
2720 return sbi->discard_blks; in discard_blocks()
2723 static inline unsigned long __bitmap_size(struct f2fs_sb_info *sbi, int flag) in __bitmap_size() argument
2725 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); in __bitmap_size()
2736 static inline block_t __cp_payload(struct f2fs_sb_info *sbi) in __cp_payload() argument
2738 return le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_payload); in __cp_payload()
2741 static inline void *__bitmap_ptr(struct f2fs_sb_info *sbi, int flag) in __bitmap_ptr() argument
2743 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); in __bitmap_ptr()
2747 if (is_set_ckpt_flags(sbi, CP_LARGE_NAT_BITMAP_FLAG)) { in __bitmap_ptr()
2757 if (__cp_payload(sbi) > 0) { in __bitmap_ptr()
2769 static inline block_t __start_cp_addr(struct f2fs_sb_info *sbi) in __start_cp_addr() argument
2771 block_t start_addr = le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_blkaddr); in __start_cp_addr()
2773 if (sbi->cur_cp_pack == 2) in __start_cp_addr()
2774 start_addr += BLKS_PER_SEG(sbi); in __start_cp_addr()
2778 static inline block_t __start_cp_next_addr(struct f2fs_sb_info *sbi) in __start_cp_next_addr() argument
2780 block_t start_addr = le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_blkaddr); in __start_cp_next_addr()
2782 if (sbi->cur_cp_pack == 1) in __start_cp_next_addr()
2783 start_addr += BLKS_PER_SEG(sbi); in __start_cp_next_addr()
2787 static inline void __set_cp_next_pack(struct f2fs_sb_info *sbi) in __set_cp_next_pack() argument
2789 sbi->cur_cp_pack = (sbi->cur_cp_pack == 1) ? 2 : 1; in __set_cp_next_pack()
2792 static inline block_t __start_sum_addr(struct f2fs_sb_info *sbi) in __start_sum_addr() argument
2794 return le32_to_cpu(F2FS_CKPT(sbi)->cp_pack_start_sum); in __start_sum_addr()
2798 static inline int inc_valid_node_count(struct f2fs_sb_info *sbi, in inc_valid_node_count() argument
2818 if (time_to_inject(sbi, FAULT_BLOCK)) in inc_valid_node_count()
2821 spin_lock(&sbi->stat_lock); in inc_valid_node_count()
2823 valid_block_count = sbi->total_valid_block_count + 1; in inc_valid_node_count()
2824 avail_user_block_count = get_available_block_count(sbi, inode, in inc_valid_node_count()
2825 test_opt(sbi, RESERVE_NODE)); in inc_valid_node_count()
2828 spin_unlock(&sbi->stat_lock); in inc_valid_node_count()
2832 avail_user_node_count = sbi->total_node_count - F2FS_RESERVED_NODE_NUM; in inc_valid_node_count()
2833 if (test_opt(sbi, RESERVE_NODE) && in inc_valid_node_count()
2834 !__allow_reserved_root(sbi, inode, true)) in inc_valid_node_count()
2835 avail_user_node_count -= F2FS_OPTION(sbi).root_reserved_nodes; in inc_valid_node_count()
2836 valid_node_count = sbi->total_valid_node_count + 1; in inc_valid_node_count()
2838 spin_unlock(&sbi->stat_lock); in inc_valid_node_count()
2842 sbi->total_valid_node_count++; in inc_valid_node_count()
2843 sbi->total_valid_block_count++; in inc_valid_node_count()
2844 spin_unlock(&sbi->stat_lock); in inc_valid_node_count()
2853 percpu_counter_inc(&sbi->alloc_valid_block_count); in inc_valid_node_count()
2866 static inline void dec_valid_node_count(struct f2fs_sb_info *sbi, in dec_valid_node_count() argument
2869 spin_lock(&sbi->stat_lock); in dec_valid_node_count()
2871 if (unlikely(!sbi->total_valid_block_count || in dec_valid_node_count()
2872 !sbi->total_valid_node_count)) { in dec_valid_node_count()
2873 …f2fs_warn(sbi, "dec_valid_node_count: inconsistent block counts, total_valid_block:%u, total_valid… in dec_valid_node_count()
2874 sbi->total_valid_block_count, in dec_valid_node_count()
2875 sbi->total_valid_node_count); in dec_valid_node_count()
2876 set_sbi_flag(sbi, SBI_NEED_FSCK); in dec_valid_node_count()
2878 sbi->total_valid_block_count--; in dec_valid_node_count()
2879 sbi->total_valid_node_count--; in dec_valid_node_count()
2882 if (sbi->reserved_blocks && in dec_valid_node_count()
2883 sbi->current_reserved_blocks < sbi->reserved_blocks) in dec_valid_node_count()
2884 sbi->current_reserved_blocks++; in dec_valid_node_count()
2886 spin_unlock(&sbi->stat_lock); in dec_valid_node_count()
2892 f2fs_warn(sbi, "dec_valid_node_count: inconsistent i_blocks, ino:%lu, iblocks:%llu", in dec_valid_node_count()
2895 set_sbi_flag(sbi, SBI_NEED_FSCK); in dec_valid_node_count()
2902 static inline unsigned int valid_node_count(struct f2fs_sb_info *sbi) in valid_node_count() argument
2904 return sbi->total_valid_node_count; in valid_node_count()
2907 static inline void inc_valid_inode_count(struct f2fs_sb_info *sbi) in inc_valid_inode_count() argument
2909 percpu_counter_inc(&sbi->total_valid_inode_count); in inc_valid_inode_count()
2912 static inline void dec_valid_inode_count(struct f2fs_sb_info *sbi) in dec_valid_inode_count() argument
2914 percpu_counter_dec(&sbi->total_valid_inode_count); in dec_valid_inode_count()
2917 static inline s64 valid_inode_count(struct f2fs_sb_info *sbi) in valid_inode_count() argument
2919 return percpu_counter_sum_positive(&sbi->total_valid_inode_count); in valid_inode_count()
3021 gfp_t flags, bool nofail, struct f2fs_sb_info *sbi) in f2fs_kmem_cache_alloc() argument
3026 if (time_to_inject(sbi, FAULT_SLAB_ALLOC)) in f2fs_kmem_cache_alloc()
3032 static inline bool is_inflight_io(struct f2fs_sb_info *sbi, int type) in is_inflight_io() argument
3034 if (get_pages(sbi, F2FS_RD_DATA) || get_pages(sbi, F2FS_RD_NODE) || in is_inflight_io()
3035 get_pages(sbi, F2FS_RD_META) || get_pages(sbi, F2FS_WB_DATA) || in is_inflight_io()
3036 get_pages(sbi, F2FS_WB_CP_DATA) || in is_inflight_io()
3037 get_pages(sbi, F2FS_DIO_READ) || in is_inflight_io()
3038 get_pages(sbi, F2FS_DIO_WRITE)) in is_inflight_io()
3041 if (type != DISCARD_TIME && SM_I(sbi) && SM_I(sbi)->dcc_info && in is_inflight_io()
3042 atomic_read(&SM_I(sbi)->dcc_info->queued_discard)) in is_inflight_io()
3045 if (SM_I(sbi) && SM_I(sbi)->fcc_info && in is_inflight_io()
3046 atomic_read(&SM_I(sbi)->fcc_info->queued_flush)) in is_inflight_io()
3051 static inline bool is_inflight_read_io(struct f2fs_sb_info *sbi) in is_inflight_read_io() argument
3053 return get_pages(sbi, F2FS_RD_DATA) || get_pages(sbi, F2FS_DIO_READ); in is_inflight_read_io()
3056 static inline bool is_idle(struct f2fs_sb_info *sbi, int type) in is_idle() argument
3059 F2FS_HAS_FEATURE(sbi, F2FS_FEATURE_BLKZONED)); in is_idle()
3061 if (sbi->gc_mode == GC_URGENT_HIGH) in is_idle()
3064 if (sbi->bggc_io_aware == AWARE_READ_IO && is_inflight_read_io(sbi)) in is_idle()
3066 if (sbi->bggc_io_aware == AWARE_ALL_IO && is_inflight_io(sbi, type)) in is_idle()
3069 if (sbi->gc_mode == GC_URGENT_MID) in is_idle()
3072 if (sbi->gc_mode == GC_URGENT_LOW && in is_idle()
3079 return f2fs_time_over(sbi, type); in is_idle()
3549 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_skip_inode_update() local
3551 spin_lock(&sbi->inode_lock[DIRTY_META]); in f2fs_skip_inode_update()
3553 spin_unlock(&sbi->inode_lock[DIRTY_META]); in f2fs_skip_inode_update()
3576 static inline bool f2fs_cp_error(struct f2fs_sb_info *sbi) in f2fs_cp_error() argument
3578 return is_set_ckpt_flags(sbi, CP_ERROR_FLAG); in f2fs_cp_error()
3581 static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi, in f2fs_kmalloc() argument
3584 if (time_to_inject(sbi, FAULT_KMALLOC)) in f2fs_kmalloc()
3590 static inline void *f2fs_getname(struct f2fs_sb_info *sbi) in f2fs_getname() argument
3592 if (time_to_inject(sbi, FAULT_KMALLOC)) in f2fs_getname()
3603 static inline void *f2fs_kzalloc(struct f2fs_sb_info *sbi, in f2fs_kzalloc() argument
3606 return f2fs_kmalloc(sbi, size, flags | __GFP_ZERO); in f2fs_kzalloc()
3609 static inline void *f2fs_kvmalloc(struct f2fs_sb_info *sbi, in f2fs_kvmalloc() argument
3612 if (time_to_inject(sbi, FAULT_KVMALLOC)) in f2fs_kvmalloc()
3618 static inline void *f2fs_kvzalloc(struct f2fs_sb_info *sbi, in f2fs_kvzalloc() argument
3621 return f2fs_kvmalloc(sbi, size, flags | __GFP_ZERO); in f2fs_kvzalloc()
3624 static inline void *f2fs_vmalloc(struct f2fs_sb_info *sbi, size_t size) in f2fs_vmalloc() argument
3626 if (time_to_inject(sbi, FAULT_VMALLOC)) in f2fs_vmalloc()
3658 #define __is_large_section(sbi) (SEGS_PER_SEC(sbi) > 1) argument
3662 bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
3664 static inline void verify_blkaddr(struct f2fs_sb_info *sbi, in verify_blkaddr() argument
3667 if (!f2fs_is_valid_blkaddr(sbi, blkaddr, type)) in verify_blkaddr()
3668 f2fs_err(sbi, "invalid blkaddr: %u, type: %d, run fsck to fix.", in verify_blkaddr()
3693 int f2fs_do_shutdown(struct f2fs_sb_info *sbi, unsigned int flag,
3708 bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct folio *folio);
3709 void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct folio *folio);
3712 int f2fs_try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink);
3723 int f2fs_update_extension_list(struct f2fs_sb_info *sbi, const char *name,
3806 int f2fs_enable_quota_files(struct f2fs_sb_info *sbi, bool rdonly);
3810 void f2fs_save_errors(struct f2fs_sb_info *sbi, unsigned char flag);
3811 void f2fs_handle_critical_error(struct f2fs_sb_info *sbi, unsigned char reason);
3812 void f2fs_handle_error(struct f2fs_sb_info *sbi, unsigned char error);
3813 void f2fs_handle_error_async(struct f2fs_sb_info *sbi, unsigned char error);
3814 int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover);
3816 int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi);
3829 int f2fs_check_nid_range(struct f2fs_sb_info *sbi, nid_t nid);
3830 bool f2fs_available_free_memory(struct f2fs_sb_info *sbi, int type);
3831 bool f2fs_in_warm_node_list(struct f2fs_sb_info *sbi, struct folio *folio);
3832 void f2fs_init_fsync_node_info(struct f2fs_sb_info *sbi);
3833 void f2fs_del_fsync_node_entry(struct f2fs_sb_info *sbi, struct folio *folio);
3834 void f2fs_reset_fsync_node_info(struct f2fs_sb_info *sbi);
3835 int f2fs_need_dentry_mark(struct f2fs_sb_info *sbi, nid_t nid);
3836 bool f2fs_is_checkpointed_node(struct f2fs_sb_info *sbi, nid_t nid);
3837 bool f2fs_need_inode_block_update(struct f2fs_sb_info *sbi, nid_t ino);
3838 int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid,
3844 int f2fs_wait_on_node_pages_writeback(struct f2fs_sb_info *sbi,
3849 void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid);
3850 struct folio *f2fs_get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid,
3852 struct folio *f2fs_get_inode_folio(struct f2fs_sb_info *sbi, pgoff_t ino);
3853 struct folio *f2fs_get_xnode_folio(struct f2fs_sb_info *sbi, pgoff_t xnid);
3855 void f2fs_flush_inline_data(struct f2fs_sb_info *sbi);
3856 int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
3859 int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
3862 int f2fs_build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount);
3863 bool f2fs_alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid);
3864 void f2fs_alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid);
3865 void f2fs_alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid);
3866 int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink);
3869 int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct folio *folio);
3870 int f2fs_restore_node_summary(struct f2fs_sb_info *sbi,
3872 int f2fs_flush_nat_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc);
3873 int f2fs_build_node_manager(struct f2fs_sb_info *sbi);
3874 void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi);
3881 bool f2fs_need_SSR(struct f2fs_sb_info *sbi);
3884 void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need);
3885 void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi, bool from_bg);
3886 int f2fs_issue_flush(struct f2fs_sb_info *sbi, nid_t ino);
3887 int f2fs_create_flush_cmd_control(struct f2fs_sb_info *sbi);
3888 int f2fs_flush_device_cache(struct f2fs_sb_info *sbi);
3889 void f2fs_destroy_flush_cmd_control(struct f2fs_sb_info *sbi, bool free);
3890 void f2fs_invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr,
3892 bool f2fs_is_checkpointed_data(struct f2fs_sb_info *sbi, block_t blkaddr);
3893 int f2fs_start_discard_thread(struct f2fs_sb_info *sbi);
3894 void f2fs_drop_discard_cmd(struct f2fs_sb_info *sbi);
3895 void f2fs_stop_discard_thread(struct f2fs_sb_info *sbi);
3896 bool f2fs_issue_discard_timeout(struct f2fs_sb_info *sbi);
3897 void f2fs_clear_prefree_segments(struct f2fs_sb_info *sbi,
3899 void f2fs_dirty_to_prefree(struct f2fs_sb_info *sbi);
3900 block_t f2fs_get_unusable_blocks(struct f2fs_sb_info *sbi);
3901 int f2fs_disable_cp_again(struct f2fs_sb_info *sbi, block_t unusable);
3902 void f2fs_release_discard_addrs(struct f2fs_sb_info *sbi);
3903 int f2fs_npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra);
3904 bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno);
3905 int f2fs_init_inmem_curseg(struct f2fs_sb_info *sbi);
3906 int f2fs_reinit_atgc_curseg(struct f2fs_sb_info *sbi);
3907 void f2fs_save_inmem_curseg(struct f2fs_sb_info *sbi);
3908 void f2fs_restore_inmem_curseg(struct f2fs_sb_info *sbi);
3909 int f2fs_allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
3911 int f2fs_allocate_new_section(struct f2fs_sb_info *sbi, int type, bool force);
3912 int f2fs_allocate_pinning_section(struct f2fs_sb_info *sbi);
3913 int f2fs_allocate_new_segments(struct f2fs_sb_info *sbi);
3914 int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range);
3915 bool f2fs_exist_trim_candidates(struct f2fs_sb_info *sbi,
3917 struct folio *f2fs_get_sum_folio(struct f2fs_sb_info *sbi, unsigned int segno);
3918 void f2fs_update_meta_page(struct f2fs_sb_info *sbi, void *src,
3920 void f2fs_do_write_meta_page(struct f2fs_sb_info *sbi, struct folio *folio,
3926 void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
3930 void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn,
3934 enum temp_type f2fs_get_segment_temp(struct f2fs_sb_info *sbi,
3936 int f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct folio *folio,
3940 void f2fs_update_device_state(struct f2fs_sb_info *sbi, nid_t ino,
3949 void f2fs_write_data_summaries(struct f2fs_sb_info *sbi, block_t start_blk);
3950 void f2fs_write_node_summaries(struct f2fs_sb_info *sbi, block_t start_blk);
3953 void f2fs_flush_sit_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc);
3954 int f2fs_check_and_fix_write_pointer(struct f2fs_sb_info *sbi);
3955 int f2fs_build_segment_manager(struct f2fs_sb_info *sbi);
3956 void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi);
3959 int f2fs_rw_hint_to_seg_type(struct f2fs_sb_info *sbi, enum rw_hint hint);
3960 enum rw_hint f2fs_io_type_to_rw_hint(struct f2fs_sb_info *sbi,
3962 unsigned int f2fs_usable_segs_in_sec(struct f2fs_sb_info *sbi);
3963 unsigned int f2fs_usable_blks_in_seg(struct f2fs_sb_info *sbi,
3965 unsigned long long f2fs_get_section_mtime(struct f2fs_sb_info *sbi,
3977 static inline bool f2fs_need_rand_seg(struct f2fs_sb_info *sbi) in f2fs_need_rand_seg() argument
3979 return F2FS_OPTION(sbi).fs_mode == FS_MODE_FRAGMENT_SEG || in f2fs_need_rand_seg()
3980 F2FS_OPTION(sbi).fs_mode == FS_MODE_FRAGMENT_BLK; in f2fs_need_rand_seg()
3986 void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io,
3988 void f2fs_flush_ckpt_thread(struct f2fs_sb_info *sbi);
3989 struct folio *f2fs_grab_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index);
3990 struct folio *f2fs_get_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index);
3991 struct folio *f2fs_get_meta_folio_retry(struct f2fs_sb_info *sbi, pgoff_t index);
3992 struct folio *f2fs_get_tmp_folio(struct f2fs_sb_info *sbi, pgoff_t index);
3993 bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
3995 bool f2fs_is_valid_blkaddr_raw(struct f2fs_sb_info *sbi,
3997 int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
3999 void f2fs_ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index,
4001 long f2fs_sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type,
4003 void f2fs_add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type);
4004 void f2fs_remove_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type);
4005 void f2fs_release_ino_entry(struct f2fs_sb_info *sbi, bool all);
4006 bool f2fs_exist_written_data(struct f2fs_sb_info *sbi, nid_t ino, int mode);
4007 void f2fs_set_dirty_device(struct f2fs_sb_info *sbi, nid_t ino,
4009 bool f2fs_is_dirty_device(struct f2fs_sb_info *sbi, nid_t ino,
4011 int f2fs_acquire_orphan_inode(struct f2fs_sb_info *sbi);
4012 void f2fs_release_orphan_inode(struct f2fs_sb_info *sbi);
4014 void f2fs_remove_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino);
4015 int f2fs_recover_orphan_inodes(struct f2fs_sb_info *sbi);
4016 int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi);
4019 int f2fs_sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type,
4021 void f2fs_wait_on_all_pages(struct f2fs_sb_info *sbi, int type);
4022 u64 f2fs_get_sectors_written(struct f2fs_sb_info *sbi);
4023 int f2fs_write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc);
4024 void f2fs_init_ino_entry_info(struct f2fs_sb_info *sbi);
4027 int f2fs_issue_checkpoint(struct f2fs_sb_info *sbi);
4028 int f2fs_start_ckpt_thread(struct f2fs_sb_info *sbi);
4029 void f2fs_stop_ckpt_thread(struct f2fs_sb_info *sbi);
4030 void f2fs_init_ckpt_req_control(struct f2fs_sb_info *sbi);
4040 void f2fs_submit_read_bio(struct f2fs_sb_info *sbi, struct bio *bio,
4042 int f2fs_init_write_merge_io(struct f2fs_sb_info *sbi);
4043 void f2fs_submit_merged_write(struct f2fs_sb_info *sbi, enum page_type type);
4044 void f2fs_submit_merged_write_cond(struct f2fs_sb_info *sbi,
4047 void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
4049 void f2fs_flush_merged_writes(struct f2fs_sb_info *sbi);
4053 struct block_device *f2fs_target_device(struct f2fs_sb_info *sbi,
4055 int f2fs_target_device_index(struct f2fs_sb_info *sbi, block_t blkaddr);
4089 int f2fs_init_post_read_wq(struct f2fs_sb_info *sbi);
4090 void f2fs_destroy_post_read_wq(struct f2fs_sb_info *sbi);
4096 int f2fs_start_gc_thread(struct f2fs_sb_info *sbi);
4097 void f2fs_stop_gc_thread(struct f2fs_sb_info *sbi);
4099 int f2fs_gc(struct f2fs_sb_info *sbi, struct f2fs_gc_control *gc_control);
4100 void f2fs_build_gc_manager(struct f2fs_sb_info *sbi);
4101 int f2fs_gc_range(struct f2fs_sb_info *sbi,
4108 int f2fs_get_victim(struct f2fs_sb_info *sbi, unsigned int *result,
4115 int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only);
4116 bool f2fs_space_for_roll_forward(struct f2fs_sb_info *sbi);
4139 struct f2fs_sb_info *sbi; member
4204 static inline struct f2fs_stat_info *F2FS_STAT(struct f2fs_sb_info *sbi) in F2FS_STAT() argument
4206 return (struct f2fs_stat_info *)sbi->stat_info; in F2FS_STAT()
4209 #define stat_inc_cp_call_count(sbi, foreground) \ argument
4210 atomic_inc(&sbi->cp_call_count[(foreground)])
4211 #define stat_inc_cp_count(sbi) (F2FS_STAT(sbi)->cp_count++) argument
4212 #define stat_io_skip_bggc_count(sbi) ((sbi)->io_skip_bggc++) argument
4213 #define stat_other_skip_bggc_count(sbi) ((sbi)->other_skip_bggc++) argument
4214 #define stat_inc_dirty_inode(sbi, type) ((sbi)->ndirty_inode[type]++) argument
4215 #define stat_dec_dirty_inode(sbi, type) ((sbi)->ndirty_inode[type]--) argument
4216 #define stat_inc_total_hit(sbi, type) (atomic64_inc(&(sbi)->total_hit_ext[type])) argument
4217 #define stat_inc_rbtree_node_hit(sbi, type) (atomic64_inc(&(sbi)->read_hit_rbtree[type])) argument
4218 #define stat_inc_largest_node_hit(sbi) (atomic64_inc(&(sbi)->read_hit_largest)) argument
4219 #define stat_inc_cached_node_hit(sbi, type) (atomic64_inc(&(sbi)->read_hit_cached[type])) argument
4272 #define stat_inc_meta_count(sbi, blkaddr) \ argument
4274 if (blkaddr < SIT_I(sbi)->sit_base_addr) \
4275 atomic_inc(&(sbi)->meta_count[META_CP]); \
4276 else if (blkaddr < NM_I(sbi)->nat_blkaddr) \
4277 atomic_inc(&(sbi)->meta_count[META_SIT]); \
4278 else if (blkaddr < SM_I(sbi)->ssa_blkaddr) \
4279 atomic_inc(&(sbi)->meta_count[META_NAT]); \
4280 else if (blkaddr < SM_I(sbi)->main_blkaddr) \
4281 atomic_inc(&(sbi)->meta_count[META_SSA]); \
4283 #define stat_inc_seg_type(sbi, curseg) \ argument
4284 ((sbi)->segment_count[(curseg)->alloc_type]++)
4285 #define stat_inc_block_count(sbi, curseg) \ argument
4286 ((sbi)->block_count[(curseg)->alloc_type]++)
4287 #define stat_inc_inplace_blocks(sbi) \ argument
4288 (atomic_inc(&(sbi)->inplace_count))
4296 #define stat_inc_gc_call_count(sbi, foreground) \ argument
4297 (F2FS_STAT(sbi)->gc_call_count[(foreground)]++)
4298 #define stat_inc_gc_sec_count(sbi, type, gc_type) \ argument
4299 (F2FS_STAT(sbi)->gc_secs[(type)][(gc_type)]++)
4300 #define stat_inc_gc_seg_count(sbi, type, gc_type) \ argument
4301 (F2FS_STAT(sbi)->gc_segs[(type)][(gc_type)]++)
4306 #define stat_inc_data_blk_count(sbi, blks, gc_type) \ argument
4308 struct f2fs_stat_info *si = F2FS_STAT(sbi); \
4314 #define stat_inc_node_blk_count(sbi, blks, gc_type) \ argument
4316 struct f2fs_stat_info *si = F2FS_STAT(sbi); \
4322 int f2fs_build_stats(struct f2fs_sb_info *sbi);
4323 void f2fs_destroy_stats(struct f2fs_sb_info *sbi);
4326 void f2fs_update_sit_info(struct f2fs_sb_info *sbi);
4328 #define stat_inc_cp_call_count(sbi, foreground) do { } while (0) argument
4329 #define stat_inc_cp_count(sbi) do { } while (0) argument
4330 #define stat_io_skip_bggc_count(sbi) do { } while (0) argument
4331 #define stat_other_skip_bggc_count(sbi) do { } while (0) argument
4332 #define stat_inc_dirty_inode(sbi, type) do { } while (0) argument
4333 #define stat_dec_dirty_inode(sbi, type) do { } while (0) argument
4334 #define stat_inc_total_hit(sbi, type) do { } while (0) argument
4335 #define stat_inc_rbtree_node_hit(sbi, type) do { } while (0) argument
4336 #define stat_inc_largest_node_hit(sbi) do { } while (0) argument
4337 #define stat_inc_cached_node_hit(sbi, type) do { } while (0) argument
4353 #define stat_inc_meta_count(sbi, blkaddr) do { } while (0) argument
4354 #define stat_inc_seg_type(sbi, curseg) do { } while (0) argument
4355 #define stat_inc_block_count(sbi, curseg) do { } while (0) argument
4356 #define stat_inc_inplace_blocks(sbi) do { } while (0) argument
4357 #define stat_inc_gc_call_count(sbi, foreground) do { } while (0) argument
4358 #define stat_inc_gc_sec_count(sbi, type, gc_type) do { } while (0) argument
4359 #define stat_inc_gc_seg_count(sbi, type, gc_type) do { } while (0) argument
4361 #define stat_inc_data_blk_count(sbi, blks, gc_type) do { } while (0) argument
4362 #define stat_inc_node_blk_count(sbi, blks, gc_type) do { } while (0) argument
4364 static inline int f2fs_build_stats(struct f2fs_sb_info *sbi) { return 0; } in f2fs_build_stats() argument
4365 static inline void f2fs_destroy_stats(struct f2fs_sb_info *sbi) { } in f2fs_destroy_stats() argument
4368 static inline void f2fs_update_sit_info(struct f2fs_sb_info *sbi) {} in f2fs_update_sit_info() argument
4423 void f2fs_join_shrinker(struct f2fs_sb_info *sbi);
4424 void f2fs_leave_shrinker(struct f2fs_sb_info *sbi);
4434 void f2fs_init_extent_cache_info(struct f2fs_sb_info *sbi);
4447 unsigned int f2fs_shrink_read_extent_tree(struct f2fs_sb_info *sbi,
4457 unsigned int f2fs_shrink_age_extent_tree(struct f2fs_sb_info *sbi,
4468 int f2fs_register_sysfs(struct f2fs_sb_info *sbi);
4469 void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi);
4560 void f2fs_init_compress_info(struct f2fs_sb_info *sbi);
4561 int f2fs_init_compress_inode(struct f2fs_sb_info *sbi);
4562 void f2fs_destroy_compress_inode(struct f2fs_sb_info *sbi);
4563 int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi);
4564 void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi);
4567 struct address_space *COMPRESS_MAPPING(struct f2fs_sb_info *sbi);
4568 void f2fs_invalidate_compress_pages_range(struct f2fs_sb_info *sbi,
4570 bool f2fs_load_compressed_folio(struct f2fs_sb_info *sbi, struct folio *folio,
4572 void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi, nid_t ino);
4575 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); \
4576 sbi->compr_new_inode++; \
4580 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); \
4582 sbi->compr_written_block += blocks; \
4583 sbi->compr_saved_block += diff; \
4616 static inline int f2fs_init_compress_inode(struct f2fs_sb_info *sbi) { return 0; } in f2fs_init_compress_inode() argument
4617 static inline void f2fs_destroy_compress_inode(struct f2fs_sb_info *sbi) { } in f2fs_destroy_compress_inode() argument
4618 static inline int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi) { return 0; } in f2fs_init_page_array_cache() argument
4619 static inline void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi) { } in f2fs_destroy_page_array_cache() argument
4622 static inline void f2fs_invalidate_compress_pages_range(struct f2fs_sb_info *sbi, in f2fs_invalidate_compress_pages_range() argument
4624 static inline bool f2fs_load_compressed_folio(struct f2fs_sb_info *sbi, in f2fs_load_compressed_folio() argument
4626 static inline void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi, in f2fs_invalidate_compress_pages() argument
4644 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in set_compress_context() local
4647 fi->i_compress_algorithm = F2FS_OPTION(sbi).compress_algorithm; in set_compress_context()
4648 fi->i_log_cluster_size = F2FS_OPTION(sbi).compress_log_size; in set_compress_context()
4649 fi->i_compress_flag = F2FS_OPTION(sbi).compress_chksum ? in set_compress_context()
4654 F2FS_OPTION(sbi).compress_level) in set_compress_context()
4655 fi->i_compress_level = F2FS_OPTION(sbi).compress_level; in set_compress_context()
4693 static inline bool f2fs_sb_has_##name(struct f2fs_sb_info *sbi) \
4695 return F2FS_HAS_FEATURE(sbi, F2FS_FEATURE_##flagname); \
4715 static inline bool f2fs_zone_is_seq(struct f2fs_sb_info *sbi, int devi, in f2fs_zone_is_seq() argument
4721 static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi, in f2fs_blkz_is_seq() argument
4724 return f2fs_zone_is_seq(sbi, devi, blkaddr / sbi->blocks_per_blkz); in f2fs_blkz_is_seq()
4728 static inline int f2fs_bdev_index(struct f2fs_sb_info *sbi, in f2fs_bdev_index() argument
4733 if (!f2fs_is_multi_device(sbi)) in f2fs_bdev_index()
4736 for (i = 0; i < sbi->s_ndevs; i++) in f2fs_bdev_index()
4744 static inline bool f2fs_hw_should_discard(struct f2fs_sb_info *sbi) in f2fs_hw_should_discard() argument
4746 return f2fs_sb_has_blkzoned(sbi); in f2fs_hw_should_discard()
4754 static inline bool f2fs_hw_support_discard(struct f2fs_sb_info *sbi) in f2fs_hw_support_discard() argument
4758 if (!f2fs_is_multi_device(sbi)) in f2fs_hw_support_discard()
4759 return f2fs_bdev_support_discard(sbi->sb->s_bdev); in f2fs_hw_support_discard()
4761 for (i = 0; i < sbi->s_ndevs; i++) in f2fs_hw_support_discard()
4767 static inline bool f2fs_realtime_discard_enable(struct f2fs_sb_info *sbi) in f2fs_realtime_discard_enable() argument
4769 return (test_opt(sbi, DISCARD) && f2fs_hw_support_discard(sbi)) || in f2fs_realtime_discard_enable()
4770 f2fs_hw_should_discard(sbi); in f2fs_realtime_discard_enable()
4773 static inline bool f2fs_hw_is_readonly(struct f2fs_sb_info *sbi) in f2fs_hw_is_readonly() argument
4777 if (!f2fs_is_multi_device(sbi)) in f2fs_hw_is_readonly()
4778 return bdev_read_only(sbi->sb->s_bdev); in f2fs_hw_is_readonly()
4780 for (i = 0; i < sbi->s_ndevs; i++) in f2fs_hw_is_readonly()
4786 static inline bool f2fs_dev_is_readonly(struct f2fs_sb_info *sbi) in f2fs_dev_is_readonly() argument
4788 return f2fs_sb_has_readonly(sbi) || f2fs_hw_is_readonly(sbi); in f2fs_dev_is_readonly()
4791 static inline bool f2fs_lfs_mode(struct f2fs_sb_info *sbi) in f2fs_lfs_mode() argument
4793 return F2FS_OPTION(sbi).fs_mode == FS_MODE_LFS; in f2fs_lfs_mode()
4796 static inline bool f2fs_is_sequential_zone_area(struct f2fs_sb_info *sbi, in f2fs_is_sequential_zone_area() argument
4799 if (f2fs_sb_has_blkzoned(sbi)) { in f2fs_is_sequential_zone_area()
4801 int devi = f2fs_target_device_index(sbi, blkaddr); in f2fs_is_sequential_zone_area()
4806 if (f2fs_is_multi_device(sbi)) { in f2fs_is_sequential_zone_area()
4809 f2fs_err(sbi, "Invalid block %x", blkaddr); in f2fs_is_sequential_zone_area()
4815 return f2fs_blkz_is_seq(sbi, devi, blkaddr); in f2fs_is_sequential_zone_area()
4823 static inline bool f2fs_low_mem_mode(struct f2fs_sb_info *sbi) in f2fs_low_mem_mode() argument
4825 return F2FS_OPTION(sbi).memory_mode == MEMORY_MODE_LOW; in f2fs_low_mem_mode()
4857 static inline bool f2fs_allow_multi_device_dio(struct f2fs_sb_info *sbi, in f2fs_allow_multi_device_dio() argument
4860 if (!f2fs_is_multi_device(sbi)) in f2fs_allow_multi_device_dio()
4864 return sbi->aligned_blksize; in f2fs_allow_multi_device_dio()
4874 extern int f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned long rate,
4877 static inline int f2fs_build_fault_attr(struct f2fs_sb_info *sbi, in f2fs_build_fault_attr() argument
4885 static inline bool is_journalled_quota(struct f2fs_sb_info *sbi) in is_journalled_quota() argument
4888 if (f2fs_sb_has_quota_ino(sbi)) in is_journalled_quota()
4890 if (F2FS_OPTION(sbi).s_qf_names[USRQUOTA] || in is_journalled_quota()
4891 F2FS_OPTION(sbi).s_qf_names[GRPQUOTA] || in is_journalled_quota()
4892 F2FS_OPTION(sbi).s_qf_names[PRJQUOTA]) in is_journalled_quota()
4898 static inline bool f2fs_block_unit_discard(struct f2fs_sb_info *sbi) in f2fs_block_unit_discard() argument
4900 return F2FS_OPTION(sbi).discard_unit == DISCARD_UNIT_BLOCK; in f2fs_block_unit_discard()
4922 static inline void f2fs_handle_page_eio(struct f2fs_sb_info *sbi, in f2fs_handle_page_eio() argument
4927 if (unlikely(f2fs_cp_error(sbi))) in f2fs_handle_page_eio()
4930 if (ofs == sbi->page_eio_ofs[type]) { in f2fs_handle_page_eio()
4931 if (sbi->page_eio_cnt[type]++ == MAX_RETRY_PAGE_EIO) in f2fs_handle_page_eio()
4932 set_ckpt_flags(sbi, CP_ERROR_FLAG); in f2fs_handle_page_eio()
4934 sbi->page_eio_ofs[type] = ofs; in f2fs_handle_page_eio()
4935 sbi->page_eio_cnt[type] = 0; in f2fs_handle_page_eio()
4939 static inline bool f2fs_is_readonly(struct f2fs_sb_info *sbi) in f2fs_is_readonly() argument
4941 return f2fs_sb_has_readonly(sbi) || f2fs_readonly(sbi->sb); in f2fs_is_readonly()
4944 static inline void f2fs_truncate_meta_inode_pages(struct f2fs_sb_info *sbi, in f2fs_truncate_meta_inode_pages() argument
4953 folio = filemap_get_folio(META_MAPPING(sbi), blkaddr + i); in f2fs_truncate_meta_inode_pages()
4962 f2fs_submit_merged_write_cond(sbi, sbi->meta_inode, in f2fs_truncate_meta_inode_pages()
4965 truncate_inode_pages_range(META_MAPPING(sbi), in f2fs_truncate_meta_inode_pages()
4970 static inline void f2fs_invalidate_internal_cache(struct f2fs_sb_info *sbi, in f2fs_invalidate_internal_cache() argument
4973 f2fs_truncate_meta_inode_pages(sbi, blkaddr, len); in f2fs_invalidate_internal_cache()
4974 f2fs_invalidate_compress_pages_range(sbi, blkaddr, len); in f2fs_invalidate_internal_cache()