Lines Matching defs:sbi
35 #define f2fs_bug_on(sbi, condition) BUG_ON(condition)
37 #define f2fs_bug_on(sbi, condition) \
40 set_sbi_flag(sbi, SBI_NEED_FSCK); \
117 #define F2FS_OPTION(sbi) ((sbi)->mount_opt)
118 #define clear_opt(sbi, option) (F2FS_OPTION(sbi).opt &= ~F2FS_MOUNT_##option)
119 #define set_opt(sbi, option) (F2FS_OPTION(sbi).opt |= F2FS_MOUNT_##option)
120 #define test_opt(sbi, option) (F2FS_OPTION(sbi).opt & F2FS_MOUNT_##option)
212 #define F2FS_HAS_FEATURE(sbi, mask) __F2FS_HAS_FEATURE(sbi->raw_super, mask)
655 struct list_head list; /* node in global extent list of sbi */
664 struct list_head list; /* to be used by sbi->zombie_list */
1188 struct f2fs_sb_info *sbi; /* f2fs_sb_info pointer */
1222 struct f2fs_sb_info *sbi; /* f2fs superblock */
1238 #define FDEV(i) (sbi->devs[i])
1547 unsigned long s_flag; /* flags for sbi */
1812 #define time_to_inject(sbi, type) __time_to_inject(sbi, type, __func__, \
1814 static inline bool __time_to_inject(struct f2fs_sb_info *sbi, int type,
1817 struct f2fs_fault_info *ffi = &F2FS_OPTION(sbi).fault_info;
1829 KERN_INFO, sbi->sb->s_id, f2fs_fault_name[type],
1836 static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type)
1844 * - For a single regular disk volume, sbi->s_ndevs is 0.
1845 * - For a single zoned disk volume, sbi->s_ndevs is 1.
1846 * - For a multi-device volume, sbi->s_ndevs is always 2 or more.
1848 static inline bool f2fs_is_multi_device(struct f2fs_sb_info *sbi)
1850 return sbi->s_ndevs > 1;
1853 static inline void f2fs_update_time(struct f2fs_sb_info *sbi, int type)
1857 sbi->last_time[type] = now;
1861 sbi->last_time[DISCARD_TIME] = now;
1862 sbi->last_time[GC_TIME] = now;
1866 static inline bool f2fs_time_over(struct f2fs_sb_info *sbi, int type)
1868 unsigned long interval = sbi->interval_time[type] * HZ;
1870 return time_after(jiffies, sbi->last_time[type] + interval);
1873 static inline unsigned int f2fs_time_to_wait(struct f2fs_sb_info *sbi,
1876 unsigned long interval = sbi->interval_time[type] * HZ;
1880 delta = (sbi->last_time[type] + interval) - jiffies;
1890 static inline u32 __f2fs_crc32(struct f2fs_sb_info *sbi, u32 crc,
1899 BUG_ON(crypto_shash_descsize(sbi->s_chksum_driver) != sizeof(desc.ctx));
1901 desc.shash.tfm = sbi->s_chksum_driver;
1910 static inline u32 f2fs_crc32(struct f2fs_sb_info *sbi, const void *address,
1913 return __f2fs_crc32(sbi, F2FS_SUPER_MAGIC, address, length);
1916 static inline bool f2fs_crc_valid(struct f2fs_sb_info *sbi, __u32 blk_crc,
1919 return f2fs_crc32(sbi, buf, buf_size) == blk_crc;
1922 static inline u32 f2fs_chksum(struct f2fs_sb_info *sbi, u32 crc,
1925 return __f2fs_crc32(sbi, crc, address, length);
1953 static inline struct f2fs_super_block *F2FS_RAW_SUPER(struct f2fs_sb_info *sbi)
1955 return (struct f2fs_super_block *)(sbi->raw_super);
1958 static inline struct f2fs_checkpoint *F2FS_CKPT(struct f2fs_sb_info *sbi)
1960 return (struct f2fs_checkpoint *)(sbi->ckpt);
1973 static inline struct f2fs_nm_info *NM_I(struct f2fs_sb_info *sbi)
1975 return (struct f2fs_nm_info *)(sbi->nm_info);
1978 static inline struct f2fs_sm_info *SM_I(struct f2fs_sb_info *sbi)
1980 return (struct f2fs_sm_info *)(sbi->sm_info);
1983 static inline struct sit_info *SIT_I(struct f2fs_sb_info *sbi)
1985 return (struct sit_info *)(SM_I(sbi)->sit_info);
1988 static inline struct free_segmap_info *FREE_I(struct f2fs_sb_info *sbi)
1990 return (struct free_segmap_info *)(SM_I(sbi)->free_info);
1993 static inline struct dirty_seglist_info *DIRTY_I(struct f2fs_sb_info *sbi)
1995 return (struct dirty_seglist_info *)(SM_I(sbi)->dirty_info);
1998 static inline struct address_space *META_MAPPING(struct f2fs_sb_info *sbi)
2000 return sbi->meta_inode->i_mapping;
2003 static inline struct address_space *NODE_MAPPING(struct f2fs_sb_info *sbi)
2005 return sbi->node_inode->i_mapping;
2008 static inline bool is_sbi_flag_set(struct f2fs_sb_info *sbi, unsigned int type)
2010 return test_bit(type, &sbi->s_flag);
2013 static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
2015 set_bit(type, &sbi->s_flag);
2018 static inline void clear_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
2020 clear_bit(type, &sbi->s_flag);
2048 static inline bool is_set_ckpt_flags(struct f2fs_sb_info *sbi, unsigned int f)
2050 return __is_set_ckpt_flags(F2FS_CKPT(sbi), f);
2062 static inline void set_ckpt_flags(struct f2fs_sb_info *sbi, unsigned int f)
2066 spin_lock_irqsave(&sbi->cp_lock, flags);
2067 __set_ckpt_flags(F2FS_CKPT(sbi), f);
2068 spin_unlock_irqrestore(&sbi->cp_lock, flags);
2080 static inline void clear_ckpt_flags(struct f2fs_sb_info *sbi, unsigned int f)
2084 spin_lock_irqsave(&sbi->cp_lock, flags);
2085 __clear_ckpt_flags(F2FS_CKPT(sbi), f);
2086 spin_unlock_irqrestore(&sbi->cp_lock, flags);
2167 static inline void f2fs_lock_op(struct f2fs_sb_info *sbi)
2169 f2fs_down_read(&sbi->cp_rwsem);
2172 static inline int f2fs_trylock_op(struct f2fs_sb_info *sbi)
2174 if (time_to_inject(sbi, FAULT_LOCK_OP))
2176 return f2fs_down_read_trylock(&sbi->cp_rwsem);
2179 static inline void f2fs_unlock_op(struct f2fs_sb_info *sbi)
2181 f2fs_up_read(&sbi->cp_rwsem);
2184 static inline void f2fs_lock_all(struct f2fs_sb_info *sbi)
2186 f2fs_down_write(&sbi->cp_rwsem);
2189 static inline void f2fs_unlock_all(struct f2fs_sb_info *sbi)
2191 f2fs_up_write(&sbi->cp_rwsem);
2194 static inline int __get_cp_reason(struct f2fs_sb_info *sbi)
2198 if (test_opt(sbi, FASTBOOT))
2200 if (is_sbi_flag_set(sbi, SBI_IS_CLOSE))
2210 static inline bool __exist_node_summaries(struct f2fs_sb_info *sbi)
2212 return (is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG) ||
2213 is_set_ckpt_flags(sbi, CP_FASTBOOT_FLAG));
2231 static inline bool __allow_reserved_blocks(struct f2fs_sb_info *sbi,
2236 if (!test_opt(sbi, RESERVE_ROOT))
2240 if (uid_eq(F2FS_OPTION(sbi).s_resuid, current_fsuid()))
2242 if (!gid_eq(F2FS_OPTION(sbi).s_resgid, GLOBAL_ROOT_GID) &&
2243 in_group_p(F2FS_OPTION(sbi).s_resgid))
2251 static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
2262 if (time_to_inject(sbi, FAULT_BLOCK)) {
2271 percpu_counter_add(&sbi->alloc_valid_block_count, (*count));
2273 spin_lock(&sbi->stat_lock);
2274 sbi->total_valid_block_count += (block_t)(*count);
2275 avail_user_block_count = sbi->user_block_count -
2276 sbi->current_reserved_blocks;
2278 if (!__allow_reserved_blocks(sbi, inode, true))
2279 avail_user_block_count -= F2FS_OPTION(sbi).root_reserved_blocks;
2281 if (F2FS_IO_ALIGNED(sbi))
2282 avail_user_block_count -= sbi->blocks_per_seg *
2283 SM_I(sbi)->additional_reserved_segments;
2285 if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
2286 if (avail_user_block_count > sbi->unusable_block_count)
2287 avail_user_block_count -= sbi->unusable_block_count;
2291 if (unlikely(sbi->total_valid_block_count > avail_user_block_count)) {
2293 spin_unlock(&sbi->stat_lock);
2297 diff = sbi->total_valid_block_count - avail_user_block_count;
2302 sbi->total_valid_block_count -= diff;
2304 spin_unlock(&sbi->stat_lock);
2308 spin_unlock(&sbi->stat_lock);
2311 percpu_counter_sub(&sbi->alloc_valid_block_count, release);
2318 percpu_counter_sub(&sbi->alloc_valid_block_count, release);
2325 void f2fs_printk(struct f2fs_sb_info *sbi, const char *fmt, ...);
2327 #define f2fs_err(sbi, fmt, ...) \
2328 f2fs_printk(sbi, KERN_ERR fmt, ##__VA_ARGS__)
2329 #define f2fs_warn(sbi, fmt, ...) \
2330 f2fs_printk(sbi, KERN_WARNING fmt, ##__VA_ARGS__)
2331 #define f2fs_notice(sbi, fmt, ...) \
2332 f2fs_printk(sbi, KERN_NOTICE fmt, ##__VA_ARGS__)
2333 #define f2fs_info(sbi, fmt, ...) \
2334 f2fs_printk(sbi, KERN_INFO fmt, ##__VA_ARGS__)
2335 #define f2fs_debug(sbi, fmt, ...) \
2336 f2fs_printk(sbi, KERN_DEBUG fmt, ##__VA_ARGS__)
2412 static inline void dec_valid_block_count(struct f2fs_sb_info *sbi,
2418 spin_lock(&sbi->stat_lock);
2419 f2fs_bug_on(sbi, sbi->total_valid_block_count < (block_t) count);
2420 sbi->total_valid_block_count -= (block_t)count;
2421 if (sbi->reserved_blocks &&
2422 sbi->current_reserved_blocks < sbi->reserved_blocks)
2423 sbi->current_reserved_blocks = min(sbi->reserved_blocks,
2424 sbi->current_reserved_blocks + count);
2425 spin_unlock(&sbi->stat_lock);
2427 f2fs_warn(sbi, "Inconsistent i_blocks, ino:%lu, iblocks:%llu, sectors:%llu",
2431 set_sbi_flag(sbi, SBI_NEED_FSCK);
2437 static inline void inc_page_count(struct f2fs_sb_info *sbi, int count_type)
2439 atomic_inc(&sbi->nr_pages[count_type]);
2446 set_sbi_flag(sbi, SBI_IS_DIRTY);
2458 static inline void dec_page_count(struct f2fs_sb_info *sbi, int count_type)
2460 atomic_dec(&sbi->nr_pages[count_type]);
2478 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2483 atomic64_inc(&sbi->current_atomic_write);
2484 current_write = atomic64_read(&sbi->current_atomic_write);
2485 if (current_write > sbi->peak_atomic_write)
2486 sbi->peak_atomic_write = current_write;
2491 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2494 atomic64_sub(fi->atomic_write_cnt, &sbi->current_atomic_write);
2498 static inline s64 get_pages(struct f2fs_sb_info *sbi, int count_type)
2500 return atomic_read(&sbi->nr_pages[count_type]);
2508 static inline int get_blocktype_secs(struct f2fs_sb_info *sbi, int block_type)
2510 unsigned int pages_per_sec = sbi->segs_per_sec * sbi->blocks_per_seg;
2511 unsigned int segs = (get_pages(sbi, block_type) + pages_per_sec - 1) >>
2512 sbi->log_blocks_per_seg;
2514 return segs / sbi->segs_per_sec;
2517 static inline block_t valid_user_blocks(struct f2fs_sb_info *sbi)
2519 return sbi->total_valid_block_count;
2522 static inline block_t discard_blocks(struct f2fs_sb_info *sbi)
2524 return sbi->discard_blks;
2527 static inline unsigned long __bitmap_size(struct f2fs_sb_info *sbi, int flag)
2529 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
2540 static inline block_t __cp_payload(struct f2fs_sb_info *sbi)
2542 return le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_payload);
2545 static inline void *__bitmap_ptr(struct f2fs_sb_info *sbi, int flag)
2547 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
2551 if (is_set_ckpt_flags(sbi, CP_LARGE_NAT_BITMAP_FLAG)) {
2561 if (__cp_payload(sbi) > 0) {
2573 static inline block_t __start_cp_addr(struct f2fs_sb_info *sbi)
2575 block_t start_addr = le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_blkaddr);
2577 if (sbi->cur_cp_pack == 2)
2578 start_addr += sbi->blocks_per_seg;
2582 static inline block_t __start_cp_next_addr(struct f2fs_sb_info *sbi)
2584 block_t start_addr = le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_blkaddr);
2586 if (sbi->cur_cp_pack == 1)
2587 start_addr += sbi->blocks_per_seg;
2591 static inline void __set_cp_next_pack(struct f2fs_sb_info *sbi)
2593 sbi->cur_cp_pack = (sbi->cur_cp_pack == 1) ? 2 : 1;
2596 static inline block_t __start_sum_addr(struct f2fs_sb_info *sbi)
2598 return le32_to_cpu(F2FS_CKPT(sbi)->cp_pack_start_sum);
2602 static inline int inc_valid_node_count(struct f2fs_sb_info *sbi,
2621 if (time_to_inject(sbi, FAULT_BLOCK))
2624 spin_lock(&sbi->stat_lock);
2626 valid_block_count = sbi->total_valid_block_count +
2627 sbi->current_reserved_blocks + 1;
2629 if (!__allow_reserved_blocks(sbi, inode, false))
2630 valid_block_count += F2FS_OPTION(sbi).root_reserved_blocks;
2632 if (F2FS_IO_ALIGNED(sbi))
2633 valid_block_count += sbi->blocks_per_seg *
2634 SM_I(sbi)->additional_reserved_segments;
2636 user_block_count = sbi->user_block_count;
2637 if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
2638 user_block_count -= sbi->unusable_block_count;
2641 spin_unlock(&sbi->stat_lock);
2645 valid_node_count = sbi->total_valid_node_count + 1;
2646 if (unlikely(valid_node_count > sbi->total_node_count)) {
2647 spin_unlock(&sbi->stat_lock);
2651 sbi->total_valid_node_count++;
2652 sbi->total_valid_block_count++;
2653 spin_unlock(&sbi->stat_lock);
2662 percpu_counter_inc(&sbi->alloc_valid_block_count);
2675 static inline void dec_valid_node_count(struct f2fs_sb_info *sbi,
2678 spin_lock(&sbi->stat_lock);
2680 if (unlikely(!sbi->total_valid_block_count ||
2681 !sbi->total_valid_node_count)) {
2682 f2fs_warn(sbi, "dec_valid_node_count: inconsistent block counts, total_valid_block:%u, total_valid_node:%u",
2683 sbi->total_valid_block_count,
2684 sbi->total_valid_node_count);
2685 set_sbi_flag(sbi, SBI_NEED_FSCK);
2687 sbi->total_valid_block_count--;
2688 sbi->total_valid_node_count--;
2691 if (sbi->reserved_blocks &&
2692 sbi->current_reserved_blocks < sbi->reserved_blocks)
2693 sbi->current_reserved_blocks++;
2695 spin_unlock(&sbi->stat_lock);
2701 f2fs_warn(sbi, "dec_valid_node_count: inconsistent i_blocks, ino:%lu, iblocks:%llu",
2704 set_sbi_flag(sbi, SBI_NEED_FSCK);
2711 static inline unsigned int valid_node_count(struct f2fs_sb_info *sbi)
2713 return sbi->total_valid_node_count;
2716 static inline void inc_valid_inode_count(struct f2fs_sb_info *sbi)
2718 percpu_counter_inc(&sbi->total_valid_inode_count);
2721 static inline void dec_valid_inode_count(struct f2fs_sb_info *sbi)
2723 percpu_counter_dec(&sbi->total_valid_inode_count);
2726 static inline s64 valid_inode_count(struct f2fs_sb_info *sbi)
2728 return percpu_counter_sum_positive(&sbi->total_valid_inode_count);
2810 gfp_t flags, bool nofail, struct f2fs_sb_info *sbi)
2815 if (time_to_inject(sbi, FAULT_SLAB_ALLOC))
2821 static inline bool is_inflight_io(struct f2fs_sb_info *sbi, int type)
2823 if (get_pages(sbi, F2FS_RD_DATA) || get_pages(sbi, F2FS_RD_NODE) ||
2824 get_pages(sbi, F2FS_RD_META) || get_pages(sbi, F2FS_WB_DATA) ||
2825 get_pages(sbi, F2FS_WB_CP_DATA) ||
2826 get_pages(sbi, F2FS_DIO_READ) ||
2827 get_pages(sbi, F2FS_DIO_WRITE))
2830 if (type != DISCARD_TIME && SM_I(sbi) && SM_I(sbi)->dcc_info &&
2831 atomic_read(&SM_I(sbi)->dcc_info->queued_discard))
2834 if (SM_I(sbi) && SM_I(sbi)->fcc_info &&
2835 atomic_read(&SM_I(sbi)->fcc_info->queued_flush))
2840 static inline bool is_idle(struct f2fs_sb_info *sbi, int type)
2842 if (sbi->gc_mode == GC_URGENT_HIGH)
2845 if (is_inflight_io(sbi, type))
2848 if (sbi->gc_mode == GC_URGENT_MID)
2851 if (sbi->gc_mode == GC_URGENT_LOW &&
2855 return f2fs_time_over(sbi, type);
3336 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3338 spin_lock(&sbi->inode_lock[DIRTY_META]);
3340 spin_unlock(&sbi->inode_lock[DIRTY_META]);
3363 static inline bool f2fs_cp_error(struct f2fs_sb_info *sbi)
3365 return is_set_ckpt_flags(sbi, CP_ERROR_FLAG);
3379 static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi,
3382 if (time_to_inject(sbi, FAULT_KMALLOC))
3388 static inline void *f2fs_getname(struct f2fs_sb_info *sbi)
3390 if (time_to_inject(sbi, FAULT_KMALLOC))
3401 static inline void *f2fs_kzalloc(struct f2fs_sb_info *sbi,
3404 return f2fs_kmalloc(sbi, size, flags | __GFP_ZERO);
3407 static inline void *f2fs_kvmalloc(struct f2fs_sb_info *sbi,
3410 if (time_to_inject(sbi, FAULT_KVMALLOC))
3416 static inline void *f2fs_kvzalloc(struct f2fs_sb_info *sbi,
3419 return f2fs_kvmalloc(sbi, size, flags | __GFP_ZERO);
3459 #define __is_large_section(sbi) ((sbi)->segs_per_sec > 1)
3463 bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
3465 static inline void verify_blkaddr(struct f2fs_sb_info *sbi,
3468 if (!f2fs_is_valid_blkaddr(sbi, blkaddr, type))
3469 f2fs_err(sbi, "invalid blkaddr: %u, type: %d, run fsck to fix.",
3507 bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct page *page);
3508 void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct page *page);
3511 int f2fs_try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink);
3521 int f2fs_update_extension_list(struct f2fs_sb_info *sbi, const char *name,
3590 int f2fs_enable_quota_files(struct f2fs_sb_info *sbi, bool rdonly);
3594 void f2fs_save_errors(struct f2fs_sb_info *sbi, unsigned char flag);
3595 void f2fs_handle_critical_error(struct f2fs_sb_info *sbi, unsigned char reason,
3597 void f2fs_handle_error(struct f2fs_sb_info *sbi, unsigned char error);
3598 void f2fs_handle_error_async(struct f2fs_sb_info *sbi, unsigned char error);
3599 int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover);
3601 int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi);
3613 int f2fs_check_nid_range(struct f2fs_sb_info *sbi, nid_t nid);
3614 bool f2fs_available_free_memory(struct f2fs_sb_info *sbi, int type);
3615 bool f2fs_in_warm_node_list(struct f2fs_sb_info *sbi, struct page *page);
3616 void f2fs_init_fsync_node_info(struct f2fs_sb_info *sbi);
3617 void f2fs_del_fsync_node_entry(struct f2fs_sb_info *sbi, struct page *page);
3618 void f2fs_reset_fsync_node_info(struct f2fs_sb_info *sbi);
3619 int f2fs_need_dentry_mark(struct f2fs_sb_info *sbi, nid_t nid);
3620 bool f2fs_is_checkpointed_node(struct f2fs_sb_info *sbi, nid_t nid);
3621 bool f2fs_need_inode_block_update(struct f2fs_sb_info *sbi, nid_t ino);
3622 int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid,
3628 int f2fs_wait_on_node_pages_writeback(struct f2fs_sb_info *sbi,
3630 bool f2fs_nat_bitmap_enabled(struct f2fs_sb_info *sbi);
3634 void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid);
3635 struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid);
3638 void f2fs_flush_inline_data(struct f2fs_sb_info *sbi);
3639 int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
3642 int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
3645 int f2fs_build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount);
3646 bool f2fs_alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid);
3647 void f2fs_alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid);
3648 void f2fs_alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid);
3649 int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink);
3652 int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct page *page);
3653 int f2fs_restore_node_summary(struct f2fs_sb_info *sbi,
3655 void f2fs_enable_nat_bits(struct f2fs_sb_info *sbi);
3656 int f2fs_flush_nat_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc);
3657 int f2fs_build_node_manager(struct f2fs_sb_info *sbi);
3658 void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi);
3665 bool f2fs_need_SSR(struct f2fs_sb_info *sbi);
3668 void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need);
3669 void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi, bool from_bg);
3670 int f2fs_issue_flush(struct f2fs_sb_info *sbi, nid_t ino);
3671 int f2fs_create_flush_cmd_control(struct f2fs_sb_info *sbi);
3672 int f2fs_flush_device_cache(struct f2fs_sb_info *sbi);
3673 void f2fs_destroy_flush_cmd_control(struct f2fs_sb_info *sbi, bool free);
3674 void f2fs_invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr);
3675 bool f2fs_is_checkpointed_data(struct f2fs_sb_info *sbi, block_t blkaddr);
3676 int f2fs_start_discard_thread(struct f2fs_sb_info *sbi);
3677 void f2fs_drop_discard_cmd(struct f2fs_sb_info *sbi);
3678 void f2fs_stop_discard_thread(struct f2fs_sb_info *sbi);
3679 bool f2fs_issue_discard_timeout(struct f2fs_sb_info *sbi);
3680 void f2fs_clear_prefree_segments(struct f2fs_sb_info *sbi,
3682 void f2fs_dirty_to_prefree(struct f2fs_sb_info *sbi);
3683 block_t f2fs_get_unusable_blocks(struct f2fs_sb_info *sbi);
3684 int f2fs_disable_cp_again(struct f2fs_sb_info *sbi, block_t unusable);
3685 void f2fs_release_discard_addrs(struct f2fs_sb_info *sbi);
3686 int f2fs_npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra);
3687 bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno);
3688 void f2fs_init_inmem_curseg(struct f2fs_sb_info *sbi);
3689 void f2fs_save_inmem_curseg(struct f2fs_sb_info *sbi);
3690 void f2fs_restore_inmem_curseg(struct f2fs_sb_info *sbi);
3691 void f2fs_get_new_segment(struct f2fs_sb_info *sbi,
3693 void f2fs_allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
3695 void f2fs_allocate_new_section(struct f2fs_sb_info *sbi, int type, bool force);
3696 void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi);
3697 int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range);
3698 bool f2fs_exist_trim_candidates(struct f2fs_sb_info *sbi,
3700 struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno);
3701 void f2fs_update_meta_page(struct f2fs_sb_info *sbi, void *src,
3703 void f2fs_do_write_meta_page(struct f2fs_sb_info *sbi, struct page *page,
3709 void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
3713 void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn,
3717 void f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
3721 void f2fs_update_device_state(struct f2fs_sb_info *sbi, nid_t ino,
3728 void f2fs_write_data_summaries(struct f2fs_sb_info *sbi, block_t start_blk);
3729 void f2fs_write_node_summaries(struct f2fs_sb_info *sbi, block_t start_blk);
3732 void f2fs_flush_sit_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc);
3733 int f2fs_fix_curseg_write_pointer(struct f2fs_sb_info *sbi);
3734 int f2fs_check_write_pointer(struct f2fs_sb_info *sbi);
3735 int f2fs_build_segment_manager(struct f2fs_sb_info *sbi);
3736 void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi);
3740 unsigned int f2fs_usable_segs_in_sec(struct f2fs_sb_info *sbi,
3742 unsigned int f2fs_usable_blks_in_seg(struct f2fs_sb_info *sbi,
3749 static inline bool f2fs_need_rand_seg(struct f2fs_sb_info *sbi)
3751 return F2FS_OPTION(sbi).fs_mode == FS_MODE_FRAGMENT_SEG ||
3752 F2FS_OPTION(sbi).fs_mode == FS_MODE_FRAGMENT_BLK;
3758 void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io,
3760 void f2fs_flush_ckpt_thread(struct f2fs_sb_info *sbi);
3761 struct page *f2fs_grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index);
3762 struct page *f2fs_get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index);
3763 struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index);
3764 struct page *f2fs_get_tmp_page(struct f2fs_sb_info *sbi, pgoff_t index);
3765 bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
3767 int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
3769 void f2fs_ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index,
3771 long f2fs_sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type,
3773 void f2fs_add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type);
3774 void f2fs_remove_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type);
3775 void f2fs_release_ino_entry(struct f2fs_sb_info *sbi, bool all);
3776 bool f2fs_exist_written_data(struct f2fs_sb_info *sbi, nid_t ino, int mode);
3777 void f2fs_set_dirty_device(struct f2fs_sb_info *sbi, nid_t ino,
3779 bool f2fs_is_dirty_device(struct f2fs_sb_info *sbi, nid_t ino,
3781 int f2fs_acquire_orphan_inode(struct f2fs_sb_info *sbi);
3782 void f2fs_release_orphan_inode(struct f2fs_sb_info *sbi);
3784 void f2fs_remove_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino);
3785 int f2fs_recover_orphan_inodes(struct f2fs_sb_info *sbi);
3786 int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi);
3789 int f2fs_sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type,
3791 void f2fs_wait_on_all_pages(struct f2fs_sb_info *sbi, int type);
3792 u64 f2fs_get_sectors_written(struct f2fs_sb_info *sbi);
3793 int f2fs_write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc);
3794 void f2fs_init_ino_entry_info(struct f2fs_sb_info *sbi);
3797 int f2fs_issue_checkpoint(struct f2fs_sb_info *sbi);
3798 int f2fs_start_ckpt_thread(struct f2fs_sb_info *sbi);
3799 void f2fs_stop_ckpt_thread(struct f2fs_sb_info *sbi);
3800 void f2fs_init_ckpt_req_control(struct f2fs_sb_info *sbi);
3810 void f2fs_submit_read_bio(struct f2fs_sb_info *sbi, struct bio *bio,
3812 int f2fs_init_write_merge_io(struct f2fs_sb_info *sbi);
3813 void f2fs_submit_merged_write(struct f2fs_sb_info *sbi, enum page_type type);
3814 void f2fs_submit_merged_write_cond(struct f2fs_sb_info *sbi,
3817 void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
3819 void f2fs_flush_merged_writes(struct f2fs_sb_info *sbi);
3823 struct block_device *f2fs_target_device(struct f2fs_sb_info *sbi,
3825 int f2fs_target_device_index(struct f2fs_sb_info *sbi, block_t blkaddr);
3859 int f2fs_init_post_read_wq(struct f2fs_sb_info *sbi);
3860 void f2fs_destroy_post_read_wq(struct f2fs_sb_info *sbi);
3866 int f2fs_start_gc_thread(struct f2fs_sb_info *sbi);
3867 void f2fs_stop_gc_thread(struct f2fs_sb_info *sbi);
3869 int f2fs_gc(struct f2fs_sb_info *sbi, struct f2fs_gc_control *gc_control);
3870 void f2fs_build_gc_manager(struct f2fs_sb_info *sbi);
3875 int f2fs_get_victim(struct f2fs_sb_info *sbi, unsigned int *result,
3882 int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only);
3883 bool f2fs_space_for_roll_forward(struct f2fs_sb_info *sbi);
3893 struct f2fs_sb_info *sbi;
3956 static inline struct f2fs_stat_info *F2FS_STAT(struct f2fs_sb_info *sbi)
3958 return (struct f2fs_stat_info *)sbi->stat_info;
3961 #define stat_inc_cp_call_count(sbi, foreground) \
3962 atomic_inc(&sbi->cp_call_count[(foreground)])
3963 #define stat_inc_cp_count(si) (F2FS_STAT(sbi)->cp_count++)
3964 #define stat_io_skip_bggc_count(sbi) ((sbi)->io_skip_bggc++)
3965 #define stat_other_skip_bggc_count(sbi) ((sbi)->other_skip_bggc++)
3966 #define stat_inc_dirty_inode(sbi, type) ((sbi)->ndirty_inode[type]++)
3967 #define stat_dec_dirty_inode(sbi, type) ((sbi)->ndirty_inode[type]--)
3968 #define stat_inc_total_hit(sbi, type) (atomic64_inc(&(sbi)->total_hit_ext[type]))
3969 #define stat_inc_rbtree_node_hit(sbi, type) (atomic64_inc(&(sbi)->read_hit_rbtree[type]))
3970 #define stat_inc_largest_node_hit(sbi) (atomic64_inc(&(sbi)->read_hit_largest))
3971 #define stat_inc_cached_node_hit(sbi, type) (atomic64_inc(&(sbi)->read_hit_cached[type]))
4024 #define stat_inc_meta_count(sbi, blkaddr) \
4026 if (blkaddr < SIT_I(sbi)->sit_base_addr) \
4027 atomic_inc(&(sbi)->meta_count[META_CP]); \
4028 else if (blkaddr < NM_I(sbi)->nat_blkaddr) \
4029 atomic_inc(&(sbi)->meta_count[META_SIT]); \
4030 else if (blkaddr < SM_I(sbi)->ssa_blkaddr) \
4031 atomic_inc(&(sbi)->meta_count[META_NAT]); \
4032 else if (blkaddr < SM_I(sbi)->main_blkaddr) \
4033 atomic_inc(&(sbi)->meta_count[META_SSA]); \
4035 #define stat_inc_seg_type(sbi, curseg) \
4036 ((sbi)->segment_count[(curseg)->alloc_type]++)
4037 #define stat_inc_block_count(sbi, curseg) \
4038 ((sbi)->block_count[(curseg)->alloc_type]++)
4039 #define stat_inc_inplace_blocks(sbi) \
4040 (atomic_inc(&(sbi)->inplace_count))
4048 #define stat_inc_gc_call_count(sbi, foreground) \
4049 (F2FS_STAT(sbi)->gc_call_count[(foreground)]++)
4050 #define stat_inc_gc_sec_count(sbi, type, gc_type) \
4051 (F2FS_STAT(sbi)->gc_secs[(type)][(gc_type)]++)
4052 #define stat_inc_gc_seg_count(sbi, type, gc_type) \
4053 (F2FS_STAT(sbi)->gc_segs[(type)][(gc_type)]++)
4058 #define stat_inc_data_blk_count(sbi, blks, gc_type) \
4060 struct f2fs_stat_info *si = F2FS_STAT(sbi); \
4066 #define stat_inc_node_blk_count(sbi, blks, gc_type) \
4068 struct f2fs_stat_info *si = F2FS_STAT(sbi); \
4074 int f2fs_build_stats(struct f2fs_sb_info *sbi);
4075 void f2fs_destroy_stats(struct f2fs_sb_info *sbi);
4078 void f2fs_update_sit_info(struct f2fs_sb_info *sbi);
4080 #define stat_inc_cp_call_count(sbi, foreground) do { } while (0)
4081 #define stat_inc_cp_count(sbi) do { } while (0)
4082 #define stat_io_skip_bggc_count(sbi) do { } while (0)
4083 #define stat_other_skip_bggc_count(sbi) do { } while (0)
4084 #define stat_inc_dirty_inode(sbi, type) do { } while (0)
4085 #define stat_dec_dirty_inode(sbi, type) do { } while (0)
4086 #define stat_inc_total_hit(sbi, type) do { } while (0)
4087 #define stat_inc_rbtree_node_hit(sbi, type) do { } while (0)
4088 #define stat_inc_largest_node_hit(sbi) do { } while (0)
4089 #define stat_inc_cached_node_hit(sbi, type) do { } while (0)
4105 #define stat_inc_meta_count(sbi, blkaddr) do { } while (0)
4106 #define stat_inc_seg_type(sbi, curseg) do { } while (0)
4107 #define stat_inc_block_count(sbi, curseg) do { } while (0)
4108 #define stat_inc_inplace_blocks(sbi) do { } while (0)
4109 #define stat_inc_gc_call_count(sbi, foreground) do { } while (0)
4110 #define stat_inc_gc_sec_count(sbi, type, gc_type) do { } while (0)
4111 #define stat_inc_gc_seg_count(sbi, type, gc_type) do { } while (0)
4113 #define stat_inc_data_blk_count(sbi, blks, gc_type) do { } while (0)
4114 #define stat_inc_node_blk_count(sbi, blks, gc_type) do { } while (0)
4116 static inline int f2fs_build_stats(struct f2fs_sb_info *sbi) { return 0; }
4117 static inline void f2fs_destroy_stats(struct f2fs_sb_info *sbi) { }
4120 static inline void f2fs_update_sit_info(struct f2fs_sb_info *sbi) {}
4174 void f2fs_join_shrinker(struct f2fs_sb_info *sbi);
4175 void f2fs_leave_shrinker(struct f2fs_sb_info *sbi);
4185 void f2fs_init_extent_cache_info(struct f2fs_sb_info *sbi);
4198 unsigned int f2fs_shrink_read_extent_tree(struct f2fs_sb_info *sbi,
4208 unsigned int f2fs_shrink_age_extent_tree(struct f2fs_sb_info *sbi,
4219 int f2fs_register_sysfs(struct f2fs_sb_info *sbi);
4220 void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi);
4295 void f2fs_init_compress_info(struct f2fs_sb_info *sbi);
4296 int f2fs_init_compress_inode(struct f2fs_sb_info *sbi);
4297 void f2fs_destroy_compress_inode(struct f2fs_sb_info *sbi);
4298 int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi);
4299 void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi);
4302 struct address_space *COMPRESS_MAPPING(struct f2fs_sb_info *sbi);
4303 void f2fs_invalidate_compress_page(struct f2fs_sb_info *sbi, block_t blkaddr);
4304 void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
4306 bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
4308 void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi, nid_t ino);
4311 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); \
4312 sbi->compr_new_inode++; \
4316 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); \
4318 sbi->compr_written_block += blocks; \
4319 sbi->compr_saved_block += diff; \
4352 static inline int f2fs_init_compress_inode(struct f2fs_sb_info *sbi) { return 0; }
4353 static inline void f2fs_destroy_compress_inode(struct f2fs_sb_info *sbi) { }
4354 static inline int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi) { return 0; }
4355 static inline void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi) { }
4358 static inline void f2fs_invalidate_compress_page(struct f2fs_sb_info *sbi,
4360 static inline void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi,
4362 static inline bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi,
4364 static inline void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi,
4376 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
4379 F2FS_OPTION(sbi).compress_algorithm;
4381 F2FS_OPTION(sbi).compress_log_size;
4383 F2FS_OPTION(sbi).compress_chksum ?
4389 F2FS_OPTION(sbi).compress_level)
4391 F2FS_OPTION(sbi).compress_level;
4429 static inline bool f2fs_sb_has_##name(struct f2fs_sb_info *sbi) \
4431 return F2FS_HAS_FEATURE(sbi, F2FS_FEATURE_##flagname); \
4450 static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi,
4453 unsigned int zno = blkaddr / sbi->blocks_per_blkz;
4459 static inline int f2fs_bdev_index(struct f2fs_sb_info *sbi,
4464 if (!f2fs_is_multi_device(sbi))
4467 for (i = 0; i < sbi->s_ndevs; i++)
4475 static inline bool f2fs_hw_should_discard(struct f2fs_sb_info *sbi)
4477 return f2fs_sb_has_blkzoned(sbi);
4485 static inline bool f2fs_hw_support_discard(struct f2fs_sb_info *sbi)
4489 if (!f2fs_is_multi_device(sbi))
4490 return f2fs_bdev_support_discard(sbi->sb->s_bdev);
4492 for (i = 0; i < sbi->s_ndevs; i++)
4498 static inline bool f2fs_realtime_discard_enable(struct f2fs_sb_info *sbi)
4500 return (test_opt(sbi, DISCARD) && f2fs_hw_support_discard(sbi)) ||
4501 f2fs_hw_should_discard(sbi);
4504 static inline bool f2fs_hw_is_readonly(struct f2fs_sb_info *sbi)
4508 if (!f2fs_is_multi_device(sbi))
4509 return bdev_read_only(sbi->sb->s_bdev);
4511 for (i = 0; i < sbi->s_ndevs; i++)
4517 static inline bool f2fs_dev_is_readonly(struct f2fs_sb_info *sbi)
4519 return f2fs_sb_has_readonly(sbi) || f2fs_hw_is_readonly(sbi);
4522 static inline bool f2fs_lfs_mode(struct f2fs_sb_info *sbi)
4524 return F2FS_OPTION(sbi).fs_mode == FS_MODE_LFS;
4527 static inline bool f2fs_low_mem_mode(struct f2fs_sb_info *sbi)
4529 return F2FS_OPTION(sbi).memory_mode == MEMORY_MODE_LOW;
4561 static inline bool f2fs_allow_multi_device_dio(struct f2fs_sb_info *sbi,
4564 if (!f2fs_is_multi_device(sbi))
4568 return sbi->aligned_blksize;
4578 extern void f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned int rate,
4581 #define f2fs_build_fault_attr(sbi, rate, type) do { } while (0)
4584 static inline bool is_journalled_quota(struct f2fs_sb_info *sbi)
4587 if (f2fs_sb_has_quota_ino(sbi))
4589 if (F2FS_OPTION(sbi).s_qf_names[USRQUOTA] ||
4590 F2FS_OPTION(sbi).s_qf_names[GRPQUOTA] ||
4591 F2FS_OPTION(sbi).s_qf_names[PRJQUOTA])
4597 static inline bool f2fs_block_unit_discard(struct f2fs_sb_info *sbi)
4599 return F2FS_OPTION(sbi).discard_unit == DISCARD_UNIT_BLOCK;
4608 static inline void f2fs_handle_page_eio(struct f2fs_sb_info *sbi, pgoff_t ofs,
4611 if (unlikely(f2fs_cp_error(sbi)))
4614 if (ofs == sbi->page_eio_ofs[type]) {
4615 if (sbi->page_eio_cnt[type]++ == MAX_RETRY_PAGE_EIO)
4616 set_ckpt_flags(sbi, CP_ERROR_FLAG);
4618 sbi->page_eio_ofs[type] = ofs;
4619 sbi->page_eio_cnt[type] = 0;
4623 static inline bool f2fs_is_readonly(struct f2fs_sb_info *sbi)
4625 return f2fs_sb_has_readonly(sbi) || f2fs_readonly(sbi->sb);
4628 static inline void f2fs_truncate_meta_inode_pages(struct f2fs_sb_info *sbi,
4637 page = find_get_page(META_MAPPING(sbi), blkaddr + i);
4646 f2fs_submit_merged_write_cond(sbi, sbi->meta_inode,
4649 truncate_inode_pages_range(META_MAPPING(sbi),
4654 static inline void f2fs_invalidate_internal_cache(struct f2fs_sb_info *sbi,
4657 f2fs_truncate_meta_inode_pages(sbi, blkaddr, 1);
4658 f2fs_invalidate_compress_page(sbi, blkaddr);