Lines Matching refs:sbi
32 #define f2fs_bug_on(sbi, condition) BUG_ON(condition)
34 #define f2fs_bug_on(sbi, condition) \
38 set_sbi_flag(sbi, SBI_NEED_FSCK); \
109 #define F2FS_OPTION(sbi) ((sbi)->mount_opt)
110 #define clear_opt(sbi, option) (F2FS_OPTION(sbi).opt &= ~F2FS_MOUNT_##option)
111 #define set_opt(sbi, option) (F2FS_OPTION(sbi).opt |= F2FS_MOUNT_##option)
112 #define test_opt(sbi, option) (F2FS_OPTION(sbi).opt & F2FS_MOUNT_##option)
178 #define F2FS_HAS_FEATURE(sbi, mask) __F2FS_HAS_FEATURE(sbi->raw_super, mask)
179 #define F2FS_SET_FEATURE(sbi, mask) \
180 (sbi->raw_super->feature |= cpu_to_le32(mask))
181 #define F2FS_CLEAR_FEATURE(sbi, mask) \
182 (sbi->raw_super->feature &= ~cpu_to_le32(mask))
207 #define MAX_DISCARD_BLOCKS(sbi) BLKS_PER_SEC(sbi)
585 struct list_head list; /* node in global extent list of sbi */
594 struct list_head list; /* to be used by sbi->zombie_list */
1127 struct f2fs_sb_info *sbi; /* f2fs_sb_info pointer */
1160 struct f2fs_sb_info *sbi; /* f2fs superblock */
1171 #define FDEV(i) (sbi->devs[i])
1396 unsigned long s_flag; /* flags for sbi */
1611 #define f2fs_show_injection_info(sbi, type) \
1613 KERN_INFO, sbi->sb->s_id, \
1616 static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type)
1618 struct f2fs_fault_info *ffi = &F2FS_OPTION(sbi).fault_info;
1634 #define f2fs_show_injection_info(sbi, type) do { } while (0)
1635 static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type)
1643 * - For a single regular disk volume, sbi->s_ndevs is 0.
1644 * - For a single zoned disk volume, sbi->s_ndevs is 1.
1645 * - For a multi-device volume, sbi->s_ndevs is always 2 or more.
1647 static inline bool f2fs_is_multi_device(struct f2fs_sb_info *sbi)
1649 return sbi->s_ndevs > 1;
1659 static inline void f2fs_update_time(struct f2fs_sb_info *sbi, int type)
1663 sbi->last_time[type] = now;
1667 sbi->last_time[DISCARD_TIME] = now;
1668 sbi->last_time[GC_TIME] = now;
1672 static inline bool f2fs_time_over(struct f2fs_sb_info *sbi, int type)
1674 unsigned long interval = sbi->interval_time[type] * HZ;
1676 return time_after(jiffies, sbi->last_time[type] + interval);
1679 static inline unsigned int f2fs_time_to_wait(struct f2fs_sb_info *sbi,
1682 unsigned long interval = sbi->interval_time[type] * HZ;
1686 delta = (sbi->last_time[type] + interval) - jiffies;
1696 static inline u32 __f2fs_crc32(struct f2fs_sb_info *sbi, u32 crc,
1705 BUG_ON(crypto_shash_descsize(sbi->s_chksum_driver) != sizeof(desc.ctx));
1707 desc.shash.tfm = sbi->s_chksum_driver;
1716 static inline u32 f2fs_crc32(struct f2fs_sb_info *sbi, const void *address,
1719 return __f2fs_crc32(sbi, F2FS_SUPER_MAGIC, address, length);
1722 static inline bool f2fs_crc_valid(struct f2fs_sb_info *sbi, __u32 blk_crc,
1725 return f2fs_crc32(sbi, buf, buf_size) == blk_crc;
1728 static inline u32 f2fs_chksum(struct f2fs_sb_info *sbi, u32 crc,
1731 return __f2fs_crc32(sbi, crc, address, length);
1759 static inline struct f2fs_super_block *F2FS_RAW_SUPER(struct f2fs_sb_info *sbi)
1761 return (struct f2fs_super_block *)(sbi->raw_super);
1764 static inline struct f2fs_checkpoint *F2FS_CKPT(struct f2fs_sb_info *sbi)
1766 return (struct f2fs_checkpoint *)(sbi->ckpt);
1779 static inline struct f2fs_nm_info *NM_I(struct f2fs_sb_info *sbi)
1781 return (struct f2fs_nm_info *)(sbi->nm_info);
1784 static inline struct f2fs_sm_info *SM_I(struct f2fs_sb_info *sbi)
1786 return (struct f2fs_sm_info *)(sbi->sm_info);
1789 static inline struct sit_info *SIT_I(struct f2fs_sb_info *sbi)
1791 return (struct sit_info *)(SM_I(sbi)->sit_info);
1794 static inline struct free_segmap_info *FREE_I(struct f2fs_sb_info *sbi)
1796 return (struct free_segmap_info *)(SM_I(sbi)->free_info);
1799 static inline struct dirty_seglist_info *DIRTY_I(struct f2fs_sb_info *sbi)
1801 return (struct dirty_seglist_info *)(SM_I(sbi)->dirty_info);
1804 static inline struct address_space *META_MAPPING(struct f2fs_sb_info *sbi)
1806 return sbi->meta_inode->i_mapping;
1809 static inline struct address_space *NODE_MAPPING(struct f2fs_sb_info *sbi)
1811 return sbi->node_inode->i_mapping;
1814 static inline bool is_sbi_flag_set(struct f2fs_sb_info *sbi, unsigned int type)
1816 return test_bit(type, &sbi->s_flag);
1819 static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
1821 set_bit(type, &sbi->s_flag);
1824 static inline void clear_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
1826 clear_bit(type, &sbi->s_flag);
1854 static inline bool is_set_ckpt_flags(struct f2fs_sb_info *sbi, unsigned int f)
1856 return __is_set_ckpt_flags(F2FS_CKPT(sbi), f);
1868 static inline void set_ckpt_flags(struct f2fs_sb_info *sbi, unsigned int f)
1872 spin_lock_irqsave(&sbi->cp_lock, flags);
1873 __set_ckpt_flags(F2FS_CKPT(sbi), f);
1874 spin_unlock_irqrestore(&sbi->cp_lock, flags);
1886 static inline void clear_ckpt_flags(struct f2fs_sb_info *sbi, unsigned int f)
1890 spin_lock_irqsave(&sbi->cp_lock, flags);
1891 __clear_ckpt_flags(F2FS_CKPT(sbi), f);
1892 spin_unlock_irqrestore(&sbi->cp_lock, flags);
1895 static inline void disable_nat_bits(struct f2fs_sb_info *sbi, bool lock)
1902 * set_sbi_flag(sbi, SBI_NEED_FSCK). But it may give huge cost,
1907 spin_lock_irqsave(&sbi->cp_lock, flags);
1908 __clear_ckpt_flags(F2FS_CKPT(sbi), CP_NAT_BITS_FLAG);
1909 nat_bits = NM_I(sbi)->nat_bits;
1910 NM_I(sbi)->nat_bits = NULL;
1912 spin_unlock_irqrestore(&sbi->cp_lock, flags);
1917 static inline bool enabled_nat_bits(struct f2fs_sb_info *sbi,
1920 bool set = is_set_ckpt_flags(sbi, CP_NAT_BITS_FLAG);
1925 static inline void f2fs_lock_op(struct f2fs_sb_info *sbi)
1927 down_read(&sbi->cp_rwsem);
1930 static inline int f2fs_trylock_op(struct f2fs_sb_info *sbi)
1932 return down_read_trylock(&sbi->cp_rwsem);
1935 static inline void f2fs_unlock_op(struct f2fs_sb_info *sbi)
1937 up_read(&sbi->cp_rwsem);
1940 static inline void f2fs_lock_all(struct f2fs_sb_info *sbi)
1942 down_write(&sbi->cp_rwsem);
1945 static inline void f2fs_unlock_all(struct f2fs_sb_info *sbi)
1947 up_write(&sbi->cp_rwsem);
1950 static inline int __get_cp_reason(struct f2fs_sb_info *sbi)
1954 if (test_opt(sbi, FASTBOOT))
1956 if (is_sbi_flag_set(sbi, SBI_IS_CLOSE))
1966 static inline bool __exist_node_summaries(struct f2fs_sb_info *sbi)
1968 return (is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG) ||
1969 is_set_ckpt_flags(sbi, CP_FASTBOOT_FLAG));
1987 static inline bool __allow_reserved_blocks(struct f2fs_sb_info *sbi,
1992 if (!test_opt(sbi, RESERVE_ROOT))
1996 if (uid_eq(F2FS_OPTION(sbi).s_resuid, current_fsuid()))
1998 if (!gid_eq(F2FS_OPTION(sbi).s_resgid, GLOBAL_ROOT_GID) &&
1999 in_group_p(F2FS_OPTION(sbi).s_resgid))
2007 static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
2018 if (time_to_inject(sbi, FAULT_BLOCK)) {
2019 f2fs_show_injection_info(sbi, FAULT_BLOCK);
2028 percpu_counter_add(&sbi->alloc_valid_block_count, (*count));
2030 spin_lock(&sbi->stat_lock);
2031 sbi->total_valid_block_count += (block_t)(*count);
2032 avail_user_block_count = sbi->user_block_count -
2033 sbi->current_reserved_blocks;
2035 if (!__allow_reserved_blocks(sbi, inode, true))
2036 avail_user_block_count -= F2FS_OPTION(sbi).root_reserved_blocks;
2038 if (F2FS_IO_ALIGNED(sbi))
2039 avail_user_block_count -= sbi->blocks_per_seg *
2040 SM_I(sbi)->additional_reserved_segments;
2042 if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
2043 if (avail_user_block_count > sbi->unusable_block_count)
2044 avail_user_block_count -= sbi->unusable_block_count;
2048 if (unlikely(sbi->total_valid_block_count > avail_user_block_count)) {
2049 diff = sbi->total_valid_block_count - avail_user_block_count;
2054 sbi->total_valid_block_count -= diff;
2056 spin_unlock(&sbi->stat_lock);
2060 spin_unlock(&sbi->stat_lock);
2063 percpu_counter_sub(&sbi->alloc_valid_block_count, release);
2070 percpu_counter_sub(&sbi->alloc_valid_block_count, release);
2077 void f2fs_printk(struct f2fs_sb_info *sbi, const char *fmt, ...);
2079 #define f2fs_err(sbi, fmt, ...) \
2080 f2fs_printk(sbi, KERN_ERR fmt, ##__VA_ARGS__)
2081 #define f2fs_warn(sbi, fmt, ...) \
2082 f2fs_printk(sbi, KERN_WARNING fmt, ##__VA_ARGS__)
2083 #define f2fs_notice(sbi, fmt, ...) \
2084 f2fs_printk(sbi, KERN_NOTICE fmt, ##__VA_ARGS__)
2085 #define f2fs_info(sbi, fmt, ...) \
2086 f2fs_printk(sbi, KERN_INFO fmt, ##__VA_ARGS__)
2087 #define f2fs_debug(sbi, fmt, ...) \
2088 f2fs_printk(sbi, KERN_DEBUG fmt, ##__VA_ARGS__)
2090 static inline void dec_valid_block_count(struct f2fs_sb_info *sbi,
2096 spin_lock(&sbi->stat_lock);
2097 f2fs_bug_on(sbi, sbi->total_valid_block_count < (block_t) count);
2098 sbi->total_valid_block_count -= (block_t)count;
2099 if (sbi->reserved_blocks &&
2100 sbi->current_reserved_blocks < sbi->reserved_blocks)
2101 sbi->current_reserved_blocks = min(sbi->reserved_blocks,
2102 sbi->current_reserved_blocks + count);
2103 spin_unlock(&sbi->stat_lock);
2105 f2fs_warn(sbi, "Inconsistent i_blocks, ino:%lu, iblocks:%llu, sectors:%llu",
2109 set_sbi_flag(sbi, SBI_NEED_FSCK);
2115 static inline void inc_page_count(struct f2fs_sb_info *sbi, int count_type)
2117 atomic_inc(&sbi->nr_pages[count_type]);
2124 set_sbi_flag(sbi, SBI_IS_DIRTY);
2136 static inline void dec_page_count(struct f2fs_sb_info *sbi, int count_type)
2138 atomic_dec(&sbi->nr_pages[count_type]);
2154 static inline s64 get_pages(struct f2fs_sb_info *sbi, int count_type)
2156 return atomic_read(&sbi->nr_pages[count_type]);
2164 static inline int get_blocktype_secs(struct f2fs_sb_info *sbi, int block_type)
2166 unsigned int pages_per_sec = sbi->segs_per_sec * sbi->blocks_per_seg;
2167 unsigned int segs = (get_pages(sbi, block_type) + pages_per_sec - 1) >>
2168 sbi->log_blocks_per_seg;
2170 return segs / sbi->segs_per_sec;
2173 static inline block_t valid_user_blocks(struct f2fs_sb_info *sbi)
2175 return sbi->total_valid_block_count;
2178 static inline block_t discard_blocks(struct f2fs_sb_info *sbi)
2180 return sbi->discard_blks;
2183 static inline unsigned long __bitmap_size(struct f2fs_sb_info *sbi, int flag)
2185 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
2196 static inline block_t __cp_payload(struct f2fs_sb_info *sbi)
2198 return le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_payload);
2201 static inline void *__bitmap_ptr(struct f2fs_sb_info *sbi, int flag)
2203 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
2206 if (is_set_ckpt_flags(sbi, CP_LARGE_NAT_BITMAP_FLAG)) {
2216 if (__cp_payload(sbi) > 0) {
2228 static inline block_t __start_cp_addr(struct f2fs_sb_info *sbi)
2230 block_t start_addr = le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_blkaddr);
2232 if (sbi->cur_cp_pack == 2)
2233 start_addr += sbi->blocks_per_seg;
2237 static inline block_t __start_cp_next_addr(struct f2fs_sb_info *sbi)
2239 block_t start_addr = le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_blkaddr);
2241 if (sbi->cur_cp_pack == 1)
2242 start_addr += sbi->blocks_per_seg;
2246 static inline void __set_cp_next_pack(struct f2fs_sb_info *sbi)
2248 sbi->cur_cp_pack = (sbi->cur_cp_pack == 1) ? 2 : 1;
2251 static inline block_t __start_sum_addr(struct f2fs_sb_info *sbi)
2253 return le32_to_cpu(F2FS_CKPT(sbi)->cp_pack_start_sum);
2256 static inline int inc_valid_node_count(struct f2fs_sb_info *sbi,
2275 if (time_to_inject(sbi, FAULT_BLOCK)) {
2276 f2fs_show_injection_info(sbi, FAULT_BLOCK);
2280 spin_lock(&sbi->stat_lock);
2282 valid_block_count = sbi->total_valid_block_count +
2283 sbi->current_reserved_blocks + 1;
2285 if (!__allow_reserved_blocks(sbi, inode, false))
2286 valid_block_count += F2FS_OPTION(sbi).root_reserved_blocks;
2288 if (F2FS_IO_ALIGNED(sbi))
2289 valid_block_count += sbi->blocks_per_seg *
2290 SM_I(sbi)->additional_reserved_segments;
2292 user_block_count = sbi->user_block_count;
2293 if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
2294 user_block_count -= sbi->unusable_block_count;
2297 spin_unlock(&sbi->stat_lock);
2301 valid_node_count = sbi->total_valid_node_count + 1;
2302 if (unlikely(valid_node_count > sbi->total_node_count)) {
2303 spin_unlock(&sbi->stat_lock);
2307 sbi->total_valid_node_count++;
2308 sbi->total_valid_block_count++;
2309 spin_unlock(&sbi->stat_lock);
2318 percpu_counter_inc(&sbi->alloc_valid_block_count);
2331 static inline void dec_valid_node_count(struct f2fs_sb_info *sbi,
2334 spin_lock(&sbi->stat_lock);
2336 if (unlikely(!sbi->total_valid_block_count ||
2337 !sbi->total_valid_node_count)) {
2338 f2fs_warn(sbi, "dec_valid_node_count: inconsistent block counts, total_valid_block:%u, total_valid_node:%u",
2339 sbi->total_valid_block_count,
2340 sbi->total_valid_node_count);
2341 set_sbi_flag(sbi, SBI_NEED_FSCK);
2343 sbi->total_valid_block_count--;
2344 sbi->total_valid_node_count--;
2347 if (sbi->reserved_blocks &&
2348 sbi->current_reserved_blocks < sbi->reserved_blocks)
2349 sbi->current_reserved_blocks++;
2351 spin_unlock(&sbi->stat_lock);
2357 f2fs_warn(sbi, "dec_valid_node_count: inconsistent i_blocks, ino:%lu, iblocks:%llu",
2360 set_sbi_flag(sbi, SBI_NEED_FSCK);
2367 static inline unsigned int valid_node_count(struct f2fs_sb_info *sbi)
2369 return sbi->total_valid_node_count;
2372 static inline void inc_valid_inode_count(struct f2fs_sb_info *sbi)
2374 percpu_counter_inc(&sbi->total_valid_inode_count);
2377 static inline void dec_valid_inode_count(struct f2fs_sb_info *sbi)
2379 percpu_counter_dec(&sbi->total_valid_inode_count);
2382 static inline s64 valid_inode_count(struct f2fs_sb_info *sbi)
2384 return percpu_counter_sum_positive(&sbi->total_valid_inode_count);
2474 static inline bool is_inflight_io(struct f2fs_sb_info *sbi, int type)
2476 if (get_pages(sbi, F2FS_RD_DATA) || get_pages(sbi, F2FS_RD_NODE) ||
2477 get_pages(sbi, F2FS_RD_META) || get_pages(sbi, F2FS_WB_DATA) ||
2478 get_pages(sbi, F2FS_WB_CP_DATA) ||
2479 get_pages(sbi, F2FS_DIO_READ) ||
2480 get_pages(sbi, F2FS_DIO_WRITE))
2483 if (type != DISCARD_TIME && SM_I(sbi) && SM_I(sbi)->dcc_info &&
2484 atomic_read(&SM_I(sbi)->dcc_info->queued_discard))
2487 if (SM_I(sbi) && SM_I(sbi)->fcc_info &&
2488 atomic_read(&SM_I(sbi)->fcc_info->queued_flush))
2493 static inline bool is_idle(struct f2fs_sb_info *sbi, int type)
2495 if (sbi->gc_mode == GC_URGENT_HIGH)
2498 if (is_inflight_io(sbi, type))
2501 if (sbi->gc_mode == GC_URGENT_LOW &&
2505 return f2fs_time_over(sbi, type);
2964 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2966 spin_lock(&sbi->inode_lock[DIRTY_META]);
2968 spin_unlock(&sbi->inode_lock[DIRTY_META]);
2991 static inline bool f2fs_cp_error(struct f2fs_sb_info *sbi)
2993 return is_set_ckpt_flags(sbi, CP_ERROR_FLAG);
3009 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3011 if (!test_opt(sbi, EXTENT_CACHE) ||
3020 if (list_empty(&sbi->s_list))
3026 static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi,
3029 if (time_to_inject(sbi, FAULT_KMALLOC)) {
3030 f2fs_show_injection_info(sbi, FAULT_KMALLOC);
3037 static inline void *f2fs_kzalloc(struct f2fs_sb_info *sbi,
3040 return f2fs_kmalloc(sbi, size, flags | __GFP_ZERO);
3043 static inline void *f2fs_kvmalloc(struct f2fs_sb_info *sbi,
3046 if (time_to_inject(sbi, FAULT_KVMALLOC)) {
3047 f2fs_show_injection_info(sbi, FAULT_KVMALLOC);
3054 static inline void *f2fs_kvzalloc(struct f2fs_sb_info *sbi,
3057 return f2fs_kvmalloc(sbi, size, flags | __GFP_ZERO);
3089 static inline void f2fs_reset_iostat(struct f2fs_sb_info *sbi)
3093 spin_lock(&sbi->iostat_lock);
3095 sbi->rw_iostat[i] = 0;
3096 sbi->prev_rw_iostat[i] = 0;
3098 spin_unlock(&sbi->iostat_lock);
3101 extern void f2fs_record_iostat(struct f2fs_sb_info *sbi);
3103 static inline void f2fs_update_iostat(struct f2fs_sb_info *sbi,
3106 if (!sbi->iostat_enable)
3108 spin_lock(&sbi->iostat_lock);
3109 sbi->rw_iostat[type] += io_bytes;
3112 sbi->rw_iostat[APP_BUFFERED_IO] =
3113 sbi->rw_iostat[APP_WRITE_IO] -
3114 sbi->rw_iostat[APP_DIRECT_IO];
3117 sbi->rw_iostat[APP_BUFFERED_READ_IO] =
3118 sbi->rw_iostat[APP_READ_IO] -
3119 sbi->rw_iostat[APP_DIRECT_READ_IO];
3120 spin_unlock(&sbi->iostat_lock);
3122 f2fs_record_iostat(sbi);
3125 static inline block_t fs_free_space_threshold(struct f2fs_sb_info *sbi)
3127 return (block_t)(SM_I(sbi)->main_segments * sbi->blocks_per_seg *
3131 static inline block_t device_free_space_threshold(struct f2fs_sb_info *sbi)
3133 return (block_t)(SM_I(sbi)->main_segments * sbi->blocks_per_seg *
3137 #define __is_large_section(sbi) ((sbi)->segs_per_sec > 1)
3141 bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
3143 static inline void verify_blkaddr(struct f2fs_sb_info *sbi,
3146 if (!f2fs_is_valid_blkaddr(sbi, blkaddr, type)) {
3147 f2fs_err(sbi, "invalid blkaddr: %u, type: %d, run fsck to fix.",
3149 f2fs_bug_on(sbi, 1);
3198 bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct page *page);
3199 void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct page *page);
3202 int f2fs_try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink);
3212 int f2fs_update_extension_list(struct f2fs_sb_info *sbi, const char *name,
3278 int f2fs_enable_quota_files(struct f2fs_sb_info *sbi, bool rdonly);
3281 int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover);
3283 int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi);
3296 int f2fs_check_nid_range(struct f2fs_sb_info *sbi, nid_t nid);
3297 bool f2fs_available_free_memory(struct f2fs_sb_info *sbi, int type);
3298 bool f2fs_in_warm_node_list(struct f2fs_sb_info *sbi, struct page *page);
3299 void f2fs_init_fsync_node_info(struct f2fs_sb_info *sbi);
3300 void f2fs_del_fsync_node_entry(struct f2fs_sb_info *sbi, struct page *page);
3301 void f2fs_reset_fsync_node_info(struct f2fs_sb_info *sbi);
3302 int f2fs_need_dentry_mark(struct f2fs_sb_info *sbi, nid_t nid);
3303 bool f2fs_is_checkpointed_node(struct f2fs_sb_info *sbi, nid_t nid);
3304 bool f2fs_need_inode_block_update(struct f2fs_sb_info *sbi, nid_t ino);
3305 int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid,
3311 int f2fs_wait_on_node_pages_writeback(struct f2fs_sb_info *sbi,
3316 void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid);
3317 struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid);
3320 void f2fs_flush_inline_data(struct f2fs_sb_info *sbi);
3321 int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
3324 int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
3327 int f2fs_build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount);
3328 bool f2fs_alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid);
3329 void f2fs_alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid);
3330 void f2fs_alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid);
3331 int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink);
3334 int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct page *page);
3335 int f2fs_restore_node_summary(struct f2fs_sb_info *sbi,
3337 int f2fs_flush_nat_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc);
3338 int f2fs_build_node_manager(struct f2fs_sb_info *sbi);
3339 void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi);
3350 bool f2fs_need_SSR(struct f2fs_sb_info *sbi);
3352 void f2fs_drop_inmem_pages_all(struct f2fs_sb_info *sbi, bool gc_failure);
3356 void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need);
3357 void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi, bool from_bg);
3358 int f2fs_issue_flush(struct f2fs_sb_info *sbi, nid_t ino);
3359 int f2fs_create_flush_cmd_control(struct f2fs_sb_info *sbi);
3360 int f2fs_flush_device_cache(struct f2fs_sb_info *sbi);
3361 void f2fs_destroy_flush_cmd_control(struct f2fs_sb_info *sbi, bool free);
3362 void f2fs_invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr);
3363 bool f2fs_is_checkpointed_data(struct f2fs_sb_info *sbi, block_t blkaddr);
3364 void f2fs_drop_discard_cmd(struct f2fs_sb_info *sbi);
3365 void f2fs_stop_discard_thread(struct f2fs_sb_info *sbi);
3366 bool f2fs_issue_discard_timeout(struct f2fs_sb_info *sbi);
3367 void f2fs_clear_prefree_segments(struct f2fs_sb_info *sbi,
3369 void f2fs_dirty_to_prefree(struct f2fs_sb_info *sbi);
3370 block_t f2fs_get_unusable_blocks(struct f2fs_sb_info *sbi);
3371 int f2fs_disable_cp_again(struct f2fs_sb_info *sbi, block_t unusable);
3372 void f2fs_release_discard_addrs(struct f2fs_sb_info *sbi);
3373 int f2fs_npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra);
3374 bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno);
3375 void f2fs_init_inmem_curseg(struct f2fs_sb_info *sbi);
3376 void f2fs_save_inmem_curseg(struct f2fs_sb_info *sbi);
3377 void f2fs_restore_inmem_curseg(struct f2fs_sb_info *sbi);
3378 void f2fs_get_new_segment(struct f2fs_sb_info *sbi,
3380 void f2fs_allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
3382 void f2fs_allocate_new_section(struct f2fs_sb_info *sbi, int type);
3383 void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi);
3384 int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range);
3385 bool f2fs_exist_trim_candidates(struct f2fs_sb_info *sbi,
3387 struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno);
3388 void f2fs_update_meta_page(struct f2fs_sb_info *sbi, void *src,
3390 void f2fs_do_write_meta_page(struct f2fs_sb_info *sbi, struct page *page,
3396 void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
3400 void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn,
3404 void f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
3413 void f2fs_write_data_summaries(struct f2fs_sb_info *sbi, block_t start_blk);
3414 void f2fs_write_node_summaries(struct f2fs_sb_info *sbi, block_t start_blk);
3417 void f2fs_flush_sit_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc);
3418 int f2fs_fix_curseg_write_pointer(struct f2fs_sb_info *sbi);
3419 int f2fs_check_write_pointer(struct f2fs_sb_info *sbi);
3420 int f2fs_build_segment_manager(struct f2fs_sb_info *sbi);
3421 void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi);
3425 enum rw_hint f2fs_io_type_to_rw_hint(struct f2fs_sb_info *sbi,
3427 unsigned int f2fs_usable_segs_in_sec(struct f2fs_sb_info *sbi,
3429 unsigned int f2fs_usable_blks_in_seg(struct f2fs_sb_info *sbi,
3435 void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io);
3436 struct page *f2fs_grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index);
3437 struct page *f2fs_get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index);
3438 struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index);
3439 struct page *f2fs_get_tmp_page(struct f2fs_sb_info *sbi, pgoff_t index);
3440 bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
3442 int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
3444 void f2fs_ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index);
3445 long f2fs_sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type,
3447 void f2fs_add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type);
3448 void f2fs_remove_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type);
3449 void f2fs_release_ino_entry(struct f2fs_sb_info *sbi, bool all);
3450 bool f2fs_exist_written_data(struct f2fs_sb_info *sbi, nid_t ino, int mode);
3451 void f2fs_set_dirty_device(struct f2fs_sb_info *sbi, nid_t ino,
3453 bool f2fs_is_dirty_device(struct f2fs_sb_info *sbi, nid_t ino,
3455 int f2fs_sync_inode_meta(struct f2fs_sb_info *sbi);
3456 int f2fs_acquire_orphan_inode(struct f2fs_sb_info *sbi);
3457 void f2fs_release_orphan_inode(struct f2fs_sb_info *sbi);
3459 void f2fs_remove_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino);
3460 int f2fs_recover_orphan_inodes(struct f2fs_sb_info *sbi);
3461 int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi);
3464 int f2fs_sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type,
3466 void f2fs_wait_on_all_pages(struct f2fs_sb_info *sbi, int type);
3467 int f2fs_write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc);
3468 void f2fs_init_ino_entry_info(struct f2fs_sb_info *sbi);
3477 struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool noio);
3480 void f2fs_submit_bio(struct f2fs_sb_info *sbi,
3482 void f2fs_submit_merged_write(struct f2fs_sb_info *sbi, enum page_type type);
3483 void f2fs_submit_merged_write_cond(struct f2fs_sb_info *sbi,
3486 void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
3488 void f2fs_flush_merged_writes(struct f2fs_sb_info *sbi);
3492 struct block_device *f2fs_target_device(struct f2fs_sb_info *sbi,
3494 int f2fs_target_device_index(struct f2fs_sb_info *sbi, block_t blkaddr);
3510 void f2fs_do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock);
3534 int f2fs_init_post_read_wq(struct f2fs_sb_info *sbi);
3535 void f2fs_destroy_post_read_wq(struct f2fs_sb_info *sbi);
3540 int f2fs_start_gc_thread(struct f2fs_sb_info *sbi);
3541 void f2fs_stop_gc_thread(struct f2fs_sb_info *sbi);
3543 int f2fs_gc(struct f2fs_sb_info *sbi, bool sync, bool background, bool force,
3545 void f2fs_build_gc_manager(struct f2fs_sb_info *sbi);
3553 int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only);
3554 bool f2fs_space_for_roll_forward(struct f2fs_sb_info *sbi);
3564 struct f2fs_sb_info *sbi;
3614 static inline struct f2fs_stat_info *F2FS_STAT(struct f2fs_sb_info *sbi)
3616 return (struct f2fs_stat_info *)sbi->stat_info;
3623 #define stat_io_skip_bggc_count(sbi) ((sbi)->io_skip_bggc++)
3624 #define stat_other_skip_bggc_count(sbi) ((sbi)->other_skip_bggc++)
3625 #define stat_inc_dirty_inode(sbi, type) ((sbi)->ndirty_inode[type]++)
3626 #define stat_dec_dirty_inode(sbi, type) ((sbi)->ndirty_inode[type]--)
3627 #define stat_inc_total_hit(sbi) (atomic64_inc(&(sbi)->total_hit_ext))
3628 #define stat_inc_rbtree_node_hit(sbi) (atomic64_inc(&(sbi)->read_hit_rbtree))
3629 #define stat_inc_largest_node_hit(sbi) (atomic64_inc(&(sbi)->read_hit_largest))
3630 #define stat_inc_cached_node_hit(sbi) (atomic64_inc(&(sbi)->read_hit_cached))
3675 #define stat_inc_meta_count(sbi, blkaddr) \
3677 if (blkaddr < SIT_I(sbi)->sit_base_addr) \
3678 atomic_inc(&(sbi)->meta_count[META_CP]); \
3679 else if (blkaddr < NM_I(sbi)->nat_blkaddr) \
3680 atomic_inc(&(sbi)->meta_count[META_SIT]); \
3681 else if (blkaddr < SM_I(sbi)->ssa_blkaddr) \
3682 atomic_inc(&(sbi)->meta_count[META_NAT]); \
3683 else if (blkaddr < SM_I(sbi)->main_blkaddr) \
3684 atomic_inc(&(sbi)->meta_count[META_SSA]); \
3686 #define stat_inc_seg_type(sbi, curseg) \
3687 ((sbi)->segment_count[(curseg)->alloc_type]++)
3688 #define stat_inc_block_count(sbi, curseg) \
3689 ((sbi)->block_count[(curseg)->alloc_type]++)
3690 #define stat_inc_inplace_blocks(sbi) \
3691 (atomic_inc(&(sbi)->inplace_count))
3710 #define stat_inc_seg_count(sbi, type, gc_type) \
3712 struct f2fs_stat_info *si = F2FS_STAT(sbi); \
3726 #define stat_inc_data_blk_count(sbi, blks, gc_type) \
3728 struct f2fs_stat_info *si = F2FS_STAT(sbi); \
3734 #define stat_inc_node_blk_count(sbi, blks, gc_type) \
3736 struct f2fs_stat_info *si = F2FS_STAT(sbi); \
3742 int f2fs_build_stats(struct f2fs_sb_info *sbi);
3743 void f2fs_destroy_stats(struct f2fs_sb_info *sbi);
3746 void f2fs_update_sit_info(struct f2fs_sb_info *sbi);
3752 #define stat_io_skip_bggc_count(sbi) do { } while (0)
3753 #define stat_other_skip_bggc_count(sbi) do { } while (0)
3754 #define stat_inc_dirty_inode(sbi, type) do { } while (0)
3755 #define stat_dec_dirty_inode(sbi, type) do { } while (0)
3756 #define stat_inc_total_hit(sbi) do { } while (0)
3757 #define stat_inc_rbtree_node_hit(sbi) do { } while (0)
3758 #define stat_inc_largest_node_hit(sbi) do { } while (0)
3759 #define stat_inc_cached_node_hit(sbi) do { } while (0)
3776 #define stat_inc_meta_count(sbi, blkaddr) do { } while (0)
3777 #define stat_inc_seg_type(sbi, curseg) do { } while (0)
3778 #define stat_inc_block_count(sbi, curseg) do { } while (0)
3779 #define stat_inc_inplace_blocks(sbi) do { } while (0)
3780 #define stat_inc_seg_count(sbi, type, gc_type) do { } while (0)
3782 #define stat_inc_data_blk_count(sbi, blks, gc_type) do { } while (0)
3783 #define stat_inc_node_blk_count(sbi, blks, gc_type) do { } while (0)
3785 static inline int f2fs_build_stats(struct f2fs_sb_info *sbi) { return 0; }
3786 static inline void f2fs_destroy_stats(struct f2fs_sb_info *sbi) { }
3789 static inline void f2fs_update_sit_info(struct f2fs_sb_info *sbi) {}
3846 void f2fs_join_shrinker(struct f2fs_sb_info *sbi);
3847 void f2fs_leave_shrinker(struct f2fs_sb_info *sbi);
3854 struct rb_node **f2fs_lookup_rb_tree_ext(struct f2fs_sb_info *sbi,
3858 struct rb_node **f2fs_lookup_rb_tree_for_insert(struct f2fs_sb_info *sbi,
3867 bool f2fs_check_rb_tree_consistence(struct f2fs_sb_info *sbi,
3869 unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink);
3879 void f2fs_init_extent_cache_info(struct f2fs_sb_info *sbi);
3888 int f2fs_register_sysfs(struct f2fs_sb_info *sbi);
3889 void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi);
3953 void f2fs_init_compress_info(struct f2fs_sb_info *sbi);
3954 int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi);
3955 void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi);
3974 static inline int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi) { return 0; }
3975 static inline void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi) { }
3982 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3985 F2FS_OPTION(sbi).compress_algorithm;
3987 F2FS_OPTION(sbi).compress_log_size;
4013 static inline int f2fs_sb_has_##name(struct f2fs_sb_info *sbi) \
4015 return F2FS_HAS_FEATURE(sbi, F2FS_FEATURE_##flagname); \
4033 static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi,
4036 unsigned int zno = blkaddr >> sbi->log_blocks_per_blkz;
4042 static inline bool f2fs_hw_should_discard(struct f2fs_sb_info *sbi)
4044 return f2fs_sb_has_blkzoned(sbi);
4053 static inline bool f2fs_hw_support_discard(struct f2fs_sb_info *sbi)
4057 if (!f2fs_is_multi_device(sbi))
4058 return f2fs_bdev_support_discard(sbi->sb->s_bdev);
4060 for (i = 0; i < sbi->s_ndevs; i++)
4066 static inline bool f2fs_realtime_discard_enable(struct f2fs_sb_info *sbi)
4068 return (test_opt(sbi, DISCARD) && f2fs_hw_support_discard(sbi)) ||
4069 f2fs_hw_should_discard(sbi);
4072 static inline bool f2fs_hw_is_readonly(struct f2fs_sb_info *sbi)
4076 if (!f2fs_is_multi_device(sbi))
4077 return bdev_read_only(sbi->sb->s_bdev);
4079 for (i = 0; i < sbi->s_ndevs; i++)
4085 static inline bool f2fs_lfs_mode(struct f2fs_sb_info *sbi)
4087 return F2FS_OPTION(sbi).fs_mode == FS_MODE_LFS;
4133 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
4136 return (f2fs_lfs_mode(sbi) && (rw == WRITE) &&
4143 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
4148 if (f2fs_is_multi_device(sbi))
4154 if (f2fs_sb_has_blkzoned(sbi))
4156 if (f2fs_lfs_mode(sbi) && (rw == WRITE)) {
4159 if (F2FS_IO_ALIGNED(sbi))
4170 extern int f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned long rate,
4173 static int f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned long rate,
4180 static inline bool is_journalled_quota(struct f2fs_sb_info *sbi)
4183 if (f2fs_sb_has_quota_ino(sbi))
4185 if (F2FS_OPTION(sbi).s_qf_names[USRQUOTA] ||
4186 F2FS_OPTION(sbi).s_qf_names[GRPQUOTA] ||
4187 F2FS_OPTION(sbi).s_qf_names[PRJQUOTA])