• Home
  • Raw
  • Download

Lines Matching refs:sbi

32 #define f2fs_bug_on(sbi, condition)	BUG_ON(condition)  argument
34 #define f2fs_bug_on(sbi, condition) \ argument
38 set_sbi_flag(sbi, SBI_NEED_FSCK); \
102 #define F2FS_OPTION(sbi) ((sbi)->mount_opt) argument
103 #define clear_opt(sbi, option) (F2FS_OPTION(sbi).opt &= ~F2FS_MOUNT_##option) argument
104 #define set_opt(sbi, option) (F2FS_OPTION(sbi).opt |= F2FS_MOUNT_##option) argument
105 #define test_opt(sbi, option) (F2FS_OPTION(sbi).opt & F2FS_MOUNT_##option) argument
175 #define F2FS_HAS_FEATURE(sbi, mask) __F2FS_HAS_FEATURE(sbi->raw_super, mask) argument
176 #define F2FS_SET_FEATURE(sbi, mask) \ argument
177 (sbi->raw_super->feature |= cpu_to_le32(mask))
178 #define F2FS_CLEAR_FEATURE(sbi, mask) \ argument
179 (sbi->raw_super->feature &= ~cpu_to_le32(mask))
204 #define MAX_DISCARD_BLOCKS(sbi) BLKS_PER_SEC(sbi) argument
1183 struct f2fs_sb_info *sbi; /* f2fs_sb_info pointer */ member
1216 struct f2fs_sb_info *sbi; /* f2fs superblock */ member
1227 #define FDEV(i) (sbi->devs[i])
1336 #define DUMMY_ENCRYPTION_ENABLED(sbi) \ argument
1337 (unlikely(F2FS_OPTION(sbi).dummy_enc_ctx.ctx != NULL))
1339 #define DUMMY_ENCRYPTION_ENABLED(sbi) (0) argument
1625 #define f2fs_show_injection_info(sbi, type) \ argument
1627 KERN_INFO, sbi->sb->s_id, \
1630 static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type) in time_to_inject() argument
1632 struct f2fs_fault_info *ffi = &F2FS_OPTION(sbi).fault_info; in time_to_inject()
1648 #define f2fs_show_injection_info(sbi, type) do { } while (0) argument
1649 static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type) in time_to_inject() argument
1661 static inline bool f2fs_is_multi_device(struct f2fs_sb_info *sbi) in f2fs_is_multi_device() argument
1663 return sbi->s_ndevs > 1; in f2fs_is_multi_device()
1673 static inline void f2fs_update_time(struct f2fs_sb_info *sbi, int type) in f2fs_update_time() argument
1677 sbi->last_time[type] = now; in f2fs_update_time()
1681 sbi->last_time[DISCARD_TIME] = now; in f2fs_update_time()
1682 sbi->last_time[GC_TIME] = now; in f2fs_update_time()
1686 static inline bool f2fs_time_over(struct f2fs_sb_info *sbi, int type) in f2fs_time_over() argument
1688 unsigned long interval = sbi->interval_time[type] * HZ; in f2fs_time_over()
1690 return time_after(jiffies, sbi->last_time[type] + interval); in f2fs_time_over()
1693 static inline unsigned int f2fs_time_to_wait(struct f2fs_sb_info *sbi, in f2fs_time_to_wait() argument
1696 unsigned long interval = sbi->interval_time[type] * HZ; in f2fs_time_to_wait()
1700 delta = (sbi->last_time[type] + interval) - jiffies; in f2fs_time_to_wait()
1710 static inline u32 __f2fs_crc32(struct f2fs_sb_info *sbi, u32 crc, in __f2fs_crc32() argument
1719 BUG_ON(crypto_shash_descsize(sbi->s_chksum_driver) != sizeof(desc.ctx)); in __f2fs_crc32()
1721 desc.shash.tfm = sbi->s_chksum_driver; in __f2fs_crc32()
1730 static inline u32 f2fs_crc32(struct f2fs_sb_info *sbi, const void *address, in f2fs_crc32() argument
1733 return __f2fs_crc32(sbi, F2FS_SUPER_MAGIC, address, length); in f2fs_crc32()
1736 static inline bool f2fs_crc_valid(struct f2fs_sb_info *sbi, __u32 blk_crc, in f2fs_crc_valid() argument
1739 return f2fs_crc32(sbi, buf, buf_size) == blk_crc; in f2fs_crc_valid()
1742 static inline u32 f2fs_chksum(struct f2fs_sb_info *sbi, u32 crc, in f2fs_chksum() argument
1745 return __f2fs_crc32(sbi, crc, address, length); in f2fs_chksum()
1773 static inline struct f2fs_super_block *F2FS_RAW_SUPER(struct f2fs_sb_info *sbi) in F2FS_RAW_SUPER() argument
1775 return (struct f2fs_super_block *)(sbi->raw_super); in F2FS_RAW_SUPER()
1778 static inline struct f2fs_checkpoint *F2FS_CKPT(struct f2fs_sb_info *sbi) in F2FS_CKPT() argument
1780 return (struct f2fs_checkpoint *)(sbi->ckpt); in F2FS_CKPT()
1793 static inline struct f2fs_nm_info *NM_I(struct f2fs_sb_info *sbi) in NM_I() argument
1795 return (struct f2fs_nm_info *)(sbi->nm_info); in NM_I()
1798 static inline struct f2fs_sm_info *SM_I(struct f2fs_sb_info *sbi) in SM_I() argument
1800 return (struct f2fs_sm_info *)(sbi->sm_info); in SM_I()
1803 static inline struct sit_info *SIT_I(struct f2fs_sb_info *sbi) in SIT_I() argument
1805 return (struct sit_info *)(SM_I(sbi)->sit_info); in SIT_I()
1808 static inline struct free_segmap_info *FREE_I(struct f2fs_sb_info *sbi) in FREE_I() argument
1810 return (struct free_segmap_info *)(SM_I(sbi)->free_info); in FREE_I()
1813 static inline struct dirty_seglist_info *DIRTY_I(struct f2fs_sb_info *sbi) in DIRTY_I() argument
1815 return (struct dirty_seglist_info *)(SM_I(sbi)->dirty_info); in DIRTY_I()
1818 static inline struct address_space *META_MAPPING(struct f2fs_sb_info *sbi) in META_MAPPING() argument
1820 return sbi->meta_inode->i_mapping; in META_MAPPING()
1823 static inline struct address_space *NODE_MAPPING(struct f2fs_sb_info *sbi) in NODE_MAPPING() argument
1825 return sbi->node_inode->i_mapping; in NODE_MAPPING()
1828 static inline bool is_sbi_flag_set(struct f2fs_sb_info *sbi, unsigned int type) in is_sbi_flag_set() argument
1830 return test_bit(type, &sbi->s_flag); in is_sbi_flag_set()
1833 static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type) in set_sbi_flag() argument
1835 set_bit(type, &sbi->s_flag); in set_sbi_flag()
1838 static inline void clear_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type) in clear_sbi_flag() argument
1840 clear_bit(type, &sbi->s_flag); in clear_sbi_flag()
1868 static inline bool is_set_ckpt_flags(struct f2fs_sb_info *sbi, unsigned int f) in is_set_ckpt_flags() argument
1870 return __is_set_ckpt_flags(F2FS_CKPT(sbi), f); in is_set_ckpt_flags()
1882 static inline void set_ckpt_flags(struct f2fs_sb_info *sbi, unsigned int f) in set_ckpt_flags() argument
1886 spin_lock_irqsave(&sbi->cp_lock, flags); in set_ckpt_flags()
1887 __set_ckpt_flags(F2FS_CKPT(sbi), f); in set_ckpt_flags()
1888 spin_unlock_irqrestore(&sbi->cp_lock, flags); in set_ckpt_flags()
1900 static inline void clear_ckpt_flags(struct f2fs_sb_info *sbi, unsigned int f) in clear_ckpt_flags() argument
1904 spin_lock_irqsave(&sbi->cp_lock, flags); in clear_ckpt_flags()
1905 __clear_ckpt_flags(F2FS_CKPT(sbi), f); in clear_ckpt_flags()
1906 spin_unlock_irqrestore(&sbi->cp_lock, flags); in clear_ckpt_flags()
1909 static inline void disable_nat_bits(struct f2fs_sb_info *sbi, bool lock) in disable_nat_bits() argument
1921 spin_lock_irqsave(&sbi->cp_lock, flags); in disable_nat_bits()
1922 __clear_ckpt_flags(F2FS_CKPT(sbi), CP_NAT_BITS_FLAG); in disable_nat_bits()
1923 nat_bits = NM_I(sbi)->nat_bits; in disable_nat_bits()
1924 NM_I(sbi)->nat_bits = NULL; in disable_nat_bits()
1926 spin_unlock_irqrestore(&sbi->cp_lock, flags); in disable_nat_bits()
1931 static inline bool enabled_nat_bits(struct f2fs_sb_info *sbi, in enabled_nat_bits() argument
1934 bool set = is_set_ckpt_flags(sbi, CP_NAT_BITS_FLAG); in enabled_nat_bits()
1939 static inline void f2fs_lock_op(struct f2fs_sb_info *sbi) in f2fs_lock_op() argument
1941 down_read(&sbi->cp_rwsem); in f2fs_lock_op()
1944 static inline int f2fs_trylock_op(struct f2fs_sb_info *sbi) in f2fs_trylock_op() argument
1946 return down_read_trylock(&sbi->cp_rwsem); in f2fs_trylock_op()
1949 static inline void f2fs_unlock_op(struct f2fs_sb_info *sbi) in f2fs_unlock_op() argument
1951 up_read(&sbi->cp_rwsem); in f2fs_unlock_op()
1954 static inline void f2fs_lock_all(struct f2fs_sb_info *sbi) in f2fs_lock_all() argument
1956 down_write(&sbi->cp_rwsem); in f2fs_lock_all()
1959 static inline void f2fs_unlock_all(struct f2fs_sb_info *sbi) in f2fs_unlock_all() argument
1961 up_write(&sbi->cp_rwsem); in f2fs_unlock_all()
1964 static inline int __get_cp_reason(struct f2fs_sb_info *sbi) in __get_cp_reason() argument
1968 if (test_opt(sbi, FASTBOOT)) in __get_cp_reason()
1970 if (is_sbi_flag_set(sbi, SBI_IS_CLOSE)) in __get_cp_reason()
1980 static inline bool __exist_node_summaries(struct f2fs_sb_info *sbi) in __exist_node_summaries() argument
1982 return (is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG) || in __exist_node_summaries()
1983 is_set_ckpt_flags(sbi, CP_FASTBOOT_FLAG)); in __exist_node_summaries()
2001 static inline bool __allow_reserved_blocks(struct f2fs_sb_info *sbi, in __allow_reserved_blocks() argument
2006 if (!test_opt(sbi, RESERVE_ROOT)) in __allow_reserved_blocks()
2010 if (uid_eq(F2FS_OPTION(sbi).s_resuid, current_fsuid())) in __allow_reserved_blocks()
2012 if (!gid_eq(F2FS_OPTION(sbi).s_resgid, GLOBAL_ROOT_GID) && in __allow_reserved_blocks()
2013 in_group_p(F2FS_OPTION(sbi).s_resgid)) in __allow_reserved_blocks()
2021 static inline int inc_valid_block_count(struct f2fs_sb_info *sbi, in inc_valid_block_count() argument
2032 if (time_to_inject(sbi, FAULT_BLOCK)) { in inc_valid_block_count()
2033 f2fs_show_injection_info(sbi, FAULT_BLOCK); in inc_valid_block_count()
2042 percpu_counter_add(&sbi->alloc_valid_block_count, (*count)); in inc_valid_block_count()
2044 spin_lock(&sbi->stat_lock); in inc_valid_block_count()
2045 sbi->total_valid_block_count += (block_t)(*count); in inc_valid_block_count()
2046 avail_user_block_count = sbi->user_block_count - in inc_valid_block_count()
2047 sbi->current_reserved_blocks; in inc_valid_block_count()
2049 if (!__allow_reserved_blocks(sbi, inode, true)) in inc_valid_block_count()
2050 avail_user_block_count -= F2FS_OPTION(sbi).root_reserved_blocks; in inc_valid_block_count()
2052 if (F2FS_IO_ALIGNED(sbi)) in inc_valid_block_count()
2053 avail_user_block_count -= sbi->blocks_per_seg * in inc_valid_block_count()
2054 SM_I(sbi)->additional_reserved_segments; in inc_valid_block_count()
2056 if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) { in inc_valid_block_count()
2057 if (avail_user_block_count > sbi->unusable_block_count) in inc_valid_block_count()
2058 avail_user_block_count -= sbi->unusable_block_count; in inc_valid_block_count()
2062 if (unlikely(sbi->total_valid_block_count > avail_user_block_count)) { in inc_valid_block_count()
2063 diff = sbi->total_valid_block_count - avail_user_block_count; in inc_valid_block_count()
2068 sbi->total_valid_block_count -= diff; in inc_valid_block_count()
2070 spin_unlock(&sbi->stat_lock); in inc_valid_block_count()
2074 spin_unlock(&sbi->stat_lock); in inc_valid_block_count()
2077 percpu_counter_sub(&sbi->alloc_valid_block_count, release); in inc_valid_block_count()
2084 percpu_counter_sub(&sbi->alloc_valid_block_count, release); in inc_valid_block_count()
2091 void f2fs_printk(struct f2fs_sb_info *sbi, const char *fmt, ...);
2093 #define f2fs_err(sbi, fmt, ...) \ argument
2094 f2fs_printk(sbi, KERN_ERR fmt, ##__VA_ARGS__)
2095 #define f2fs_warn(sbi, fmt, ...) \ argument
2096 f2fs_printk(sbi, KERN_WARNING fmt, ##__VA_ARGS__)
2097 #define f2fs_notice(sbi, fmt, ...) \ argument
2098 f2fs_printk(sbi, KERN_NOTICE fmt, ##__VA_ARGS__)
2099 #define f2fs_info(sbi, fmt, ...) \ argument
2100 f2fs_printk(sbi, KERN_INFO fmt, ##__VA_ARGS__)
2101 #define f2fs_debug(sbi, fmt, ...) \ argument
2102 f2fs_printk(sbi, KERN_DEBUG fmt, ##__VA_ARGS__)
2104 static inline void dec_valid_block_count(struct f2fs_sb_info *sbi, in dec_valid_block_count() argument
2110 spin_lock(&sbi->stat_lock); in dec_valid_block_count()
2111 f2fs_bug_on(sbi, sbi->total_valid_block_count < (block_t) count); in dec_valid_block_count()
2112 sbi->total_valid_block_count -= (block_t)count; in dec_valid_block_count()
2113 if (sbi->reserved_blocks && in dec_valid_block_count()
2114 sbi->current_reserved_blocks < sbi->reserved_blocks) in dec_valid_block_count()
2115 sbi->current_reserved_blocks = min(sbi->reserved_blocks, in dec_valid_block_count()
2116 sbi->current_reserved_blocks + count); in dec_valid_block_count()
2117 spin_unlock(&sbi->stat_lock); in dec_valid_block_count()
2119 f2fs_warn(sbi, "Inconsistent i_blocks, ino:%lu, iblocks:%llu, sectors:%llu", in dec_valid_block_count()
2123 set_sbi_flag(sbi, SBI_NEED_FSCK); in dec_valid_block_count()
2129 static inline void inc_page_count(struct f2fs_sb_info *sbi, int count_type) in inc_page_count() argument
2131 atomic_inc(&sbi->nr_pages[count_type]); in inc_page_count()
2138 set_sbi_flag(sbi, SBI_IS_DIRTY); in inc_page_count()
2150 static inline void dec_page_count(struct f2fs_sb_info *sbi, int count_type) in dec_page_count() argument
2152 atomic_dec(&sbi->nr_pages[count_type]); in dec_page_count()
2168 static inline s64 get_pages(struct f2fs_sb_info *sbi, int count_type) in get_pages() argument
2170 return atomic_read(&sbi->nr_pages[count_type]); in get_pages()
2178 static inline int get_blocktype_secs(struct f2fs_sb_info *sbi, int block_type) in get_blocktype_secs() argument
2180 unsigned int pages_per_sec = sbi->segs_per_sec * sbi->blocks_per_seg; in get_blocktype_secs()
2181 unsigned int segs = (get_pages(sbi, block_type) + pages_per_sec - 1) >> in get_blocktype_secs()
2182 sbi->log_blocks_per_seg; in get_blocktype_secs()
2184 return segs / sbi->segs_per_sec; in get_blocktype_secs()
2187 static inline block_t valid_user_blocks(struct f2fs_sb_info *sbi) in valid_user_blocks() argument
2189 return sbi->total_valid_block_count; in valid_user_blocks()
2192 static inline block_t discard_blocks(struct f2fs_sb_info *sbi) in discard_blocks() argument
2194 return sbi->discard_blks; in discard_blocks()
2197 static inline unsigned long __bitmap_size(struct f2fs_sb_info *sbi, int flag) in __bitmap_size() argument
2199 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); in __bitmap_size()
2210 static inline block_t __cp_payload(struct f2fs_sb_info *sbi) in __cp_payload() argument
2212 return le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_payload); in __cp_payload()
2215 static inline void *__bitmap_ptr(struct f2fs_sb_info *sbi, int flag) in __bitmap_ptr() argument
2217 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); in __bitmap_ptr()
2220 if (is_set_ckpt_flags(sbi, CP_LARGE_NAT_BITMAP_FLAG)) { in __bitmap_ptr()
2230 if (__cp_payload(sbi) > 0) { in __bitmap_ptr()
2242 static inline block_t __start_cp_addr(struct f2fs_sb_info *sbi) in __start_cp_addr() argument
2244 block_t start_addr = le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_blkaddr); in __start_cp_addr()
2246 if (sbi->cur_cp_pack == 2) in __start_cp_addr()
2247 start_addr += sbi->blocks_per_seg; in __start_cp_addr()
2251 static inline block_t __start_cp_next_addr(struct f2fs_sb_info *sbi) in __start_cp_next_addr() argument
2253 block_t start_addr = le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_blkaddr); in __start_cp_next_addr()
2255 if (sbi->cur_cp_pack == 1) in __start_cp_next_addr()
2256 start_addr += sbi->blocks_per_seg; in __start_cp_next_addr()
2260 static inline void __set_cp_next_pack(struct f2fs_sb_info *sbi) in __set_cp_next_pack() argument
2262 sbi->cur_cp_pack = (sbi->cur_cp_pack == 1) ? 2 : 1; in __set_cp_next_pack()
2265 static inline block_t __start_sum_addr(struct f2fs_sb_info *sbi) in __start_sum_addr() argument
2267 return le32_to_cpu(F2FS_CKPT(sbi)->cp_pack_start_sum); in __start_sum_addr()
2270 static inline int inc_valid_node_count(struct f2fs_sb_info *sbi, in inc_valid_node_count() argument
2289 if (time_to_inject(sbi, FAULT_BLOCK)) { in inc_valid_node_count()
2290 f2fs_show_injection_info(sbi, FAULT_BLOCK); in inc_valid_node_count()
2294 spin_lock(&sbi->stat_lock); in inc_valid_node_count()
2296 valid_block_count = sbi->total_valid_block_count + in inc_valid_node_count()
2297 sbi->current_reserved_blocks + 1; in inc_valid_node_count()
2299 if (!__allow_reserved_blocks(sbi, inode, false)) in inc_valid_node_count()
2300 valid_block_count += F2FS_OPTION(sbi).root_reserved_blocks; in inc_valid_node_count()
2302 if (F2FS_IO_ALIGNED(sbi)) in inc_valid_node_count()
2303 valid_block_count += sbi->blocks_per_seg * in inc_valid_node_count()
2304 SM_I(sbi)->additional_reserved_segments; in inc_valid_node_count()
2306 user_block_count = sbi->user_block_count; in inc_valid_node_count()
2307 if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) in inc_valid_node_count()
2308 user_block_count -= sbi->unusable_block_count; in inc_valid_node_count()
2311 spin_unlock(&sbi->stat_lock); in inc_valid_node_count()
2315 valid_node_count = sbi->total_valid_node_count + 1; in inc_valid_node_count()
2316 if (unlikely(valid_node_count > sbi->total_node_count)) { in inc_valid_node_count()
2317 spin_unlock(&sbi->stat_lock); in inc_valid_node_count()
2321 sbi->total_valid_node_count++; in inc_valid_node_count()
2322 sbi->total_valid_block_count++; in inc_valid_node_count()
2323 spin_unlock(&sbi->stat_lock); in inc_valid_node_count()
2332 percpu_counter_inc(&sbi->alloc_valid_block_count); in inc_valid_node_count()
2345 static inline void dec_valid_node_count(struct f2fs_sb_info *sbi, in dec_valid_node_count() argument
2348 spin_lock(&sbi->stat_lock); in dec_valid_node_count()
2350 if (unlikely(!sbi->total_valid_block_count || in dec_valid_node_count()
2351 !sbi->total_valid_node_count)) { in dec_valid_node_count()
2352 …f2fs_warn(sbi, "dec_valid_node_count: inconsistent block counts, total_valid_block:%u, total_valid… in dec_valid_node_count()
2353 sbi->total_valid_block_count, in dec_valid_node_count()
2354 sbi->total_valid_node_count); in dec_valid_node_count()
2355 set_sbi_flag(sbi, SBI_NEED_FSCK); in dec_valid_node_count()
2357 sbi->total_valid_block_count--; in dec_valid_node_count()
2358 sbi->total_valid_node_count--; in dec_valid_node_count()
2361 if (sbi->reserved_blocks && in dec_valid_node_count()
2362 sbi->current_reserved_blocks < sbi->reserved_blocks) in dec_valid_node_count()
2363 sbi->current_reserved_blocks++; in dec_valid_node_count()
2365 spin_unlock(&sbi->stat_lock); in dec_valid_node_count()
2371 f2fs_warn(sbi, "dec_valid_node_count: inconsistent i_blocks, ino:%lu, iblocks:%llu", in dec_valid_node_count()
2374 set_sbi_flag(sbi, SBI_NEED_FSCK); in dec_valid_node_count()
2381 static inline unsigned int valid_node_count(struct f2fs_sb_info *sbi) in valid_node_count() argument
2383 return sbi->total_valid_node_count; in valid_node_count()
2386 static inline void inc_valid_inode_count(struct f2fs_sb_info *sbi) in inc_valid_inode_count() argument
2388 percpu_counter_inc(&sbi->total_valid_inode_count); in inc_valid_inode_count()
2391 static inline void dec_valid_inode_count(struct f2fs_sb_info *sbi) in dec_valid_inode_count() argument
2393 percpu_counter_dec(&sbi->total_valid_inode_count); in dec_valid_inode_count()
2396 static inline s64 valid_inode_count(struct f2fs_sb_info *sbi) in valid_inode_count() argument
2398 return percpu_counter_sum_positive(&sbi->total_valid_inode_count); in valid_inode_count()
2488 static inline bool is_idle(struct f2fs_sb_info *sbi, int type) in is_idle() argument
2490 if (sbi->gc_mode == GC_URGENT) in is_idle()
2493 if (get_pages(sbi, F2FS_RD_DATA) || get_pages(sbi, F2FS_RD_NODE) || in is_idle()
2494 get_pages(sbi, F2FS_RD_META) || get_pages(sbi, F2FS_WB_DATA) || in is_idle()
2495 get_pages(sbi, F2FS_WB_CP_DATA) || in is_idle()
2496 get_pages(sbi, F2FS_DIO_READ) || in is_idle()
2497 get_pages(sbi, F2FS_DIO_WRITE)) in is_idle()
2500 if (type != DISCARD_TIME && SM_I(sbi) && SM_I(sbi)->dcc_info && in is_idle()
2501 atomic_read(&SM_I(sbi)->dcc_info->queued_discard)) in is_idle()
2504 if (SM_I(sbi) && SM_I(sbi)->fcc_info && in is_idle()
2505 atomic_read(&SM_I(sbi)->fcc_info->queued_flush)) in is_idle()
2508 return f2fs_time_over(sbi, type); in is_idle()
2972 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_skip_inode_update() local
2974 spin_lock(&sbi->inode_lock[DIRTY_META]); in f2fs_skip_inode_update()
2976 spin_unlock(&sbi->inode_lock[DIRTY_META]); in f2fs_skip_inode_update()
2999 static inline bool f2fs_cp_error(struct f2fs_sb_info *sbi) in f2fs_cp_error() argument
3001 return is_set_ckpt_flags(sbi, CP_ERROR_FLAG); in f2fs_cp_error()
3017 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_may_extent_tree() local
3019 if (!test_opt(sbi, EXTENT_CACHE) || in f2fs_may_extent_tree()
3028 if (list_empty(&sbi->s_list)) in f2fs_may_extent_tree()
3034 static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi, in f2fs_kmalloc() argument
3037 if (time_to_inject(sbi, FAULT_KMALLOC)) { in f2fs_kmalloc()
3038 f2fs_show_injection_info(sbi, FAULT_KMALLOC); in f2fs_kmalloc()
3045 static inline void *f2fs_kzalloc(struct f2fs_sb_info *sbi, in f2fs_kzalloc() argument
3048 return f2fs_kmalloc(sbi, size, flags | __GFP_ZERO); in f2fs_kzalloc()
3051 static inline void *f2fs_kvmalloc(struct f2fs_sb_info *sbi, in f2fs_kvmalloc() argument
3054 if (time_to_inject(sbi, FAULT_KVMALLOC)) { in f2fs_kvmalloc()
3055 f2fs_show_injection_info(sbi, FAULT_KVMALLOC); in f2fs_kvmalloc()
3062 static inline void *f2fs_kvzalloc(struct f2fs_sb_info *sbi, in f2fs_kvzalloc() argument
3065 return f2fs_kvmalloc(sbi, size, flags | __GFP_ZERO); in f2fs_kvzalloc()
3097 static inline void f2fs_reset_iostat(struct f2fs_sb_info *sbi) in f2fs_reset_iostat() argument
3101 spin_lock(&sbi->iostat_lock); in f2fs_reset_iostat()
3103 sbi->rw_iostat[i] = 0; in f2fs_reset_iostat()
3104 sbi->prev_rw_iostat[i] = 0; in f2fs_reset_iostat()
3106 spin_unlock(&sbi->iostat_lock); in f2fs_reset_iostat()
3109 extern void f2fs_record_iostat(struct f2fs_sb_info *sbi);
3111 static inline void f2fs_update_iostat(struct f2fs_sb_info *sbi, in f2fs_update_iostat() argument
3114 if (!sbi->iostat_enable) in f2fs_update_iostat()
3116 spin_lock(&sbi->iostat_lock); in f2fs_update_iostat()
3117 sbi->rw_iostat[type] += io_bytes; in f2fs_update_iostat()
3120 sbi->rw_iostat[APP_BUFFERED_IO] = in f2fs_update_iostat()
3121 sbi->rw_iostat[APP_WRITE_IO] - in f2fs_update_iostat()
3122 sbi->rw_iostat[APP_DIRECT_IO]; in f2fs_update_iostat()
3125 sbi->rw_iostat[APP_BUFFERED_READ_IO] = in f2fs_update_iostat()
3126 sbi->rw_iostat[APP_READ_IO] - in f2fs_update_iostat()
3127 sbi->rw_iostat[APP_DIRECT_READ_IO]; in f2fs_update_iostat()
3128 spin_unlock(&sbi->iostat_lock); in f2fs_update_iostat()
3130 f2fs_record_iostat(sbi); in f2fs_update_iostat()
3133 #define __is_large_section(sbi) ((sbi)->segs_per_sec > 1) argument
3137 bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
3139 static inline void verify_blkaddr(struct f2fs_sb_info *sbi, in verify_blkaddr() argument
3142 if (!f2fs_is_valid_blkaddr(sbi, blkaddr, type)) { in verify_blkaddr()
3143 f2fs_err(sbi, "invalid blkaddr: %u, type: %d, run fsck to fix.", in verify_blkaddr()
3145 f2fs_bug_on(sbi, 1); in verify_blkaddr()
3201 bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct page *page);
3202 void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct page *page);
3205 int f2fs_try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink);
3215 int f2fs_update_extension_list(struct f2fs_sb_info *sbi, const char *name,
3281 int f2fs_enable_quota_files(struct f2fs_sb_info *sbi, bool rdonly);
3284 int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover);
3286 int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi);
3299 int f2fs_check_nid_range(struct f2fs_sb_info *sbi, nid_t nid);
3300 bool f2fs_available_free_memory(struct f2fs_sb_info *sbi, int type);
3301 bool f2fs_in_warm_node_list(struct f2fs_sb_info *sbi, struct page *page);
3302 void f2fs_init_fsync_node_info(struct f2fs_sb_info *sbi);
3303 void f2fs_del_fsync_node_entry(struct f2fs_sb_info *sbi, struct page *page);
3304 void f2fs_reset_fsync_node_info(struct f2fs_sb_info *sbi);
3305 int f2fs_need_dentry_mark(struct f2fs_sb_info *sbi, nid_t nid);
3306 bool f2fs_is_checkpointed_node(struct f2fs_sb_info *sbi, nid_t nid);
3307 bool f2fs_need_inode_block_update(struct f2fs_sb_info *sbi, nid_t ino);
3308 int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid,
3314 int f2fs_wait_on_node_pages_writeback(struct f2fs_sb_info *sbi,
3319 void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid);
3320 struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid);
3323 int f2fs_flush_inline_data(struct f2fs_sb_info *sbi);
3324 int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
3327 int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
3330 int f2fs_build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount);
3331 bool f2fs_alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid);
3332 void f2fs_alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid);
3333 void f2fs_alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid);
3334 int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink);
3337 int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct page *page);
3338 int f2fs_restore_node_summary(struct f2fs_sb_info *sbi,
3340 int f2fs_flush_nat_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc);
3341 int f2fs_build_node_manager(struct f2fs_sb_info *sbi);
3342 void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi);
3349 bool f2fs_need_SSR(struct f2fs_sb_info *sbi);
3351 void f2fs_drop_inmem_pages_all(struct f2fs_sb_info *sbi, bool gc_failure);
3355 void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need);
3356 void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi, bool from_bg);
3357 int f2fs_issue_flush(struct f2fs_sb_info *sbi, nid_t ino);
3358 int f2fs_create_flush_cmd_control(struct f2fs_sb_info *sbi);
3359 int f2fs_flush_device_cache(struct f2fs_sb_info *sbi);
3360 void f2fs_destroy_flush_cmd_control(struct f2fs_sb_info *sbi, bool free);
3361 void f2fs_invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr);
3362 bool f2fs_is_checkpointed_data(struct f2fs_sb_info *sbi, block_t blkaddr);
3363 void f2fs_drop_discard_cmd(struct f2fs_sb_info *sbi);
3364 void f2fs_stop_discard_thread(struct f2fs_sb_info *sbi);
3365 bool f2fs_issue_discard_timeout(struct f2fs_sb_info *sbi);
3366 void f2fs_clear_prefree_segments(struct f2fs_sb_info *sbi,
3368 void f2fs_dirty_to_prefree(struct f2fs_sb_info *sbi);
3369 block_t f2fs_get_unusable_blocks(struct f2fs_sb_info *sbi);
3370 int f2fs_disable_cp_again(struct f2fs_sb_info *sbi, block_t unusable);
3371 void f2fs_release_discard_addrs(struct f2fs_sb_info *sbi);
3372 int f2fs_npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra);
3373 void allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
3375 void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi, int type);
3376 int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range);
3377 bool f2fs_exist_trim_candidates(struct f2fs_sb_info *sbi,
3379 struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno);
3380 void f2fs_update_meta_page(struct f2fs_sb_info *sbi, void *src,
3382 void f2fs_do_write_meta_page(struct f2fs_sb_info *sbi, struct page *page,
3388 void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
3391 void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn,
3395 void f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
3404 void f2fs_write_data_summaries(struct f2fs_sb_info *sbi, block_t start_blk);
3405 void f2fs_write_node_summaries(struct f2fs_sb_info *sbi, block_t start_blk);
3408 void f2fs_flush_sit_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc);
3409 int f2fs_fix_curseg_write_pointer(struct f2fs_sb_info *sbi);
3410 int f2fs_check_write_pointer(struct f2fs_sb_info *sbi);
3411 int f2fs_build_segment_manager(struct f2fs_sb_info *sbi);
3412 void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi);
3416 enum rw_hint f2fs_io_type_to_rw_hint(struct f2fs_sb_info *sbi,
3422 void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io);
3423 struct page *f2fs_grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index);
3424 struct page *f2fs_get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index);
3425 struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index);
3426 struct page *f2fs_get_tmp_page(struct f2fs_sb_info *sbi, pgoff_t index);
3427 bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
3429 int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
3431 void f2fs_ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index);
3432 long f2fs_sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type,
3434 void f2fs_add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type);
3435 void f2fs_remove_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type);
3436 void f2fs_release_ino_entry(struct f2fs_sb_info *sbi, bool all);
3437 bool f2fs_exist_written_data(struct f2fs_sb_info *sbi, nid_t ino, int mode);
3438 void f2fs_set_dirty_device(struct f2fs_sb_info *sbi, nid_t ino,
3440 bool f2fs_is_dirty_device(struct f2fs_sb_info *sbi, nid_t ino,
3442 int f2fs_sync_inode_meta(struct f2fs_sb_info *sbi);
3443 int f2fs_acquire_orphan_inode(struct f2fs_sb_info *sbi);
3444 void f2fs_release_orphan_inode(struct f2fs_sb_info *sbi);
3446 void f2fs_remove_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino);
3447 int f2fs_recover_orphan_inodes(struct f2fs_sb_info *sbi);
3448 int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi);
3451 int f2fs_sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type);
3452 void f2fs_wait_on_all_pages(struct f2fs_sb_info *sbi, int type);
3453 int f2fs_write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc);
3454 void f2fs_init_ino_entry_info(struct f2fs_sb_info *sbi);
3463 struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool noio);
3466 void f2fs_submit_bio(struct f2fs_sb_info *sbi,
3468 void f2fs_submit_merged_write(struct f2fs_sb_info *sbi, enum page_type type);
3469 void f2fs_submit_merged_write_cond(struct f2fs_sb_info *sbi,
3472 void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
3474 void f2fs_flush_merged_writes(struct f2fs_sb_info *sbi);
3478 struct block_device *f2fs_target_device(struct f2fs_sb_info *sbi,
3480 int f2fs_target_device_index(struct f2fs_sb_info *sbi, block_t blkaddr);
3499 void __do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock);
3523 int f2fs_init_post_read_wq(struct f2fs_sb_info *sbi);
3524 void f2fs_destroy_post_read_wq(struct f2fs_sb_info *sbi);
3529 int f2fs_start_gc_thread(struct f2fs_sb_info *sbi);
3530 void f2fs_stop_gc_thread(struct f2fs_sb_info *sbi);
3532 int f2fs_gc(struct f2fs_sb_info *sbi, bool sync, bool background,
3534 void f2fs_build_gc_manager(struct f2fs_sb_info *sbi);
3535 int f2fs_resize_fs(struct f2fs_sb_info *sbi, __u64 block_count);
3540 int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only);
3541 bool f2fs_space_for_roll_forward(struct f2fs_sb_info *sbi);
3549 struct f2fs_sb_info *sbi; member
3595 static inline struct f2fs_stat_info *F2FS_STAT(struct f2fs_sb_info *sbi) in F2FS_STAT() argument
3597 return (struct f2fs_stat_info *)sbi->stat_info; in F2FS_STAT()
3604 #define stat_io_skip_bggc_count(sbi) ((sbi)->io_skip_bggc++) argument
3605 #define stat_other_skip_bggc_count(sbi) ((sbi)->other_skip_bggc++) argument
3606 #define stat_inc_dirty_inode(sbi, type) ((sbi)->ndirty_inode[type]++) argument
3607 #define stat_dec_dirty_inode(sbi, type) ((sbi)->ndirty_inode[type]--) argument
3608 #define stat_inc_total_hit(sbi) (atomic64_inc(&(sbi)->total_hit_ext)) argument
3609 #define stat_inc_rbtree_node_hit(sbi) (atomic64_inc(&(sbi)->read_hit_rbtree)) argument
3610 #define stat_inc_largest_node_hit(sbi) (atomic64_inc(&(sbi)->read_hit_largest)) argument
3611 #define stat_inc_cached_node_hit(sbi) (atomic64_inc(&(sbi)->read_hit_cached)) argument
3656 #define stat_inc_meta_count(sbi, blkaddr) \ argument
3658 if (blkaddr < SIT_I(sbi)->sit_base_addr) \
3659 atomic_inc(&(sbi)->meta_count[META_CP]); \
3660 else if (blkaddr < NM_I(sbi)->nat_blkaddr) \
3661 atomic_inc(&(sbi)->meta_count[META_SIT]); \
3662 else if (blkaddr < SM_I(sbi)->ssa_blkaddr) \
3663 atomic_inc(&(sbi)->meta_count[META_NAT]); \
3664 else if (blkaddr < SM_I(sbi)->main_blkaddr) \
3665 atomic_inc(&(sbi)->meta_count[META_SSA]); \
3667 #define stat_inc_seg_type(sbi, curseg) \ argument
3668 ((sbi)->segment_count[(curseg)->alloc_type]++)
3669 #define stat_inc_block_count(sbi, curseg) \ argument
3670 ((sbi)->block_count[(curseg)->alloc_type]++)
3671 #define stat_inc_inplace_blocks(sbi) \ argument
3672 (atomic_inc(&(sbi)->inplace_count))
3691 #define stat_inc_seg_count(sbi, type, gc_type) \ argument
3693 struct f2fs_stat_info *si = F2FS_STAT(sbi); \
3707 #define stat_inc_data_blk_count(sbi, blks, gc_type) \ argument
3709 struct f2fs_stat_info *si = F2FS_STAT(sbi); \
3715 #define stat_inc_node_blk_count(sbi, blks, gc_type) \ argument
3717 struct f2fs_stat_info *si = F2FS_STAT(sbi); \
3723 int f2fs_build_stats(struct f2fs_sb_info *sbi);
3724 void f2fs_destroy_stats(struct f2fs_sb_info *sbi);
3727 void f2fs_update_sit_info(struct f2fs_sb_info *sbi);
3733 #define stat_io_skip_bggc_count(sbi) do { } while (0) argument
3734 #define stat_other_skip_bggc_count(sbi) do { } while (0) argument
3735 #define stat_inc_dirty_inode(sbi, type) do { } while (0) argument
3736 #define stat_dec_dirty_inode(sbi, type) do { } while (0) argument
3737 #define stat_inc_total_hit(sbi) do { } while (0) argument
3738 #define stat_inc_rbtree_node_hit(sbi) do { } while (0) argument
3739 #define stat_inc_largest_node_hit(sbi) do { } while (0) argument
3740 #define stat_inc_cached_node_hit(sbi) do { } while (0) argument
3757 #define stat_inc_meta_count(sbi, blkaddr) do { } while (0) argument
3758 #define stat_inc_seg_type(sbi, curseg) do { } while (0) argument
3759 #define stat_inc_block_count(sbi, curseg) do { } while (0) argument
3760 #define stat_inc_inplace_blocks(sbi) do { } while (0) argument
3761 #define stat_inc_seg_count(sbi, type, gc_type) do { } while (0) argument
3763 #define stat_inc_data_blk_count(sbi, blks, gc_type) do { } while (0) argument
3764 #define stat_inc_node_blk_count(sbi, blks, gc_type) do { } while (0) argument
3766 static inline int f2fs_build_stats(struct f2fs_sb_info *sbi) { return 0; } in f2fs_build_stats() argument
3767 static inline void f2fs_destroy_stats(struct f2fs_sb_info *sbi) { } in f2fs_destroy_stats() argument
3770 static inline void f2fs_update_sit_info(struct f2fs_sb_info *sbi) {} in f2fs_update_sit_info() argument
3823 void f2fs_join_shrinker(struct f2fs_sb_info *sbi);
3824 void f2fs_leave_shrinker(struct f2fs_sb_info *sbi);
3831 struct rb_node **f2fs_lookup_rb_tree_for_insert(struct f2fs_sb_info *sbi,
3840 bool f2fs_check_rb_tree_consistence(struct f2fs_sb_info *sbi,
3842 unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink);
3852 void f2fs_init_extent_cache_info(struct f2fs_sb_info *sbi);
3861 int f2fs_register_sysfs(struct f2fs_sb_info *sbi);
3862 void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi);
3926 void f2fs_init_compress_info(struct f2fs_sb_info *sbi);
3948 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in set_compress_context() local
3951 F2FS_OPTION(sbi).compress_algorithm; in set_compress_context()
3953 F2FS_OPTION(sbi).compress_log_size; in set_compress_context()
3989 static inline int f2fs_sb_has_##name(struct f2fs_sb_info *sbi) \
3991 return F2FS_HAS_FEATURE(sbi, F2FS_FEATURE_##flagname); \
4010 static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi, in f2fs_blkz_is_seq() argument
4013 unsigned int zno = blkaddr >> sbi->log_blocks_per_blkz; in f2fs_blkz_is_seq()
4019 static inline bool f2fs_hw_should_discard(struct f2fs_sb_info *sbi) in f2fs_hw_should_discard() argument
4021 return f2fs_sb_has_blkzoned(sbi); in f2fs_hw_should_discard()
4030 static inline bool f2fs_hw_support_discard(struct f2fs_sb_info *sbi) in f2fs_hw_support_discard() argument
4034 if (!f2fs_is_multi_device(sbi)) in f2fs_hw_support_discard()
4035 return f2fs_bdev_support_discard(sbi->sb->s_bdev); in f2fs_hw_support_discard()
4037 for (i = 0; i < sbi->s_ndevs; i++) in f2fs_hw_support_discard()
4043 static inline bool f2fs_realtime_discard_enable(struct f2fs_sb_info *sbi) in f2fs_realtime_discard_enable() argument
4045 return (test_opt(sbi, DISCARD) && f2fs_hw_support_discard(sbi)) || in f2fs_realtime_discard_enable()
4046 f2fs_hw_should_discard(sbi); in f2fs_realtime_discard_enable()
4049 static inline bool f2fs_hw_is_readonly(struct f2fs_sb_info *sbi) in f2fs_hw_is_readonly() argument
4053 if (!f2fs_is_multi_device(sbi)) in f2fs_hw_is_readonly()
4054 return bdev_read_only(sbi->sb->s_bdev); in f2fs_hw_is_readonly()
4056 for (i = 0; i < sbi->s_ndevs; i++) in f2fs_hw_is_readonly()
4062 static inline bool f2fs_lfs_mode(struct f2fs_sb_info *sbi) in f2fs_lfs_mode() argument
4064 return F2FS_OPTION(sbi).fs_mode == FS_MODE_LFS; in f2fs_lfs_mode()
4070 struct f2fs_sb_info *sbi = F2FS_I_SB(dir); in f2fs_may_encrypt() local
4077 if (IS_ENCRYPTED(dir) || DUMMY_ENCRYPTION_ENABLED(sbi)) in f2fs_may_encrypt()
4126 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in allow_outplace_dio() local
4129 return (f2fs_lfs_mode(sbi) && (rw == WRITE) && in allow_outplace_dio()
4136 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_force_buffered_io() local
4145 if (f2fs_is_multi_device(sbi)) in f2fs_force_buffered_io()
4151 if (f2fs_sb_has_blkzoned(sbi)) in f2fs_force_buffered_io()
4153 if (f2fs_lfs_mode(sbi) && (rw == WRITE)) { in f2fs_force_buffered_io()
4156 if (F2FS_IO_ALIGNED(sbi)) in f2fs_force_buffered_io()
4167 extern void f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned int rate,
4170 #define f2fs_build_fault_attr(sbi, rate, type) do { } while (0) argument
4173 static inline bool is_journalled_quota(struct f2fs_sb_info *sbi) in is_journalled_quota() argument
4176 if (f2fs_sb_has_quota_ino(sbi)) in is_journalled_quota()
4178 if (F2FS_OPTION(sbi).s_qf_names[USRQUOTA] || in is_journalled_quota()
4179 F2FS_OPTION(sbi).s_qf_names[GRPQUOTA] || in is_journalled_quota()
4180 F2FS_OPTION(sbi).s_qf_names[PRJQUOTA]) in is_journalled_quota()