2007-06-12 17:07:21 +04:00
/*
* Copyright ( C ) 2007 Oracle . All rights reserved .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public
* License v2 as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* General Public License for more details .
*
* You should have received a copy of the GNU General Public
* License along with this program ; if not , write to the
* Free Software Foundation , Inc . , 59 Temple Place - Suite 330 ,
* Boston , MA 021110 - 1307 , USA .
*/
2007-02-02 17:18:22 +03:00
# ifndef __DISKIO__
# define __DISKIO__
2007-03-22 19:13:20 +03:00
# include <linux/buffer_head.h>
2007-02-02 17:18:22 +03:00
2007-03-22 19:13:20 +03:00
# define BTRFS_SUPER_INFO_OFFSET (16 * 1024)
2007-05-01 16:53:32 +04:00
enum btrfs_bh_state_bits {
BH_Checked = BH_PrivateStart ,
2007-08-10 22:42:37 +04:00
BH_Defrag ,
2007-09-11 03:58:16 +04:00
BH_DefragDone ,
2007-05-01 16:53:32 +04:00
} ;
BUFFER_FNS ( Checked , checked ) ;
2007-08-10 22:42:37 +04:00
BUFFER_FNS ( Defrag , defrag ) ;
2007-09-11 03:58:16 +04:00
BUFFER_FNS ( DefragDone , defrag_done ) ;
2007-05-01 16:53:32 +04:00
2007-03-22 19:13:20 +03:00
static inline struct btrfs_node * btrfs_buffer_node ( struct buffer_head * bh )
{
return ( struct btrfs_node * ) bh - > b_data ;
}
static inline struct btrfs_leaf * btrfs_buffer_leaf ( struct buffer_head * bh )
{
return ( struct btrfs_leaf * ) bh - > b_data ;
}
static inline struct btrfs_header * btrfs_buffer_header ( struct buffer_head * bh )
{
return & ( ( struct btrfs_node * ) bh - > b_data ) - > header ;
}
struct buffer_head * read_tree_block ( struct btrfs_root * root , u64 blocknr ) ;
2007-05-01 16:53:32 +04:00
int readahead_tree_block ( struct btrfs_root * root , u64 blocknr ) ;
2007-03-28 21:57:48 +04:00
struct buffer_head * btrfs_find_create_tree_block ( struct btrfs_root * root ,
u64 blocknr ) ;
2007-03-16 23:20:31 +03:00
int write_tree_block ( struct btrfs_trans_handle * trans , struct btrfs_root * root ,
2007-03-22 19:13:20 +03:00
struct buffer_head * buf ) ;
2007-03-16 23:20:31 +03:00
int dirty_tree_block ( struct btrfs_trans_handle * trans , struct btrfs_root * root ,
2007-03-22 19:13:20 +03:00
struct buffer_head * buf ) ;
2007-03-16 23:20:31 +03:00
int clean_tree_block ( struct btrfs_trans_handle * trans ,
2007-03-22 19:13:20 +03:00
struct btrfs_root * root , struct buffer_head * buf ) ;
2007-03-22 22:59:16 +03:00
int btrfs_commit_transaction ( struct btrfs_trans_handle * trans ,
struct btrfs_root * root ) ;
2007-04-02 18:50:19 +04:00
struct btrfs_root * open_ctree ( struct super_block * sb ) ;
2007-03-22 19:13:20 +03:00
int close_ctree ( struct btrfs_root * root ) ;
void btrfs_block_release ( struct btrfs_root * root , struct buffer_head * buf ) ;
2007-03-22 22:59:16 +03:00
int write_ctree_super ( struct btrfs_trans_handle * trans ,
struct btrfs_root * root ) ;
2007-03-28 21:57:48 +04:00
struct buffer_head * btrfs_find_tree_block ( struct btrfs_root * root , u64 blocknr ) ;
2007-03-29 23:15:27 +04:00
int btrfs_csum_data ( struct btrfs_root * root , char * data , size_t len ,
char * result ) ;
2007-04-09 18:42:37 +04:00
struct btrfs_root * btrfs_read_fs_root ( struct btrfs_fs_info * fs_info ,
2007-08-29 23:47:34 +04:00
struct btrfs_key * location ,
const char * name , int namelen ) ;
2007-06-22 22:16:25 +04:00
struct btrfs_root * btrfs_read_fs_root_no_radix ( struct btrfs_fs_info * fs_info ,
struct btrfs_key * location ) ;
2007-04-11 23:53:25 +04:00
u64 bh_blocknr ( struct buffer_head * bh ) ;
2007-04-12 18:43:05 +04:00
int btrfs_insert_dev_radix ( struct btrfs_root * root ,
struct block_device * bdev ,
2007-04-12 20:14:00 +04:00
u64 device_id ,
2007-04-12 18:43:05 +04:00
u64 block_start ,
u64 num_blocks ) ;
int btrfs_map_bh_to_logical ( struct btrfs_root * root , struct buffer_head * bh ,
u64 logical ) ;
2007-09-17 18:58:06 +04:00
void btrfs_btree_balance_dirty ( struct btrfs_root * root , unsigned long nr ) ;
2007-06-22 22:16:25 +04:00
int btrfs_free_fs_root ( struct btrfs_fs_info * fs_info , struct btrfs_root * root ) ;
2007-06-28 23:57:36 +04:00
void btrfs_mark_buffer_dirty ( struct buffer_head * bh ) ;
2007-02-02 17:18:22 +03:00
# endif