2006-01-16 19:50:04 +03:00
/*
* Copyright ( C ) Sistina Software , Inc . 1997 - 2003 All rights reserved .
2006-05-18 23:09:15 +04:00
* Copyright ( C ) 2004 - 2006 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 ;
2006-01-16 19:50:04 +03:00
void gfs2_rgrp_verify ( struct gfs2_rgrpd * rgd ) ;
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 ) ;
void gfs2_clear_rgrpd ( struct gfs2_sbd * sdp ) ;
int gfs2_rindex_hold ( struct gfs2_sbd * sdp , struct gfs2_holder * ri_gh ) ;
int gfs2_rgrp_bh_get ( struct gfs2_rgrpd * rgd ) ;
void gfs2_rgrp_bh_hold ( struct gfs2_rgrpd * rgd ) ;
void gfs2_rgrp_bh_put ( struct gfs2_rgrpd * rgd ) ;
void gfs2_rgrp_repolish_clones ( struct gfs2_rgrpd * rgd ) ;
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
int gfs2_inplace_reserve_i ( struct gfs2_inode * ip ,
char * file , unsigned int line ) ;
# define gfs2_inplace_reserve(ip) \
gfs2_inplace_reserve_i ( ( ip ) , __FILE__ , __LINE__ )
void gfs2_inplace_release ( struct gfs2_inode * ip ) ;
2006-09-04 20:49:07 +04:00
unsigned char gfs2_get_block_type ( struct gfs2_rgrpd * rgd , u64 block ) ;
2006-01-16 19:50:04 +03:00
2006-07-11 17:46:33 +04:00
u64 gfs2_alloc_data ( struct gfs2_inode * ip ) ;
u64 gfs2_alloc_meta ( struct gfs2_inode * ip ) ;
u64 gfs2_alloc_di ( struct gfs2_inode * ip , u64 * generation ) ;
2006-01-16 19:50:04 +03:00
2006-09-04 20:49:07 +04:00
void gfs2_free_data ( struct gfs2_inode * ip , u64 bstart , u32 blen ) ;
void gfs2_free_meta ( struct gfs2_inode * ip , u64 bstart , u32 blen ) ;
2006-01-16 19:50:04 +03:00
void gfs2_free_di ( struct gfs2_rgrpd * rgd , struct gfs2_inode * ip ) ;
2006-06-14 23:32:57 +04:00
void gfs2_unlink_di ( struct inode * inode ) ;
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 ;
} ;
void gfs2_rlist_add ( struct gfs2_sbd * sdp , struct gfs2_rgrp_list * rlist ,
2006-09-04 20:49:07 +04:00
u64 block ) ;
2006-01-16 19:50:04 +03:00
void gfs2_rlist_alloc ( struct gfs2_rgrp_list * rlist , unsigned int state ,
int flags ) ;
void gfs2_rlist_free ( struct gfs2_rgrp_list * rlist ) ;
2007-05-14 21:42:18 +04:00
u64 gfs2_ri_total ( struct gfs2_sbd * sdp ) ;
2006-01-16 19:50:04 +03:00
# endif /* __RGRP_DOT_H__ */