#ifndef _EXT4_EXTENTS_STATUS_H
#define _EXT4_EXTENTS_STATUS_H
#ifdef ES_DEBUG__
#define es_debug …
#else
#define es_debug(fmt, ...) …
#endif
#define ES_AGGRESSIVE_TEST__
enum { … };
#define ES_SHIFT …
#define ES_MASK …
#define EXTENT_STATUS_WRITTEN …
#define EXTENT_STATUS_UNWRITTEN …
#define EXTENT_STATUS_DELAYED …
#define EXTENT_STATUS_HOLE …
#define EXTENT_STATUS_REFERENCED …
#define ES_TYPE_MASK …
struct ext4_sb_info;
struct ext4_extent;
struct extent_status { … };
struct ext4_es_tree { … };
struct ext4_es_stats { … };
struct pending_reservation { … };
struct ext4_pending_tree { … };
extern int __init ext4_init_es(void);
extern void ext4_exit_es(void);
extern void ext4_es_init_tree(struct ext4_es_tree *tree);
extern void ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk,
ext4_lblk_t len, ext4_fsblk_t pblk,
unsigned int status);
extern void ext4_es_cache_extent(struct inode *inode, ext4_lblk_t lblk,
ext4_lblk_t len, ext4_fsblk_t pblk,
unsigned int status);
extern void ext4_es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
ext4_lblk_t len);
extern void ext4_es_find_extent_range(struct inode *inode,
int (*match_fn)(struct extent_status *es),
ext4_lblk_t lblk, ext4_lblk_t end,
struct extent_status *es);
extern int ext4_es_lookup_extent(struct inode *inode, ext4_lblk_t lblk,
ext4_lblk_t *next_lblk,
struct extent_status *es);
extern bool ext4_es_scan_range(struct inode *inode,
int (*matching_fn)(struct extent_status *es),
ext4_lblk_t lblk, ext4_lblk_t end);
extern bool ext4_es_scan_clu(struct inode *inode,
int (*matching_fn)(struct extent_status *es),
ext4_lblk_t lblk);
static inline unsigned int ext4_es_status(struct extent_status *es)
{ … }
static inline unsigned int ext4_es_type(struct extent_status *es)
{ … }
static inline int ext4_es_is_written(struct extent_status *es)
{ … }
static inline int ext4_es_is_unwritten(struct extent_status *es)
{ … }
static inline int ext4_es_is_delayed(struct extent_status *es)
{ … }
static inline int ext4_es_is_hole(struct extent_status *es)
{ … }
static inline int ext4_es_is_mapped(struct extent_status *es)
{ … }
static inline int ext4_es_is_delonly(struct extent_status *es)
{ … }
static inline void ext4_es_set_referenced(struct extent_status *es)
{ … }
static inline void ext4_es_clear_referenced(struct extent_status *es)
{ … }
static inline int ext4_es_is_referenced(struct extent_status *es)
{ … }
static inline ext4_fsblk_t ext4_es_pblock(struct extent_status *es)
{ … }
static inline ext4_fsblk_t ext4_es_show_pblock(struct extent_status *es)
{ … }
static inline void ext4_es_store_pblock(struct extent_status *es,
ext4_fsblk_t pb)
{ … }
static inline void ext4_es_store_status(struct extent_status *es,
unsigned int status)
{ … }
static inline void ext4_es_store_pblock_status(struct extent_status *es,
ext4_fsblk_t pb,
unsigned int status)
{ … }
extern int ext4_es_register_shrinker(struct ext4_sb_info *sbi);
extern void ext4_es_unregister_shrinker(struct ext4_sb_info *sbi);
extern int ext4_seq_es_shrinker_info_show(struct seq_file *seq, void *v);
extern int __init ext4_init_pending(void);
extern void ext4_exit_pending(void);
extern void ext4_init_pending_tree(struct ext4_pending_tree *tree);
extern void ext4_remove_pending(struct inode *inode, ext4_lblk_t lblk);
extern bool ext4_is_pending(struct inode *inode, ext4_lblk_t lblk);
extern void ext4_es_insert_delayed_extent(struct inode *inode, ext4_lblk_t lblk,
ext4_lblk_t len, bool lclu_allocated,
bool end_allocated);
extern unsigned int ext4_es_delayed_clu(struct inode *inode, ext4_lblk_t lblk,
ext4_lblk_t len);
extern void ext4_clear_inode_es(struct inode *inode);
#endif