2014-05-13 17:30:47 -07:00
/*
* Copyright ( C ) 2014 Facebook . 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 .
*/
# ifndef __BTRFS_QGROUP__
# define __BTRFS_QGROUP__
2015-04-16 14:34:17 +08:00
# include "ulist.h"
# include "delayed-ref.h"
/*
* Record a dirty extent , and info qgroup to update quota on it
* TODO : Use kmem cache to alloc it .
*/
struct btrfs_qgroup_extent_record {
struct rb_node node ;
u64 bytenr ;
u64 num_bytes ;
struct ulist * old_roots ;
} ;
2014-05-13 17:30:47 -07:00
int btrfs_quota_enable ( struct btrfs_trans_handle * trans ,
struct btrfs_fs_info * fs_info ) ;
int btrfs_quota_disable ( struct btrfs_trans_handle * trans ,
struct btrfs_fs_info * fs_info ) ;
int btrfs_qgroup_rescan ( struct btrfs_fs_info * fs_info ) ;
void btrfs_qgroup_rescan_resume ( struct btrfs_fs_info * fs_info ) ;
int btrfs_qgroup_wait_for_completion ( struct btrfs_fs_info * fs_info ) ;
int btrfs_add_qgroup_relation ( struct btrfs_trans_handle * trans ,
struct btrfs_fs_info * fs_info , u64 src , u64 dst ) ;
int btrfs_del_qgroup_relation ( struct btrfs_trans_handle * trans ,
struct btrfs_fs_info * fs_info , u64 src , u64 dst ) ;
int btrfs_create_qgroup ( struct btrfs_trans_handle * trans ,
2015-01-18 10:59:23 -05:00
struct btrfs_fs_info * fs_info , u64 qgroupid ) ;
2014-05-13 17:30:47 -07:00
int btrfs_remove_qgroup ( struct btrfs_trans_handle * trans ,
struct btrfs_fs_info * fs_info , u64 qgroupid ) ;
int btrfs_limit_qgroup ( struct btrfs_trans_handle * trans ,
struct btrfs_fs_info * fs_info , u64 qgroupid ,
struct btrfs_qgroup_limit * limit ) ;
int btrfs_read_qgroup_config ( struct btrfs_fs_info * fs_info ) ;
void btrfs_free_qgroup_config ( struct btrfs_fs_info * fs_info ) ;
struct btrfs_delayed_extent_op ;
2015-04-16 16:40:39 +08:00
int btrfs_qgroup_prepare_account_extents ( struct btrfs_trans_handle * trans ,
struct btrfs_fs_info * fs_info ) ;
2015-04-16 14:34:17 +08:00
struct btrfs_qgroup_extent_record
* btrfs_qgroup_insert_dirty_extent ( struct btrfs_delayed_ref_root * delayed_refs ,
struct btrfs_qgroup_extent_record * record ) ;
2015-04-16 17:18:36 +08:00
int
btrfs_qgroup_account_extent ( struct btrfs_trans_handle * trans ,
struct btrfs_fs_info * fs_info ,
u64 bytenr , u64 num_bytes ,
struct ulist * old_roots , struct ulist * new_roots ) ;
2015-04-16 15:37:33 +08:00
int btrfs_qgroup_account_extents ( struct btrfs_trans_handle * trans ,
struct btrfs_fs_info * fs_info ) ;
2014-05-13 17:30:47 -07:00
int btrfs_run_qgroups ( struct btrfs_trans_handle * trans ,
struct btrfs_fs_info * fs_info ) ;
int btrfs_qgroup_inherit ( struct btrfs_trans_handle * trans ,
struct btrfs_fs_info * fs_info , u64 srcid , u64 objectid ,
struct btrfs_qgroup_inherit * inherit ) ;
int btrfs_qgroup_reserve ( struct btrfs_root * root , u64 num_bytes ) ;
void btrfs_qgroup_free ( struct btrfs_root * root , u64 num_bytes ) ;
void assert_qgroups_uptodate ( struct btrfs_trans_handle * trans ) ;
# ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
int btrfs_verify_qgroup_counts ( struct btrfs_fs_info * fs_info , u64 qgroupid ,
u64 rfer , u64 excl ) ;
# endif
# endif /* __BTRFS_QGROUP__ */