2006-01-16 19:50:04 +03:00
/*
* Copyright ( C ) Sistina Software , Inc . 1997 - 2003 All rights reserved .
2008-01-28 20:13:02 +03:00
* Copyright ( C ) 2004 - 2008 Red Hat , Inc . All rights reserved .
2006-01-16 19:50:04 +03:00
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
2006-09-01 19:05:15 +04:00
* of the GNU General Public License version 2.
2006-01-16 19:50:04 +03:00
*/
# ifndef __RGRP_DOT_H__
# define __RGRP_DOT_H__
2006-09-05 18:39:21 +04:00
struct gfs2_rgrpd ;
struct gfs2_sbd ;
struct gfs2_holder ;
2009-05-20 13:48:47 +04:00
extern void gfs2_rgrp_verify ( struct gfs2_rgrpd * rgd ) ;
2006-01-16 19:50:04 +03:00
2006-09-04 20:49:07 +04:00
struct gfs2_rgrpd * gfs2_blk2rgrpd ( struct gfs2_sbd * sdp , u64 blk ) ;
2006-01-16 19:50:04 +03:00
struct gfs2_rgrpd * gfs2_rgrpd_get_first ( struct gfs2_sbd * sdp ) ;
struct gfs2_rgrpd * gfs2_rgrpd_get_next ( struct gfs2_rgrpd * rgd ) ;
2009-05-20 13:48:47 +04:00
extern void gfs2_clear_rgrpd ( struct gfs2_sbd * sdp ) ;
extern int gfs2_rindex_hold ( struct gfs2_sbd * sdp , struct gfs2_holder * ri_gh ) ;
2006-01-16 19:50:04 +03:00
2009-05-20 13:48:47 +04:00
extern int gfs2_rgrp_bh_get ( struct gfs2_rgrpd * rgd ) ;
extern void gfs2_rgrp_bh_hold ( struct gfs2_rgrpd * rgd ) ;
extern void gfs2_rgrp_bh_put ( struct gfs2_rgrpd * rgd ) ;
2006-01-16 19:50:04 +03:00
2009-05-20 13:48:47 +04:00
extern void gfs2_rgrp_repolish_clones ( struct gfs2_rgrpd * rgd ) ;
2006-01-16 19:50:04 +03:00
2009-05-20 13:48:47 +04:00
extern struct gfs2_alloc * gfs2_alloc_get ( struct gfs2_inode * ip ) ;
2006-09-05 23:41:57 +04:00
static inline void gfs2_alloc_put ( struct gfs2_inode * ip )
{
2008-01-10 18:18:55 +03:00
BUG_ON ( ip - > i_alloc = = NULL ) ;
kfree ( ip - > i_alloc ) ;
ip - > i_alloc = NULL ;
2006-09-05 23:41:57 +04:00
}
2006-01-16 19:50:04 +03:00
2009-05-20 13:48:47 +04:00
extern int gfs2_inplace_reserve_i ( struct gfs2_inode * ip , char * file ,
unsigned int line ) ;
2006-01-16 19:50:04 +03:00
# define gfs2_inplace_reserve(ip) \
gfs2_inplace_reserve_i ( ( ip ) , __FILE__ , __LINE__ )
2009-05-20 13:48:47 +04:00
extern void gfs2_inplace_release ( struct gfs2_inode * ip ) ;
2006-01-16 19:50:04 +03:00
2009-05-20 13:48:47 +04:00
extern int gfs2_alloc_block ( struct gfs2_inode * ip , u64 * bn , unsigned int * n ) ;
2009-07-31 19:19:40 +04:00
extern int gfs2_alloc_di ( struct gfs2_inode * ip , u64 * bn , u64 * generation ) ;
2006-01-16 19:50:04 +03:00
2009-05-20 13:48:47 +04:00
extern void gfs2_free_data ( struct gfs2_inode * ip , u64 bstart , u32 blen ) ;
extern void gfs2_free_meta ( struct gfs2_inode * ip , u64 bstart , u32 blen ) ;
extern void gfs2_free_di ( struct gfs2_rgrpd * rgd , struct gfs2_inode * ip ) ;
extern void gfs2_unlink_di ( struct inode * inode ) ;
2009-09-08 21:00:30 +04:00
extern int gfs2_check_blk_type ( struct gfs2_sbd * sdp , u64 no_addr ,
unsigned int type ) ;
2006-01-16 19:50:04 +03:00
struct gfs2_rgrp_list {
unsigned int rl_rgrps ;
unsigned int rl_space ;
struct gfs2_rgrpd * * rl_rgd ;
struct gfs2_holder * rl_ghs ;
} ;
2009-05-20 13:48:47 +04:00
extern void gfs2_rlist_add ( struct gfs2_sbd * sdp , struct gfs2_rgrp_list * rlist ,
u64 block ) ;
extern void gfs2_rlist_alloc ( struct gfs2_rgrp_list * rlist , unsigned int state ) ;
extern void gfs2_rlist_free ( struct gfs2_rgrp_list * rlist ) ;
extern u64 gfs2_ri_total ( struct gfs2_sbd * sdp ) ;
extern int gfs2_rgrp_dump ( struct seq_file * seq , const struct gfs2_glock * gl ) ;
2006-01-16 19:50:04 +03:00
# endif /* __RGRP_DOT_H__ */