xref: /openbmc/linux/fs/gfs2/rgrp.h (revision 93dc544c)
1  /*
2   * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
3   * Copyright (C) 2004-2008 Red Hat, Inc.  All rights reserved.
4   *
5   * This copyrighted material is made available to anyone wishing to use,
6   * modify, copy, or redistribute it subject to the terms and conditions
7   * of the GNU General Public License version 2.
8   */
9  
10  #ifndef __RGRP_DOT_H__
11  #define __RGRP_DOT_H__
12  
13  struct gfs2_rgrpd;
14  struct gfs2_sbd;
15  struct gfs2_holder;
16  
17  void gfs2_rgrp_verify(struct gfs2_rgrpd *rgd);
18  
19  struct gfs2_rgrpd *gfs2_blk2rgrpd(struct gfs2_sbd *sdp, u64 blk);
20  struct gfs2_rgrpd *gfs2_rgrpd_get_first(struct gfs2_sbd *sdp);
21  struct gfs2_rgrpd *gfs2_rgrpd_get_next(struct gfs2_rgrpd *rgd);
22  
23  void gfs2_clear_rgrpd(struct gfs2_sbd *sdp);
24  int gfs2_rindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ri_gh);
25  
26  int gfs2_rgrp_bh_get(struct gfs2_rgrpd *rgd);
27  void gfs2_rgrp_bh_hold(struct gfs2_rgrpd *rgd);
28  void gfs2_rgrp_bh_put(struct gfs2_rgrpd *rgd);
29  
30  void gfs2_rgrp_repolish_clones(struct gfs2_rgrpd *rgd);
31  
32  struct gfs2_alloc *gfs2_alloc_get(struct gfs2_inode *ip);
33  static inline void gfs2_alloc_put(struct gfs2_inode *ip)
34  {
35  	BUG_ON(ip->i_alloc == NULL);
36  	kfree(ip->i_alloc);
37  	ip->i_alloc = NULL;
38  }
39  
40  int gfs2_inplace_reserve_i(struct gfs2_inode *ip,
41  			 char *file, unsigned int line);
42  #define gfs2_inplace_reserve(ip) \
43  gfs2_inplace_reserve_i((ip), __FILE__, __LINE__)
44  
45  void gfs2_inplace_release(struct gfs2_inode *ip);
46  
47  unsigned char gfs2_get_block_type(struct gfs2_rgrpd *rgd, u64 block);
48  
49  u64 gfs2_alloc_block(struct gfs2_inode *ip, unsigned int *n);
50  u64 gfs2_alloc_di(struct gfs2_inode *ip, u64 *generation);
51  
52  void gfs2_free_data(struct gfs2_inode *ip, u64 bstart, u32 blen);
53  void gfs2_free_meta(struct gfs2_inode *ip, u64 bstart, u32 blen);
54  void gfs2_free_di(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip);
55  void gfs2_unlink_di(struct inode *inode);
56  
57  struct gfs2_rgrp_list {
58  	unsigned int rl_rgrps;
59  	unsigned int rl_space;
60  	struct gfs2_rgrpd **rl_rgd;
61  	struct gfs2_holder *rl_ghs;
62  };
63  
64  void gfs2_rlist_add(struct gfs2_sbd *sdp, struct gfs2_rgrp_list *rlist,
65  		    u64 block);
66  void gfs2_rlist_alloc(struct gfs2_rgrp_list *rlist, unsigned int state);
67  void gfs2_rlist_free(struct gfs2_rgrp_list *rlist);
68  u64 gfs2_ri_total(struct gfs2_sbd *sdp);
69  
70  #endif /* __RGRP_DOT_H__ */
71