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 .
*/
2008-01-08 23:46:30 +03:00
# ifndef __BTRFS_TRANSACTION__
# define __BTRFS_TRANSACTION__
2007-04-30 23:25:45 +04:00
# include "btrfs_inode.h"
2009-03-13 17:10:06 +03:00
# include "delayed-ref.h"
2007-03-16 23:20:31 +03:00
2007-03-22 22:59:16 +03:00
struct btrfs_transaction {
u64 transid ;
2009-03-13 03:12:45 +03:00
/*
* total writers in this transaction , it must be zero before the
* transaction can end
*/
2007-03-22 22:59:16 +03:00
unsigned long num_writers ;
2009-03-13 03:12:45 +03:00
2007-08-11 00:22:09 +04:00
unsigned long num_joined ;
2007-03-22 22:59:16 +03:00
int in_commit ;
int use_count ;
int commit_done ;
2008-07-17 20:54:14 +04:00
int blocked ;
2007-04-20 05:01:03 +04:00
struct list_head list ;
2008-01-25 00:13:08 +03:00
struct extent_io_tree dirty_pages ;
2007-06-08 23:33:54 +04:00
unsigned long start_time ;
2007-03-22 22:59:16 +03:00
wait_queue_head_t writer_wait ;
wait_queue_head_t commit_wait ;
2008-01-08 23:46:30 +03:00
struct list_head pending_snapshots ;
2009-03-13 17:10:06 +03:00
struct btrfs_delayed_ref_root delayed_refs ;
2007-03-22 22:59:16 +03:00
} ;
2007-03-16 23:20:31 +03:00
struct btrfs_trans_handle {
u64 transid ;
unsigned long blocks_reserved ;
unsigned long blocks_used ;
2007-03-22 22:59:16 +03:00
struct btrfs_transaction * transaction ;
2008-12-12 00:30:39 +03:00
u64 block_group ;
2007-08-09 04:17:12 +04:00
u64 alloc_exclude_start ;
u64 alloc_exclude_nr ;
2009-03-13 17:10:06 +03:00
unsigned long delayed_ref_updates ;
2007-03-16 23:20:31 +03:00
} ;
2008-01-08 23:46:30 +03:00
struct btrfs_pending_snapshot {
2008-11-18 05:02:50 +03:00
struct dentry * dentry ;
2008-01-08 23:46:30 +03:00
struct btrfs_root * root ;
char * name ;
2008-11-18 05:02:50 +03:00
struct btrfs_key root_key ;
2008-01-08 23:46:30 +03:00
struct list_head list ;
} ;
2008-07-30 17:26:11 +04:00
struct btrfs_dirty_root {
struct list_head list ;
struct btrfs_root * root ;
struct btrfs_root * latest_root ;
} ;
2007-03-16 23:20:31 +03:00
2007-04-30 23: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 ;
}
2009-01-06 05:25:51 +03:00
static inline void btrfs_update_inode_block_group (
struct btrfs_trans_handle * trans ,
struct inode * inode )
2007-04-30 23:25:45 +04:00
{
BTRFS_I ( inode ) - > block_group = trans - > block_group ;
}
2007-08-11 00: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 22:59:16 +03: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 20:54:14 +04:00
struct btrfs_trans_handle * btrfs_join_transaction ( struct btrfs_root * root ,
int num_blocks ) ;
2008-08-04 18:41:27 +04:00
struct btrfs_trans_handle * btrfs_start_ioctl_transaction ( struct btrfs_root * r ,
int num_blocks ) ;
2007-03-22 22:59:16 +03: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 23:33:54 +04:00
2008-08-05 07:23:47 +04:00
int btrfs_add_dead_root ( struct btrfs_root * root , struct btrfs_root * latest ) ;
2007-08-10 22: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-16 00:14:19 +04:00
int btrfs_commit_transaction ( struct btrfs_trans_handle * trans ,
struct btrfs_root * root ) ;
2008-06-26 00:01:31 +04:00
int btrfs_end_transaction_throttle ( struct btrfs_trans_handle * trans ,
struct btrfs_root * root ) ;
2008-07-30 00:15:18 +04:00
void btrfs_throttle ( struct btrfs_root * root ) ;
2008-09-06 00:13:11 +04:00
int btrfs_record_root_in_trans ( struct btrfs_root * root ) ;
2008-09-12 00:17:57 +04:00
int btrfs_write_and_wait_marked_extents ( struct btrfs_root * root ,
struct extent_io_tree * dirty_pages ) ;
2007-03-16 23:20:31 +03:00
# endif