2007-06-12 09: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 .
*/
2008-01-08 15:46:30 -05:00
# ifndef __BTRFS_TRANSACTION__
# define __BTRFS_TRANSACTION__
2007-04-30 15:25:45 -04:00
# include "btrfs_inode.h"
2007-03-16 16:20:31 -04:00
2007-03-22 15:59:16 -04:00
struct btrfs_transaction {
u64 transid ;
unsigned long num_writers ;
2007-08-10 16:22:09 -04:00
unsigned long num_joined ;
2007-03-22 15:59:16 -04:00
int in_commit ;
int use_count ;
int commit_done ;
2008-07-17 12:54:14 -04:00
int blocked ;
2007-04-19 21:01:03 -04:00
struct list_head list ;
2008-01-24 16:13:08 -05:00
struct extent_io_tree dirty_pages ;
2007-06-08 15:33:54 -04:00
unsigned long start_time ;
2007-03-22 15:59:16 -04:00
wait_queue_head_t writer_wait ;
wait_queue_head_t commit_wait ;
2008-01-08 15:46:30 -05:00
struct list_head pending_snapshots ;
2007-03-22 15:59:16 -04:00
} ;
2007-03-16 16:20:31 -04:00
struct btrfs_trans_handle {
u64 transid ;
unsigned long blocks_reserved ;
unsigned long blocks_used ;
2007-03-22 15:59:16 -04:00
struct btrfs_transaction * transaction ;
2007-04-30 15:25:45 -04:00
struct btrfs_block_group_cache * block_group ;
2007-08-08 20:17:12 -04:00
u64 alloc_exclude_start ;
u64 alloc_exclude_nr ;
2007-03-16 16:20:31 -04:00
} ;
2008-01-08 15:46:30 -05:00
struct btrfs_pending_snapshot {
struct btrfs_root * root ;
char * name ;
struct list_head list ;
} ;
2008-07-30 09:26:11 -04:00
struct btrfs_dirty_root {
struct list_head list ;
struct btrfs_root * root ;
struct btrfs_root * latest_root ;
} ;
2007-03-16 16:20:31 -04:00
2007-04-30 15:25:45 -04:00
static inline void btrfs_set_trans_block_group ( struct btrfs_trans_handle * trans ,
struct inode * inode )
{
trans - > block_group = BTRFS_I ( inode ) - > block_group ;
}
static inline void btrfs_update_inode_block_group ( struct
btrfs_trans_handle * trans ,
struct inode * inode )
{
BTRFS_I ( inode ) - > block_group = trans - > block_group ;
}
2007-08-10 16:22:09 -04:00
static inline void btrfs_set_inode_last_trans ( struct btrfs_trans_handle * trans ,
struct inode * inode )
{
BTRFS_I ( inode ) - > last_trans = trans - > transaction - > transid ;
}
2007-03-22 15:59:16 -04:00
int btrfs_end_transaction ( struct btrfs_trans_handle * trans ,
struct btrfs_root * root ) ;
struct btrfs_trans_handle * btrfs_start_transaction ( struct btrfs_root * root ,
int num_blocks ) ;
2008-07-17 12:54:14 -04:00
struct btrfs_trans_handle * btrfs_join_transaction ( struct btrfs_root * root ,
int num_blocks ) ;
2007-03-22 15:59:16 -04:00
int btrfs_write_and_wait_transaction ( struct btrfs_trans_handle * trans ,
struct btrfs_root * root ) ;
int btrfs_commit_tree_roots ( struct btrfs_trans_handle * trans ,
struct btrfs_root * root ) ;
2007-06-08 15:33:54 -04:00
2007-09-11 11:15:39 -04:00
int btrfs_add_dead_root ( struct btrfs_root * root , struct btrfs_root * latest ,
struct list_head * dead_list ) ;
2007-08-10 14:06:19 -04:00
int btrfs_defrag_root ( struct btrfs_root * root , int cacheonly ) ;
int btrfs_clean_old_snapshots ( struct btrfs_root * root ) ;
2007-10-15 16:14:19 -04:00
int btrfs_commit_transaction ( struct btrfs_trans_handle * trans ,
struct btrfs_root * root ) ;
2008-06-25 16:01:31 -04:00
int btrfs_end_transaction_throttle ( struct btrfs_trans_handle * trans ,
struct btrfs_root * root ) ;
2008-07-29 16:15:18 -04:00
void btrfs_throttle ( struct btrfs_root * root ) ;
2007-03-16 16:20:31 -04:00
# endif