Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/ext2fs/ext2_extents.h
Context not available. | |||||
#include <sys/types.h> | #include <sys/types.h> | ||||
#define EXT4_EXT_MAGIC 0xf30a | #define EXT4_EXT_MAGIC 0xf30a | ||||
#define EXT4_MAX_BLOCKS 0xffffffff | |||||
#define EXT_INIT_MAX_LEN (1UL << 15) | |||||
#define EXT4_MAX_LEN (EXT_INIT_MAX_LEN - 1) | |||||
#define EXT4_EXT_DEPTH_MAX 5 | |||||
#define EXT4_EXT_CACHE_NO 0 | #define EXT4_EXT_CACHE_NO 0 | ||||
#define EXT4_EXT_CACHE_GAP 1 | #define EXT4_EXT_CACHE_GAP 1 | ||||
Context not available. | |||||
* Save path to some extent. | * Save path to some extent. | ||||
*/ | */ | ||||
struct ext4_extent_path { | struct ext4_extent_path { | ||||
int index_count; | |||||
uint16_t ep_depth; | uint16_t ep_depth; | ||||
struct buf *ep_bp; | uint64_t ep_blk; | ||||
bool ep_is_sparse; | char *ep_data; | ||||
union { | struct ext4_extent *ep_ext; | ||||
struct ext4_extent ep_sparse_ext; | |||||
struct ext4_extent *ep_ext; | |||||
}; | |||||
struct ext4_extent_index *ep_index; | struct ext4_extent_index *ep_index; | ||||
struct ext4_extent_header *ep_header; | struct ext4_extent_header *ep_header; | ||||
}; | }; | ||||
#define EXT_FIRST_EXTENT(hdr) ((struct ext4_extent *)(((char *)(hdr)) + \ | |||||
sizeof(struct ext4_extent_header))) | |||||
#define EXT_FIRST_INDEX(hdr) ((struct ext4_extent_index *)(((char *)(hdr)) + \ | |||||
sizeof(struct ext4_extent_header))) | |||||
#define EXT_LAST_EXTENT(hdr) (EXT_FIRST_EXTENT((hdr)) + (hdr)->eh_ecount - 1) | |||||
#define EXT_LAST_INDEX(hdr) (EXT_FIRST_INDEX((hdr)) + (hdr)->eh_ecount - 1) | |||||
#define EXT4_EXTENT_TAIL_OFFSET(hdr) (sizeof(struct ext4_extent_header) + \ | |||||
(sizeof(struct ext4_extent) * (hdr)->eh_max)) | |||||
#define EXT_HAS_FREE_INDEX(path) \ | |||||
((path)->ep_header->eh_ecount < (path)->ep_header->eh_max) | |||||
#define EXT_MAX_EXTENT(hdr) (EXT_FIRST_EXTENT(hdr) + ((hdr)->eh_max) - 1) | |||||
#define EXT_MAX_INDEX(hdr) (EXT_FIRST_INDEX((hdr)) + (hdr)->eh_max - 1) | |||||
struct inode; | struct inode; | ||||
struct m_ext2fs; | struct m_ext2fs; | ||||
void ext4_ext_tree_init(struct inode *ip); | |||||
int ext4_ext_in_cache(struct inode *, daddr_t, struct ext4_extent *); | int ext4_ext_in_cache(struct inode *, daddr_t, struct ext4_extent *); | ||||
void ext4_ext_put_cache(struct inode *, struct ext4_extent *, int); | void ext4_ext_put_cache(struct inode *, struct ext4_extent *, int); | ||||
struct ext4_extent_path * | int ext4_ext_find_extent(struct inode *, daddr_t, struct ext4_extent_path **); | ||||
ext4_ext_find_extent(struct m_ext2fs *fs, | void ext4_ext_path_free(struct ext4_extent_path *path); | ||||
struct inode *, daddr_t, struct ext4_extent_path *); | int ext4_ext_remove_space(struct inode *ip, off_t length, int flags, | ||||
struct ucred *cred, struct thread *td); | |||||
int ext4_ext_get_blocks(struct inode *ip, int64_t iblock, | |||||
unsigned long max_blocks, struct ucred *cred, struct buf **bpp, int *allocate, uint32_t *); | |||||
#ifdef EXT2FS_DEBUG | |||||
void ext4_ext_print_extent_tree_status(struct inode * ip); | |||||
#endif | |||||
#endif /* !_FS_EXT2FS_EXT2_EXTENTS_H_ */ | #endif /* !_FS_EXT2FS_EXT2_EXTENTS_H_ */ | ||||
Context not available. |