2007-03-13 17:46:10 +03:00
# ifndef __BTRFS__
# define __BTRFS__
2007-02-02 17:18:22 +03:00
2007-03-02 02:59:40 +03:00
# include "list.h"
2007-03-12 23:22:34 +03:00
# include "kerncompat.h"
2007-03-02 02:59:40 +03:00
2007-03-13 23:47:54 +03:00
# define BTRFS_MAGIC "_BtRfS_M"
2007-02-02 17:18:22 +03:00
2007-03-13 23:47:54 +03:00
# define BTRFS_ROOT_TREE_OBJECTID 1
# define BTRFS_EXTENT_TREE_OBJECTID 2
# define BTRFS_FS_TREE_OBJECTID 3
2007-02-26 18:40:21 +03:00
/*
* the key defines the order in the tree , and so it also defines ( optimal )
* block layout . objectid corresonds to the inode number . The flags
* tells us things about the object , and is a kind of stream selector .
* so for a given inode , keys with flags of 1 might refer to the inode
* data , flags of 2 may point to file data in the btree and flags = = 3
* may point to extents .
*
* offset is the starting byte offset for this key in the stream .
2007-03-12 23:22:34 +03:00
*
* btrfs_disk_key is in disk byte order . struct btrfs_key is always
* in cpu native order . Otherwise they are identical and their sizes
* should be the same ( ie both packed )
2007-02-26 18:40:21 +03:00
*/
2007-03-12 23:22:34 +03:00
struct btrfs_disk_key {
__le64 objectid ;
__le64 offset ;
2007-03-14 21:26:53 +03:00
__le32 flags ;
2007-03-12 23:22:34 +03:00
} __attribute__ ( ( __packed__ ) ) ;
struct btrfs_key {
2007-02-02 17:18:22 +03:00
u64 objectid ;
u64 offset ;
2007-03-14 21:26:53 +03:00
u32 flags ;
2007-02-02 17:18:22 +03:00
} __attribute__ ( ( __packed__ ) ) ;
2007-02-26 18:40:21 +03:00
/*
* every tree block ( leaf or node ) starts with this header .
*/
2007-03-12 19:29:44 +03:00
struct btrfs_header {
2007-03-13 23:47:54 +03:00
u8 fsid [ 16 ] ; /* FS specific uuid */
2007-03-12 19:29:44 +03:00
__le64 blocknr ; /* which block this node is supposed to live in */
__le64 parentid ; /* objectid of the tree root */
__le32 csum ;
__le32 ham ;
__le16 nritems ;
__le16 flags ;
2007-02-26 18:40:21 +03:00
/* generation flags to be added */
2007-02-02 17:18:22 +03:00
} __attribute__ ( ( __packed__ ) ) ;
2007-03-13 17:46:10 +03:00
# define BTRFS_MAX_LEVEL 8
2007-03-14 21:14:43 +03:00
# define BTRFS_NODEPTRS_PER_BLOCK(r) (((r)->blocksize - \
sizeof ( struct btrfs_header ) ) / \
( sizeof ( struct btrfs_disk_key ) + sizeof ( u64 ) ) )
# define __BTRFS_LEAF_DATA_SIZE(bs) ((bs) - sizeof(struct btrfs_header))
# define BTRFS_LEAF_DATA_SIZE(r) (__BTRFS_LEAF_DATA_SIZE(r->blocksize))
2007-02-02 17:18:22 +03:00
2007-03-13 17:46:10 +03:00
struct btrfs_buffer ;
2007-02-26 18:40:21 +03:00
/*
* the super block basically lists the main trees of the FS
* it currently lacks any block count etc etc
*/
2007-03-13 17:46:10 +03:00
struct btrfs_super_block {
2007-03-13 23:47:54 +03:00
u8 fsid [ 16 ] ; /* FS specific uuid */
__le64 blocknr ; /* this block number */
__le32 csum ;
__le64 magic ;
2007-03-14 21:14:43 +03:00
__le32 blocksize ;
2007-03-13 23:47:54 +03:00
__le64 generation ;
__le64 root ;
__le64 total_blocks ;
__le64 blocks_used ;
2007-02-22 01:04:57 +03:00
} __attribute__ ( ( __packed__ ) ) ;
2007-02-26 18:40:21 +03:00
/*
2007-03-15 19:56:47 +03:00
* A leaf is full of items . offset and size tell us where to find
2007-02-26 18:40:21 +03:00
* the item in the leaf ( relative to the start of the data area )
*/
2007-03-13 03:12:07 +03:00
struct btrfs_item {
2007-03-12 23:22:34 +03:00
struct btrfs_disk_key key ;
2007-03-14 21:14:43 +03:00
__le32 offset ;
2007-03-13 03:12:07 +03:00
__le16 size ;
2007-02-02 17:18:22 +03:00
} __attribute__ ( ( __packed__ ) ) ;
2007-02-26 18:40:21 +03:00
/*
* leaves have an item area and a data area :
* [ item0 , item1 . . . . itemN ] [ free space ] [ dataN . . . data1 , data0 ]
*
* The data is separate from the items to get the keys closer together
* during searches .
*/
2007-03-13 17:46:10 +03:00
struct btrfs_leaf {
2007-03-12 19:29:44 +03:00
struct btrfs_header header ;
2007-03-14 21:14:43 +03:00
struct btrfs_item items [ ] ;
2007-02-02 17:18:22 +03:00
} __attribute__ ( ( __packed__ ) ) ;
2007-02-26 18:40:21 +03:00
/*
* all non - leaf blocks are nodes , they hold only keys and pointers to
* other blocks
*/
2007-03-14 21:14:43 +03:00
struct btrfs_key_ptr {
struct btrfs_disk_key key ;
__le64 blockptr ;
} __attribute__ ( ( __packed__ ) ) ;
2007-03-13 17:46:10 +03:00
struct btrfs_node {
2007-03-12 19:29:44 +03:00
struct btrfs_header header ;
2007-03-14 21:14:43 +03:00
struct btrfs_key_ptr ptrs [ ] ;
2007-02-02 17:18:22 +03:00
} __attribute__ ( ( __packed__ ) ) ;
2007-02-26 18:40:21 +03:00
/*
2007-03-13 17:46:10 +03:00
* btrfs_paths remember the path taken from the root down to the leaf .
* level 0 is always the leaf , and nodes [ 1. . . BTRFS_MAX_LEVEL ] will point
2007-02-26 18:40:21 +03:00
* to any other levels that are present .
*
* The slots array records the index of the item or block pointer
* used while walking the tree .
*/
2007-03-13 17:46:10 +03:00
struct btrfs_path {
struct btrfs_buffer * nodes [ BTRFS_MAX_LEVEL ] ;
int slots [ BTRFS_MAX_LEVEL ] ;
2007-02-02 17:18:22 +03:00
} ;
2007-02-24 14:24:44 +03:00
2007-03-15 19:56:47 +03:00
/*
* items in the extent btree are used to record the objectid of the
* owner of the block and the number of references
*/
struct btrfs_extent_item {
__le32 refs ;
__le64 owner ;
} __attribute__ ( ( __packed__ ) ) ;
struct btrfs_dir_item {
__le64 objectid ;
__le16 flags ;
u8 type ;
} __attribute__ ( ( __packed__ ) ) ;
struct btrfs_root_item {
__le64 blocknr ;
__le32 flags ;
__le64 block_limit ;
__le64 blocks_used ;
__le32 refs ;
} ;
/*
* in ram representation of the tree . extent_root is used for all allocations
* and for the extent tree extent_root root . current_insert is used
* only for the extent tree .
*/
struct btrfs_root {
struct btrfs_buffer * node ;
struct btrfs_buffer * commit_root ;
struct btrfs_root * extent_root ;
struct btrfs_root * tree_root ;
struct btrfs_key current_insert ;
struct btrfs_key last_insert ;
int fp ;
struct radix_tree_root cache_radix ;
struct radix_tree_root pinned_radix ;
struct list_head trans ;
struct list_head cache ;
int cache_size ;
int ref_cows ;
struct btrfs_root_item root_item ;
struct btrfs_key root_key ;
u32 blocksize ;
} ;
/* the lower bits in the key flags defines the item type */
# define BTRFS_KEY_TYPE_MAX 256
# define BTRFS_KEY_TYPE_MASK (BTRFS_KEY_TYPE_MAX - 1)
# define BTRFS_INODE_ITEM_KEY 1
# define BTRFS_DIR_ITEM_KEY 2
# define BTRFS_ROOT_ITEM_KEY 3
# define BTRFS_EXTENT_ITEM_KEY 4
# define BTRFS_STRING_ITEM_KEY 5
2007-03-13 17:46:10 +03:00
static inline u64 btrfs_extent_owner ( struct btrfs_extent_item * ei )
2007-03-13 16:49:06 +03:00
{
return le64_to_cpu ( ei - > owner ) ;
}
2007-03-13 17:46:10 +03:00
static inline void btrfs_set_extent_owner ( struct btrfs_extent_item * ei , u64 val )
2007-03-13 16:49:06 +03:00
{
ei - > owner = cpu_to_le64 ( val ) ;
}
2007-03-13 17:46:10 +03:00
static inline u32 btrfs_extent_refs ( struct btrfs_extent_item * ei )
2007-03-13 16:49:06 +03:00
{
return le32_to_cpu ( ei - > refs ) ;
}
2007-03-13 17:46:10 +03:00
static inline void btrfs_set_extent_refs ( struct btrfs_extent_item * ei , u32 val )
2007-03-13 16:49:06 +03:00
{
ei - > refs = cpu_to_le32 ( val ) ;
}
2007-03-13 17:46:10 +03:00
static inline u64 btrfs_node_blockptr ( struct btrfs_node * n , int nr )
2007-03-13 16:28:32 +03:00
{
2007-03-14 21:14:43 +03:00
return le64_to_cpu ( n - > ptrs [ nr ] . blockptr ) ;
2007-03-13 16:28:32 +03:00
}
2007-03-13 17:46:10 +03:00
static inline void btrfs_set_node_blockptr ( struct btrfs_node * n , int nr ,
u64 val )
2007-03-13 16:28:32 +03:00
{
2007-03-14 21:14:43 +03:00
n - > ptrs [ nr ] . blockptr = cpu_to_le64 ( val ) ;
2007-03-13 16:28:32 +03:00
}
2007-03-14 21:14:43 +03:00
static inline u32 btrfs_item_offset ( struct btrfs_item * item )
2007-03-13 03:12:07 +03:00
{
2007-03-14 21:14:43 +03:00
return le32_to_cpu ( item - > offset ) ;
2007-03-13 03:12:07 +03:00
}
2007-03-14 21:14:43 +03:00
static inline void btrfs_set_item_offset ( struct btrfs_item * item , u32 val )
2007-03-13 03:12:07 +03:00
{
2007-03-14 21:14:43 +03:00
item - > offset = cpu_to_le32 ( val ) ;
2007-03-13 03:12:07 +03:00
}
2007-03-14 21:14:43 +03:00
static inline u32 btrfs_item_end ( struct btrfs_item * item )
2007-03-13 03:12:07 +03:00
{
2007-03-14 21:14:43 +03:00
return le32_to_cpu ( item - > offset ) + le16_to_cpu ( item - > size ) ;
2007-03-13 03:12:07 +03:00
}
static inline u16 btrfs_item_size ( struct btrfs_item * item )
{
return le16_to_cpu ( item - > size ) ;
}
static inline void btrfs_set_item_size ( struct btrfs_item * item , u16 val )
{
item - > size = cpu_to_le16 ( val ) ;
}
2007-03-15 22:18:43 +03:00
static inline u64 btrfs_dir_objectid ( struct btrfs_dir_item * d )
{
return le64_to_cpu ( d - > objectid ) ;
}
static inline void btrfs_set_dir_objectid ( struct btrfs_dir_item * d , u64 val )
{
d - > objectid = cpu_to_le64 ( val ) ;
}
static inline u16 btrfs_dir_flags ( struct btrfs_dir_item * d )
{
return le16_to_cpu ( d - > flags ) ;
}
static inline void btrfs_set_dir_flags ( struct btrfs_dir_item * d , u16 val )
{
d - > flags = cpu_to_le16 ( val ) ;
}
static inline u8 btrfs_dir_type ( struct btrfs_dir_item * d )
{
return d - > type ;
}
static inline void btrfs_set_dir_type ( struct btrfs_dir_item * d , u8 val )
{
d - > type = val ;
}
static inline u32 btrfs_dir_name_len ( struct btrfs_item * i )
{
return btrfs_item_size ( i ) - sizeof ( struct btrfs_dir_item ) ;
}
2007-03-12 23:22:34 +03:00
static inline void btrfs_disk_key_to_cpu ( struct btrfs_key * cpu ,
struct btrfs_disk_key * disk )
{
cpu - > offset = le64_to_cpu ( disk - > offset ) ;
cpu - > flags = le32_to_cpu ( disk - > flags ) ;
cpu - > objectid = le64_to_cpu ( disk - > objectid ) ;
}
static inline void btrfs_cpu_key_to_disk ( struct btrfs_disk_key * disk ,
struct btrfs_key * cpu )
{
disk - > offset = cpu_to_le64 ( cpu - > offset ) ;
disk - > flags = cpu_to_le32 ( cpu - > flags ) ;
disk - > objectid = cpu_to_le64 ( cpu - > objectid ) ;
}
2007-03-15 19:56:47 +03:00
static inline u64 btrfs_disk_key_objectid ( struct btrfs_disk_key * disk )
2007-03-12 23:22:34 +03:00
{
return le64_to_cpu ( disk - > objectid ) ;
}
2007-03-15 19:56:47 +03:00
static inline void btrfs_set_disk_key_objectid ( struct btrfs_disk_key * disk ,
u64 val )
2007-03-12 23:22:34 +03:00
{
disk - > objectid = cpu_to_le64 ( val ) ;
}
2007-03-15 19:56:47 +03:00
static inline u64 btrfs_disk_key_offset ( struct btrfs_disk_key * disk )
2007-03-12 23:22:34 +03:00
{
return le64_to_cpu ( disk - > offset ) ;
}
2007-03-15 19:56:47 +03:00
static inline void btrfs_set_disk_key_offset ( struct btrfs_disk_key * disk ,
u64 val )
2007-03-12 23:22:34 +03:00
{
disk - > offset = cpu_to_le64 ( val ) ;
}
2007-03-15 19:56:47 +03:00
static inline u32 btrfs_disk_key_flags ( struct btrfs_disk_key * disk )
2007-03-12 23:22:34 +03:00
{
return le32_to_cpu ( disk - > flags ) ;
}
2007-03-15 19:56:47 +03:00
static inline void btrfs_set_disk_key_flags ( struct btrfs_disk_key * disk ,
u32 val )
2007-03-12 23:22:34 +03:00
{
disk - > flags = cpu_to_le32 ( val ) ;
}
2007-03-15 19:56:47 +03:00
static inline u32 btrfs_key_type ( struct btrfs_key * key )
{
return key - > flags & BTRFS_KEY_TYPE_MASK ;
}
static inline u32 btrfs_disk_key_type ( struct btrfs_disk_key * key )
{
return le32_to_cpu ( key - > flags ) & BTRFS_KEY_TYPE_MASK ;
}
static inline void btrfs_set_key_type ( struct btrfs_key * key , u32 type )
{
BUG_ON ( type > = BTRFS_KEY_TYPE_MAX ) ;
key - > flags = ( key - > flags & ~ ( ( u64 ) BTRFS_KEY_TYPE_MASK ) ) | type ;
}
static inline void btrfs_set_disk_key_type ( struct btrfs_disk_key * key , u32 type )
{
u32 flags = btrfs_disk_key_flags ( key ) ;
BUG_ON ( type > = BTRFS_KEY_TYPE_MAX ) ;
flags = ( flags & ~ ( ( u64 ) BTRFS_KEY_TYPE_MASK ) ) | type ;
btrfs_set_disk_key_flags ( key , flags ) ;
}
2007-03-12 19:29:44 +03:00
static inline u64 btrfs_header_blocknr ( struct btrfs_header * h )
2007-03-12 19:01:18 +03:00
{
2007-03-12 19:29:44 +03:00
return le64_to_cpu ( h - > blocknr ) ;
2007-03-12 19:01:18 +03:00
}
2007-03-12 19:29:44 +03:00
static inline void btrfs_set_header_blocknr ( struct btrfs_header * h , u64 blocknr )
2007-03-12 19:01:18 +03:00
{
2007-03-12 19:29:44 +03:00
h - > blocknr = cpu_to_le64 ( blocknr ) ;
2007-03-12 19:01:18 +03:00
}
2007-03-12 19:29:44 +03:00
static inline u64 btrfs_header_parentid ( struct btrfs_header * h )
2007-03-12 19:01:18 +03:00
{
2007-03-12 19:29:44 +03:00
return le64_to_cpu ( h - > parentid ) ;
2007-03-12 19:01:18 +03:00
}
2007-03-12 19:29:44 +03:00
static inline void btrfs_set_header_parentid ( struct btrfs_header * h ,
u64 parentid )
2007-03-12 19:01:18 +03:00
{
2007-03-12 19:29:44 +03:00
h - > parentid = cpu_to_le64 ( parentid ) ;
2007-03-12 19:01:18 +03:00
}
2007-03-12 19:29:44 +03:00
static inline u16 btrfs_header_nritems ( struct btrfs_header * h )
2007-03-12 19:01:18 +03:00
{
2007-03-12 19:29:44 +03:00
return le16_to_cpu ( h - > nritems ) ;
2007-03-12 19:01:18 +03:00
}
2007-03-12 19:29:44 +03:00
static inline void btrfs_set_header_nritems ( struct btrfs_header * h , u16 val )
2007-03-12 19:01:18 +03:00
{
2007-03-12 19:29:44 +03:00
h - > nritems = cpu_to_le16 ( val ) ;
2007-03-12 19:01:18 +03:00
}
2007-03-12 19:29:44 +03:00
static inline u16 btrfs_header_flags ( struct btrfs_header * h )
2007-03-12 19:01:18 +03:00
{
2007-03-12 19:29:44 +03:00
return le16_to_cpu ( h - > flags ) ;
2007-03-12 19:01:18 +03:00
}
2007-03-12 19:29:44 +03:00
static inline void btrfs_set_header_flags ( struct btrfs_header * h , u16 val )
2007-03-12 19:01:18 +03:00
{
2007-03-12 19:29:44 +03:00
h - > flags = cpu_to_le16 ( val ) ;
2007-03-12 19:01:18 +03:00
}
2007-03-12 19:29:44 +03:00
static inline int btrfs_header_level ( struct btrfs_header * h )
2007-03-12 19:01:18 +03:00
{
2007-03-13 17:46:10 +03:00
return btrfs_header_flags ( h ) & ( BTRFS_MAX_LEVEL - 1 ) ;
2007-03-12 19:01:18 +03:00
}
2007-03-12 19:29:44 +03:00
static inline void btrfs_set_header_level ( struct btrfs_header * h , int level )
2007-03-12 19:01:18 +03:00
{
2007-03-12 19:29:44 +03:00
u16 flags ;
2007-03-13 17:46:10 +03:00
BUG_ON ( level > BTRFS_MAX_LEVEL ) ;
flags = btrfs_header_flags ( h ) & ~ ( BTRFS_MAX_LEVEL - 1 ) ;
2007-03-12 19:01:18 +03:00
btrfs_set_header_flags ( h , flags | level ) ;
}
2007-03-13 17:46:10 +03:00
static inline int btrfs_is_leaf ( struct btrfs_node * n )
2007-03-12 19:01:18 +03:00
{
return ( btrfs_header_level ( & n - > header ) = = 0 ) ;
}
2007-03-13 23:47:54 +03:00
static inline u64 btrfs_root_blocknr ( struct btrfs_root_item * item )
{
return le64_to_cpu ( item - > blocknr ) ;
}
static inline void btrfs_set_root_blocknr ( struct btrfs_root_item * item , u64 val )
{
item - > blocknr = cpu_to_le64 ( val ) ;
}
static inline u32 btrfs_root_refs ( struct btrfs_root_item * item )
{
return le32_to_cpu ( item - > refs ) ;
}
static inline void btrfs_set_root_refs ( struct btrfs_root_item * item , u32 val )
{
item - > refs = cpu_to_le32 ( val ) ;
}
static inline u64 btrfs_super_blocknr ( struct btrfs_super_block * s )
{
return le64_to_cpu ( s - > blocknr ) ;
}
static inline void btrfs_set_super_blocknr ( struct btrfs_super_block * s , u64 val )
{
s - > blocknr = cpu_to_le64 ( val ) ;
}
static inline u64 btrfs_super_root ( struct btrfs_super_block * s )
{
return le64_to_cpu ( s - > root ) ;
}
static inline void btrfs_set_super_root ( struct btrfs_super_block * s , u64 val )
{
s - > root = cpu_to_le64 ( val ) ;
}
static inline u64 btrfs_super_total_blocks ( struct btrfs_super_block * s )
{
return le64_to_cpu ( s - > total_blocks ) ;
}
static inline void btrfs_set_super_total_blocks ( struct btrfs_super_block * s ,
u64 val )
{
s - > total_blocks = cpu_to_le64 ( val ) ;
}
static inline u64 btrfs_super_blocks_used ( struct btrfs_super_block * s )
{
return le64_to_cpu ( s - > blocks_used ) ;
}
static inline void btrfs_set_super_blocks_used ( struct btrfs_super_block * s ,
u64 val )
{
s - > blocks_used = cpu_to_le64 ( val ) ;
}
2007-03-14 21:14:43 +03:00
static inline u32 btrfs_super_blocksize ( struct btrfs_super_block * s )
2007-03-13 23:47:54 +03:00
{
2007-03-14 21:14:43 +03:00
return le32_to_cpu ( s - > blocksize ) ;
2007-03-13 23:47:54 +03:00
}
static inline void btrfs_set_super_blocksize ( struct btrfs_super_block * s ,
2007-03-14 21:14:43 +03:00
u32 val )
{
s - > blocksize = cpu_to_le32 ( val ) ;
}
static inline u8 * btrfs_leaf_data ( struct btrfs_leaf * l )
2007-03-13 23:47:54 +03:00
{
2007-03-14 21:14:43 +03:00
return ( u8 * ) l - > items ;
2007-03-13 23:47:54 +03:00
}
2007-03-14 17:31:29 +03:00
/* helper function to cast into the data area of the leaf. */
# define btrfs_item_ptr(leaf, slot, type) \
2007-03-14 21:14:43 +03:00
( ( type * ) ( btrfs_leaf_data ( leaf ) + \
btrfs_item_offset ( ( leaf ) - > items + ( slot ) ) ) )
2007-03-14 17:31:29 +03:00
2007-03-13 17:46:10 +03:00
struct btrfs_buffer * btrfs_alloc_free_block ( struct btrfs_root * root ) ;
int btrfs_inc_ref ( struct btrfs_root * root , struct btrfs_buffer * buf ) ;
int btrfs_free_extent ( struct btrfs_root * root , u64 blocknr , u64 num_blocks ) ;
int btrfs_search_slot ( struct btrfs_root * root , struct btrfs_key * key ,
struct btrfs_path * p , int ins_len , int cow ) ;
void btrfs_release_path ( struct btrfs_root * root , struct btrfs_path * p ) ;
void btrfs_init_path ( struct btrfs_path * p ) ;
int btrfs_del_item ( struct btrfs_root * root , struct btrfs_path * path ) ;
int btrfs_insert_item ( struct btrfs_root * root , struct btrfs_key * key ,
2007-03-15 19:56:47 +03:00
void * data , u32 data_size ) ;
int btrfs_insert_empty_item ( struct btrfs_root * root , struct btrfs_path * path ,
struct btrfs_key * cpu_key , u32 data_size ) ;
2007-03-13 17:46:10 +03:00
int btrfs_next_leaf ( struct btrfs_root * root , struct btrfs_path * path ) ;
2007-03-14 21:14:43 +03:00
int btrfs_leaf_free_space ( struct btrfs_root * root , struct btrfs_leaf * leaf ) ;
2007-03-13 17:46:10 +03:00
int btrfs_drop_snapshot ( struct btrfs_root * root , struct btrfs_buffer * snap ) ;
int btrfs_finish_extent_commit ( struct btrfs_root * root ) ;
2007-03-13 23:47:54 +03:00
int btrfs_del_root ( struct btrfs_root * root , struct btrfs_key * key ) ;
int btrfs_insert_root ( struct btrfs_root * root , struct btrfs_key * key ,
struct btrfs_root_item * item ) ;
int btrfs_update_root ( struct btrfs_root * root , struct btrfs_key * key ,
struct btrfs_root_item * item ) ;
int btrfs_find_last_root ( struct btrfs_root * root , u64 objectid ,
struct btrfs_root_item * item , struct btrfs_key * key ) ;
2007-03-15 22:18:43 +03:00
int btrfs_insert_dir_item ( struct btrfs_root * root , char * name , int name_len ,
u64 dir , u64 objectid , u8 type ) ;
int btrfs_lookup_dir_item ( struct btrfs_root * root , struct btrfs_path * path ,
u64 dir , char * name , int name_len , int mod ) ;
int btrfs_match_dir_item_name ( struct btrfs_root * root , struct btrfs_path * path ,
char * name , int name_len ) ;
2007-02-02 17:18:22 +03:00
# endif