1ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross/**************************************************************************** 2ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross **************************************************************************** 3ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *** 4ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *** This header was automatically generated from a Linux kernel header 5ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *** of the same name, to make information necessary for userspace to 6ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *** call into the kernel available to libc. It contains only constants, 7ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *** structures, and macros generated from the original header, and thus, 8ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *** contains no copyrightable information. 9ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *** 10ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross **************************************************************************** 11ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross ****************************************************************************/ 12ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#ifndef _EXT4_EXTENTS 13ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define _EXT4_EXTENTS 14ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 15ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#include "ext4.h" 16ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 17ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define AGGRESSIVE_TEST_ 18ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 19ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXTENTS_STATS__ 20ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 21ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define CHECK_BINSEARCH__ 22ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 23ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_DEBUG__ 24ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#ifdef EXT_DEBUG 25ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define ext_debug(a...) printk(a) 26ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#else 27ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define ext_debug(a...) 28ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#endif 29ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 30ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_STATS_ 31ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 32ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossstruct ext4_extent { 33ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __le32 ee_block; 34ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __le16 ee_len; 35ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __le16 ee_start_hi; 36ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __le32 ee_start_lo; 37ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross}; 38ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 39ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossstruct ext4_extent_idx { 40ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __le32 ei_block; 41ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __le32 ei_leaf_lo; 42ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __le16 ei_leaf_hi; 43ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __u16 ei_unused; 44ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross}; 45ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 46ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossstruct ext4_extent_header { 47ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __le16 eh_magic; 48ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __le16 eh_entries; 49ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __le16 eh_max; 50ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __le16 eh_depth; 51ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __le32 eh_generation; 52ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross}; 53ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 54ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT4_EXT_MAGIC 0xf30a 55ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 56ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossstruct ext4_ext_path { 57ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross ext4_fsblk_t p_block; 58ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross __u16 p_depth; 59ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross struct ext4_extent *p_ext; 60ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross struct ext4_extent_idx *p_idx; 61ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross struct ext4_extent_header *p_hdr; 62ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross struct buffer_head *p_bh; 63ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross}; 64ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 65ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT4_EXT_CACHE_NO 0 66ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT4_EXT_CACHE_GAP 1 67ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT4_EXT_CACHE_EXTENT 2 68ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 69ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_CONTINUE 0 70ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_BREAK 1 71ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_REPEAT 2 72ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 73ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_MAX_BLOCK 0xffffffff 74ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 75ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_INIT_MAX_LEN (1UL << 15) 76ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_UNINIT_MAX_LEN (EXT_INIT_MAX_LEN - 1) 77ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 78ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_FIRST_EXTENT(__hdr__) ((struct ext4_extent *) (((char *) (__hdr__)) + sizeof(struct ext4_extent_header))) 79ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_FIRST_INDEX(__hdr__) ((struct ext4_extent_idx *) (((char *) (__hdr__)) + sizeof(struct ext4_extent_header))) 80ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_HAS_FREE_INDEX(__path__) (le16_to_cpu((__path__)->p_hdr->eh_entries) < le16_to_cpu((__path__)->p_hdr->eh_max)) 81ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_LAST_EXTENT(__hdr__) (EXT_FIRST_EXTENT((__hdr__)) + le16_to_cpu((__hdr__)->eh_entries) - 1) 82ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_LAST_INDEX(__hdr__) (EXT_FIRST_INDEX((__hdr__)) + le16_to_cpu((__hdr__)->eh_entries) - 1) 83ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_MAX_EXTENT(__hdr__) (EXT_FIRST_EXTENT((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1) 84ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define EXT_MAX_INDEX(__hdr__) (EXT_FIRST_INDEX((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1) 85ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 86ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#endif 87ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 88ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 89