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