#include <linux/fs.h>
#include <linux/f2fs_fs.h>
#include "f2fs.h"
#include "node.h"
#include <trace/events/f2fs.h>
bool sanity_check_extent_cache(struct inode *inode, struct page *ipage)
{ … }
static void __set_extent_info(struct extent_info *ei,
unsigned int fofs, unsigned int len,
block_t blk, bool keep_clen,
unsigned long age, unsigned long last_blocks,
enum extent_type type)
{ … }
static bool __init_may_extent_tree(struct inode *inode, enum extent_type type)
{ … }
static bool __may_extent_tree(struct inode *inode, enum extent_type type)
{ … }
static void __try_update_largest_extent(struct extent_tree *et,
struct extent_node *en)
{ … }
static bool __is_extent_mergeable(struct extent_info *back,
struct extent_info *front, enum extent_type type)
{ … }
static bool __is_back_mergeable(struct extent_info *cur,
struct extent_info *back, enum extent_type type)
{ … }
static bool __is_front_mergeable(struct extent_info *cur,
struct extent_info *front, enum extent_type type)
{ … }
static struct extent_node *__lookup_extent_node(struct rb_root_cached *root,
struct extent_node *cached_en, unsigned int fofs)
{ … }
static struct extent_node *__lookup_extent_node_ret(struct rb_root_cached *root,
struct extent_node *cached_en,
unsigned int fofs,
struct extent_node **prev_entry,
struct extent_node **next_entry,
struct rb_node ***insert_p,
struct rb_node **insert_parent,
bool *leftmost)
{ … }
static struct kmem_cache *extent_tree_slab;
static struct kmem_cache *extent_node_slab;
static struct extent_node *__attach_extent_node(struct f2fs_sb_info *sbi,
struct extent_tree *et, struct extent_info *ei,
struct rb_node *parent, struct rb_node **p,
bool leftmost)
{ … }
static void __detach_extent_node(struct f2fs_sb_info *sbi,
struct extent_tree *et, struct extent_node *en)
{ … }
static void __release_extent_node(struct f2fs_sb_info *sbi,
struct extent_tree *et, struct extent_node *en)
{ … }
static struct extent_tree *__grab_extent_tree(struct inode *inode,
enum extent_type type)
{ … }
static unsigned int __free_extent_tree(struct f2fs_sb_info *sbi,
struct extent_tree *et)
{ … }
static void __drop_largest_extent(struct extent_tree *et,
pgoff_t fofs, unsigned int len)
{ … }
void f2fs_init_read_extent_tree(struct inode *inode, struct page *ipage)
{ … }
void f2fs_init_age_extent_tree(struct inode *inode)
{ … }
void f2fs_init_extent_tree(struct inode *inode)
{ … }
static bool __lookup_extent_tree(struct inode *inode, pgoff_t pgofs,
struct extent_info *ei, enum extent_type type)
{ … }
static struct extent_node *__try_merge_extent_node(struct f2fs_sb_info *sbi,
struct extent_tree *et, struct extent_info *ei,
struct extent_node *prev_ex,
struct extent_node *next_ex)
{ … }
static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,
struct extent_tree *et, struct extent_info *ei,
struct rb_node **insert_p,
struct rb_node *insert_parent,
bool leftmost)
{ … }
static void __update_extent_tree_range(struct inode *inode,
struct extent_info *tei, enum extent_type type)
{ … }
#ifdef CONFIG_F2FS_FS_COMPRESSION
void f2fs_update_read_extent_tree_range_compressed(struct inode *inode,
pgoff_t fofs, block_t blkaddr, unsigned int llen,
unsigned int c_len)
{ … }
#endif
static unsigned long long __calculate_block_age(struct f2fs_sb_info *sbi,
unsigned long long new,
unsigned long long old)
{ … }
static int __get_new_block_age(struct inode *inode, struct extent_info *ei,
block_t blkaddr)
{ … }
static void __update_extent_cache(struct dnode_of_data *dn, enum extent_type type)
{ … }
static unsigned int __shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink,
enum extent_type type)
{ … }
bool f2fs_lookup_read_extent_cache(struct inode *inode, pgoff_t pgofs,
struct extent_info *ei)
{ … }
bool f2fs_lookup_read_extent_cache_block(struct inode *inode, pgoff_t index,
block_t *blkaddr)
{ … }
void f2fs_update_read_extent_cache(struct dnode_of_data *dn)
{ … }
void f2fs_update_read_extent_cache_range(struct dnode_of_data *dn,
pgoff_t fofs, block_t blkaddr, unsigned int len)
{ … }
unsigned int f2fs_shrink_read_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink)
{ … }
bool f2fs_lookup_age_extent_cache(struct inode *inode, pgoff_t pgofs,
struct extent_info *ei)
{ … }
void f2fs_update_age_extent_cache(struct dnode_of_data *dn)
{ … }
void f2fs_update_age_extent_cache_range(struct dnode_of_data *dn,
pgoff_t fofs, unsigned int len)
{ … }
unsigned int f2fs_shrink_age_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink)
{ … }
static unsigned int __destroy_extent_node(struct inode *inode,
enum extent_type type)
{ … }
void f2fs_destroy_extent_node(struct inode *inode)
{ … }
static void __drop_extent_tree(struct inode *inode, enum extent_type type)
{ … }
void f2fs_drop_extent_tree(struct inode *inode)
{ … }
static void __destroy_extent_tree(struct inode *inode, enum extent_type type)
{ … }
void f2fs_destroy_extent_tree(struct inode *inode)
{ … }
static void __init_extent_tree_info(struct extent_tree_info *eti)
{ … }
void f2fs_init_extent_cache_info(struct f2fs_sb_info *sbi)
{ … }
int __init f2fs_create_extent_cache(void)
{ … }
void f2fs_destroy_extent_cache(void)
{ … }