Blame gfs2/libgfs2/libgfs2.h

Packit Service 360c39
#ifndef __LIBGFS2_DOT_H__
Packit Service 360c39
#define __LIBGFS2_DOT_H__
Packit Service 360c39
Packit Service 360c39
#include <features.h>
Packit Service 360c39
#include <inttypes.h>
Packit Service 360c39
#include <stdio.h>
Packit Service 360c39
#include <errno.h>
Packit Service 360c39
#include <sys/types.h>
Packit Service 360c39
#include <sys/stat.h>
Packit Service 360c39
#include <sys/uio.h>
Packit Service 360c39
#include <linux/types.h>
Packit Service 360c39
#include <linux/limits.h>
Packit Service 360c39
#include <endian.h>
Packit Service 360c39
#include <byteswap.h>
Packit Service 360c39
#include <mntent.h>
Packit Service 360c39
Packit Service 360c39
#include <linux/gfs2_ondisk.h>
Packit Service 360c39
#include "osi_list.h"
Packit Service 360c39
#include "osi_tree.h"
Packit Service 360c39
Packit Service 360c39
__BEGIN_DECLS
Packit Service 360c39
Packit Service 360c39
#ifndef TRUE
Packit Service 360c39
#define TRUE (1)
Packit Service 360c39
#endif
Packit Service 360c39
Packit Service 360c39
#ifndef FALSE
Packit Service 360c39
#define FALSE (0)
Packit Service 360c39
#endif
Packit Service 360c39
Packit Service 360c39
#if __BYTE_ORDER == __BIG_ENDIAN
Packit Service 360c39
Packit Service 360c39
#define be16_to_cpu(x) (x)
Packit Service 360c39
#define be32_to_cpu(x) (x)
Packit Service 360c39
#define be64_to_cpu(x) (x)
Packit Service 360c39
Packit Service 360c39
#define cpu_to_be16(x) (x)
Packit Service 360c39
#define cpu_to_be32(x) (x)
Packit Service 360c39
#define cpu_to_be64(x) (x)
Packit Service 360c39
Packit Service 360c39
#define le16_to_cpu(x) (bswap_16((x)))
Packit Service 360c39
#define le32_to_cpu(x) (bswap_32((x)))
Packit Service 360c39
#define le64_to_cpu(x) (bswap_64((x)))
Packit Service 360c39
Packit Service 360c39
#define cpu_to_le16(x) (bswap_16((x)))
Packit Service 360c39
#define cpu_to_le32(x) (bswap_32((x)))
Packit Service 360c39
#define cpu_to_le64(x) (bswap_64((x)))
Packit Service 360c39
Packit Service 360c39
#endif  /*  __BYTE_ORDER == __BIG_ENDIAN  */
Packit Service 360c39
Packit Service 360c39
Packit Service 360c39
#if __BYTE_ORDER == __LITTLE_ENDIAN
Packit Service 360c39
Packit Service 360c39
#define be16_to_cpu(x) (bswap_16((x)))
Packit Service 360c39
#define be32_to_cpu(x) (bswap_32((x)))
Packit Service 360c39
#define be64_to_cpu(x) (bswap_64((x)))
Packit Service 360c39
Packit Service 360c39
#define cpu_to_be16(x) (bswap_16((x)))
Packit Service 360c39
#define cpu_to_be32(x) (bswap_32((x)))
Packit Service 360c39
#define cpu_to_be64(x) (bswap_64((x))) 
Packit Service 360c39
Packit Service 360c39
#define le16_to_cpu(x) (x)
Packit Service 360c39
#define le32_to_cpu(x) (x)
Packit Service 360c39
#define le64_to_cpu(x) (x)
Packit Service 360c39
Packit Service 360c39
#define cpu_to_le16(x) (x)
Packit Service 360c39
#define cpu_to_le32(x) (x)
Packit Service 360c39
#define cpu_to_le64(x) (x)
Packit Service 360c39
Packit Service 360c39
#endif  /*  __BYTE_ORDER == __LITTLE_ENDIAN  */
Packit Service 360c39
Packit Service 360c39
enum lgfs2_meta_type {
Packit Service 360c39
	LGFS2_MT_GFS2_SB = 0,
Packit Service 360c39
	LGFS2_MT_GFS_SB = 1,
Packit Service 360c39
	LGFS2_MT_RINDEX = 2,
Packit Service 360c39
	LGFS2_MT_GFS2_RGRP = 3,
Packit Service 360c39
	LGFS2_MT_GFS_RGRP = 4,
Packit Service 360c39
	LGFS2_MT_RGRP_BITMAP = 5,
Packit Service 360c39
	LGFS2_MT_GFS2_DINODE = 6,
Packit Service 360c39
	LGFS2_MT_GFS_DINODE = 7,
Packit Service 360c39
	LGFS2_MT_GFS2_INDIRECT = 8,
Packit Service 360c39
	LGFS2_MT_GFS_INDIRECT = 9,
Packit Service 360c39
	LGFS2_MT_DIR_LEAF = 10,
Packit Service 360c39
	LGFS2_MT_JRNL_DATA = 11,
Packit Service 360c39
	LGFS2_MT_GFS2_LOG_HEADER = 12,
Packit Service 360c39
	LGFS2_MT_GFS_LOG_HEADER = 13,
Packit Service 360c39
	LGFS2_MT_GFS2_LOG_DESC = 14,
Packit Service 360c39
	LGFS2_MT_GFS_LOG_DESC = 15,
Packit Service 360c39
	LGFS2_MT_GFS2_LOG_BLOCK = 16,
Packit Service 360c39
	LGFS2_MT_EA_ATTR = 17,
Packit Service 360c39
	LGFS2_MT_EA_DATA = 18,
Packit Service 360c39
	LGFS2_MT_GFS2_QUOTA_CHANGE = 19,
Packit Service 360c39
	LGFS2_MT_DIRENT = 20,
Packit Service 360c39
	LGFS2_MT_EA_HEADER = 21,
Packit Service 360c39
	LGFS2_MT_GFS2_INUM_RANGE = 22,
Packit Service 360c39
	LGFS2_MT_STATFS_CHANGE = 23,
Packit Service 360c39
	LGFS2_MT_GFS_JINDEX = 24,
Packit Service 360c39
	LGFS2_MT_GFS_BLOCK_TAG = 25,
Packit Service 360c39
	LGFS2_MT_DATA = 26,
Packit Service 360c39
	LGFS2_MT_FREE = 27,
Packit Service 360c39
Packit Service 360c39
	LGFS2_MT_NR,
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct lgfs2_symbolic {
Packit Service 360c39
	const uint32_t key;
Packit Service 360c39
	const char *value;
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct lgfs2_metafield {
Packit Service 360c39
	const char *name;
Packit Service 360c39
	const unsigned offset;
Packit Service 360c39
	const unsigned length;
Packit Service 360c39
	const unsigned flags;
Packit Service 360c39
Packit Service 360c39
#define LGFS2_MFF_RESERVED 0x00001	/* Field is reserved */
Packit Service 360c39
#define LGFS2_MFF_POINTER  0x00002	/* Field is a pointer to a block */
Packit Service 360c39
#define LGFS2_MFF_ENUM     0x00004	/* Field is an enum */
Packit Service 360c39
#define LGFS2_MFF_MASK     0x00008	/* Field is a bitmask */
Packit Service 360c39
#define LGFS2_MFF_UUID     0x00010	/* Field is a UUID */
Packit Service 360c39
#define LGFS2_MFF_STRING   0x00020	/* Field in an ASCII string */
Packit Service 360c39
#define LGFS2_MFF_UID      0x00040	/* Field is a UID */
Packit Service 360c39
#define LGFS2_MFF_GID      0x00080	/* Field is a GID */
Packit Service 360c39
#define LGFS2_MFF_MODE     0x00100	/* Field is a file mode */
Packit Service 360c39
#define LGFS2_MFF_FSBLOCKS 0x00200	/* Units are fs blocks */
Packit Service 360c39
#define LGFS2_MFF_BYTES    0x00400	/* Units are bytes */
Packit Service 360c39
#define LGFS2_MFF_SHIFT    0x00800	/* Log_{2} quantity */
Packit Service 360c39
#define LGFS2_MFF_CHECK    0x01000	/* Field is a checksum */
Packit Service 360c39
#define LGFS2_MFF_SECS     0x02000	/* Units are seconds */
Packit Service 360c39
#define LGFS2_MFF_NSECS    0x04000	/* Units are nsecs */
Packit Service 360c39
#define LGFS2_MFF_MAJOR    0x08000	/* Major device number */
Packit Service 360c39
#define LGFS2_MFF_MINOR    0x10000	/* Minor device number */
Packit Service 360c39
Packit Service 360c39
	/* If it is a pointer, then this field must be set */
Packit Service 360c39
	const unsigned points_to;
Packit Service 360c39
	/* If isenum or ismask are set, these must also be filled in */
Packit Service 360c39
	const struct lgfs2_symbolic *symtab;
Packit Service 360c39
	const unsigned nsyms;
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct lgfs2_metadata {
Packit Service 360c39
	const unsigned versions:2;
Packit Service 360c39
#define LGFS2_MD_GFS1 0x01
Packit Service 360c39
#define LGFS2_MD_GFS2 0x02
Packit Service 360c39
	const unsigned header:1;
Packit Service 360c39
	const uint32_t mh_type;
Packit Service 360c39
	const uint32_t mh_format;
Packit Service 360c39
	const char *name;
Packit Service 360c39
	const struct lgfs2_metafield *fields;
Packit Service 360c39
	const unsigned nfields;
Packit Service 360c39
	const unsigned size;
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct lgfs2_dev_info {
Packit Service 360c39
	struct stat stat;
Packit Service 360c39
	unsigned readonly:1;
Packit Service 360c39
	long ra_pages;
Packit Service 360c39
	int soft_block_size;
Packit Service 360c39
	int logical_block_size;
Packit Service 360c39
	unsigned int physical_block_size;
Packit Service 360c39
	unsigned int io_min_size;
Packit Service 360c39
	unsigned int io_optimal_size;
Packit Service 360c39
	int io_align_offset;
Packit Service 360c39
	uint64_t size;
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct device {
Packit Service 360c39
	uint64_t length;
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct gfs2_bitmap
Packit Service 360c39
{
Packit Service 360c39
	struct gfs2_buffer_head *bi_bh;
Packit Service 360c39
	uint32_t   bi_offset;  /* The offset in the buffer of the first byte */
Packit Service 360c39
	uint32_t   bi_start;   /* The position of the first byte in this block */
Packit Service 360c39
	uint32_t   bi_len;     /* The number of bytes in this block */
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct gfs2_sbd;
Packit Service 360c39
struct gfs2_inode;
Packit Service 360c39
typedef struct _lgfs2_rgrps *lgfs2_rgrps_t;
Packit Service 360c39
Packit Service 360c39
struct rgrp_tree {
Packit Service 360c39
	struct osi_node node;
Packit Service 360c39
	uint64_t start;	   /* The offset of the beginning of this resource group */
Packit Service 360c39
	uint64_t length;	/* The length of this resource group */
Packit Service 360c39
Packit Service 360c39
	struct gfs2_rindex ri;
Packit Service 360c39
	struct gfs2_rgrp rg;
Packit Service 360c39
	struct gfs2_bitmap *bits;
Packit Service 360c39
	lgfs2_rgrps_t rgrps;
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
typedef struct rgrp_tree *lgfs2_rgrp_t;
Packit Service 360c39
Packit Service 360c39
extern lgfs2_rgrps_t lgfs2_rgrps_init(struct gfs2_sbd *sdp, uint64_t align, uint64_t offset);
Packit Service 360c39
extern void lgfs2_rgrps_free(lgfs2_rgrps_t *rgs);
Packit Service 360c39
extern uint64_t lgfs2_rindex_entry_new(lgfs2_rgrps_t rgs, struct gfs2_rindex *entry, uint64_t addr, uint32_t len);
Packit Service 360c39
extern unsigned lgfs2_rindex_read_fd(int fd, lgfs2_rgrps_t rgs);
Packit Service 360c39
extern const struct gfs2_rindex *lgfs2_rindex_read_one(struct gfs2_inode *rip, lgfs2_rgrps_t rgs, unsigned i);
Packit Service 360c39
extern uint64_t lgfs2_rgrp_align_addr(const lgfs2_rgrps_t rgs, uint64_t addr);
Packit Service 360c39
extern uint32_t lgfs2_rgrp_align_len(const lgfs2_rgrps_t rgs, uint32_t len);
Packit Service 360c39
extern unsigned lgfs2_rgsize_for_data(uint64_t blksreq, unsigned bsize);
Packit Service 360c39
extern uint32_t lgfs2_rgrps_plan(const lgfs2_rgrps_t rgs, uint64_t space, uint32_t tgtsize);
Packit Service 360c39
extern lgfs2_rgrp_t lgfs2_rgrps_append(lgfs2_rgrps_t rgs, struct gfs2_rindex *entry, uint32_t rg_skip);
Packit Service 360c39
extern int lgfs2_rgrp_bitbuf_alloc(lgfs2_rgrp_t rg);
Packit Service 360c39
extern void lgfs2_rgrp_bitbuf_free(lgfs2_rgrp_t rg);
Packit Service 360c39
extern int lgfs2_rgrp_write(int fd, lgfs2_rgrp_t rg);
Packit Service 360c39
extern const struct gfs2_rindex *lgfs2_rgrp_index(lgfs2_rgrp_t rg);
Packit Service 360c39
extern const struct gfs2_rgrp *lgfs2_rgrp_rgrp(lgfs2_rgrp_t rg);
Packit Service 360c39
extern lgfs2_rgrp_t lgfs2_rgrp_first(lgfs2_rgrps_t rgs);
Packit Service 360c39
extern lgfs2_rgrp_t lgfs2_rgrp_last(lgfs2_rgrps_t rgs);
Packit Service 360c39
extern lgfs2_rgrp_t lgfs2_rgrp_next(lgfs2_rgrp_t rg);
Packit Service 360c39
extern lgfs2_rgrp_t lgfs2_rgrp_prev(lgfs2_rgrp_t rg);
Packit Service 360c39
// Temporary function to aid API migration
Packit Service 360c39
extern struct osi_node *lgfs2_rgrps_root(lgfs2_rgrps_t rgs) __attribute__((deprecated));
Packit Service 360c39
Packit Service 360c39
struct gfs2_buffer_head {
Packit Service 360c39
	osi_list_t b_altlist; /* alternate list */
Packit Service 360c39
	uint64_t b_blocknr;
Packit Service 360c39
	union {
Packit Service 360c39
		char *b_data;
Packit Service 360c39
		struct iovec iov;
Packit Service 360c39
	};
Packit Service 360c39
	struct gfs2_sbd *sdp;
Packit Service 360c39
	int b_modified;
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct special_blocks {
Packit Service 360c39
	osi_list_t list;
Packit Service 360c39
	uint64_t block;
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct gfs2_inode {
Packit Service 360c39
	struct gfs2_dinode i_di;
Packit Service 360c39
	struct gfs2_buffer_head *i_bh;
Packit Service 360c39
	struct gfs2_sbd *i_sbd;
Packit Service 360c39
	struct rgrp_tree *i_rgd; /* performance hint */
Packit Service 360c39
	int bh_owned; /* Is this bh owned, iow, should we release it later? */
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct master_dir
Packit Service 360c39
{
Packit Service 360c39
	struct gfs2_inode *inum;
Packit Service 360c39
	uint64_t next_inum;
Packit Service 360c39
	struct gfs2_inode *statfs;
Packit Service 360c39
	struct gfs2_inode *qinode;
Packit Service 360c39
Packit Service 360c39
	struct gfs2_inode       *jiinode;
Packit Service 360c39
	struct gfs2_inode       *riinode;
Packit Service 360c39
	struct gfs2_inode       *rooti;
Packit Service 360c39
	struct gfs2_inode       *pinode;
Packit Service 360c39
Packit Service 360c39
	struct gfs2_inode **journal;      /* Array of journals */
Packit Service 360c39
	uint32_t journals;                /* Journal count */
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
#define LGFS2_SB_ADDR(sdp) (GFS2_SB_ADDR >> (sdp)->sd_fsb2bb_shift)
Packit Service 360c39
struct gfs2_sbd {
Packit Service 360c39
	struct gfs2_sb sd_sb;    /* a copy of the ondisk structure */
Packit Service 360c39
Packit Service 360c39
	unsigned int bsize;	     /* The block size of the FS (in bytes) */
Packit Service 360c39
	unsigned int jsize;	     /* Size of journals (in MB) */
Packit Service 360c39
	unsigned int rgsize;     /* Size of resource groups (in MB) */
Packit Service 360c39
	unsigned int qcsize;     /* Size of quota change files (in MB) */
Packit Service 360c39
Packit Service 360c39
	/* Constants */
Packit Service 360c39
Packit Service 360c39
	uint32_t sd_fsb2bb;
Packit Service 360c39
	uint32_t sd_fsb2bb_shift;
Packit Service 360c39
	uint32_t sd_diptrs;
Packit Service 360c39
	uint32_t sd_inptrs;
Packit Service 360c39
	uint32_t sd_jbsize;
Packit Service 360c39
	uint32_t sd_hash_bsize;
Packit Service 360c39
	uint32_t sd_hash_bsize_shift;
Packit Service 360c39
	uint32_t sd_hash_ptrs;
Packit Service 360c39
	uint32_t sd_blocks_per_bitmap;
Packit Service 360c39
	uint32_t sd_max_dirres;
Packit Service 360c39
	uint32_t sd_max_height;
Packit Service 360c39
	uint32_t sd_max_jheight;
Packit Service 360c39
	uint64_t sd_heightsize[GFS2_MAX_META_HEIGHT];
Packit Service 360c39
	uint64_t sd_jheightsize[GFS2_MAX_META_HEIGHT];
Packit Service 360c39
Packit Service 360c39
	/* Not specified on the command line, but... */
Packit Service 360c39
Packit Service 360c39
	int64_t time;
Packit Service 360c39
Packit Service 360c39
	struct lgfs2_dev_info dinfo;
Packit Service 360c39
	struct device device;
Packit Service 360c39
Packit Service 360c39
	int device_fd;
Packit Service 360c39
	int path_fd;
Packit Service 360c39
Packit Service 360c39
	uint64_t fssize;
Packit Service 360c39
	uint64_t blks_total;
Packit Service 360c39
	uint64_t blks_alloced;
Packit Service 360c39
	uint64_t dinodes_alloced;
Packit Service 360c39
Packit Service 360c39
	uint64_t orig_rgrps;
Packit Service 360c39
	uint64_t rgrps;
Packit Service 360c39
	uint64_t new_rgrps;
Packit Service 360c39
	struct osi_root rgtree;
Packit Service 360c39
	struct osi_root rgcalc;
Packit Service 360c39
Packit Service 360c39
	struct gfs2_inode *master_dir;
Packit Service 360c39
	struct master_dir md;
Packit Service 360c39
Packit Service 360c39
	uint64_t rg_one_length;
Packit Service 360c39
	uint64_t rg_length;
Packit Service 360c39
	int gfs1;
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct metapath {
Packit Service 360c39
	unsigned int mp_list[GFS2_MAX_META_HEIGHT];
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
Packit Service 360c39
#define GFS2_DEFAULT_BSIZE          (4096)
Packit Service 360c39
#define GFS2_DEFAULT_JSIZE          (128)
Packit Service 360c39
#define GFS2_MAX_JSIZE              (1024)
Packit Service 360c39
#define GFS2_MIN_JSIZE              (8)
Packit Service 360c39
#define GFS2_DEFAULT_RGSIZE         (256)
Packit Service 360c39
#define GFS2_DEFAULT_UTSIZE         (1)
Packit Service 360c39
#define GFS2_DEFAULT_QCSIZE         (1)
Packit Service 360c39
#define GFS2_DEFAULT_LOCKPROTO      "lock_dlm"
Packit Service 360c39
#define GFS2_MIN_GROW_SIZE          (10)
Packit Service 360c39
#define GFS2_EXCESSIVE_RGS          (10000)
Packit Service 360c39
Packit Service 360c39
#define GFS2_MIN_RGSIZE             (32)
Packit Service 360c39
#define GFS2_MAX_RGSIZE             (2048)
Packit Service 360c39
Packit Service 360c39
/* meta.c */
Packit Service 360c39
extern const struct lgfs2_metadata lgfs2_metadata[];
Packit Service 360c39
extern const unsigned lgfs2_metadata_size;
Packit Service 360c39
extern const struct lgfs2_symbolic lgfs2_metatypes[];
Packit Service 360c39
extern const unsigned lgfs2_metatype_size;
Packit Service 360c39
extern const struct lgfs2_symbolic lgfs2_metaformats[];
Packit Service 360c39
extern const unsigned lgfs2_metaformat_size;
Packit Service 360c39
extern const struct lgfs2_symbolic lgfs2_di_flags[];
Packit Service 360c39
extern const unsigned lgfs2_di_flag_size;
Packit Service 360c39
extern const struct lgfs2_symbolic lgfs2_lh_flags[];
Packit Service 360c39
extern const unsigned lgfs2_lh_flag_size;
Packit Service 360c39
extern const struct lgfs2_symbolic lgfs2_ld_types[];
Packit Service 360c39
extern const unsigned lgfs2_ld_type_size;
Packit Service 360c39
extern const struct lgfs2_symbolic lgfs2_ld1_types[];
Packit Service 360c39
extern const unsigned lgfs2_ld1_type_size;
Packit Service 360c39
extern int lgfs2_selfcheck(void);
Packit Service 360c39
extern const struct lgfs2_metadata *lgfs2_find_mtype(uint32_t mh_type, const unsigned versions);
Packit Service 360c39
extern const struct lgfs2_metadata *lgfs2_find_mtype_name(const char *name, const unsigned versions);
Packit Service 360c39
extern const struct lgfs2_metafield *lgfs2_find_mfield_name(const char *name, const struct lgfs2_metadata *mtype);
Packit Service 360c39
extern int lgfs2_field_str(char *str, const size_t size, const char *blk, const struct lgfs2_metafield *field, int hex);
Packit Service 360c39
extern int lgfs2_field_assign(char *blk, const struct lgfs2_metafield *field, const void *val);
Packit Service 360c39
Packit Service 360c39
/* block_list.c */
Packit Service 360c39
Packit Service 360c39
extern struct special_blocks *blockfind(struct special_blocks *blist, uint64_t num);
Packit Service 360c39
extern void gfs2_special_add(struct special_blocks *blocklist, uint64_t block);
Packit Service 360c39
extern void gfs2_special_set(struct special_blocks *blocklist, uint64_t block);
Packit Service 360c39
extern void gfs2_special_free(struct special_blocks *blist);
Packit Service 360c39
extern void gfs2_special_clear(struct special_blocks *blocklist,
Packit Service 360c39
			       uint64_t block);
Packit Service 360c39
Packit Service 360c39
/* buf.c */
Packit Service 360c39
extern struct gfs2_buffer_head *bget(struct gfs2_sbd *sdp, uint64_t num);
Packit Service 360c39
extern struct gfs2_buffer_head *__bread(struct gfs2_sbd *sdp, uint64_t num,
Packit Service 360c39
					int line, const char *caller);
Packit Service 360c39
extern int __breadm(struct gfs2_sbd *sdp, struct gfs2_buffer_head **bhs, size_t n, uint64_t block, int line, const char *caller);
Packit Service 360c39
extern int bwrite(struct gfs2_buffer_head *bh);
Packit Service 360c39
extern int brelse(struct gfs2_buffer_head *bh);
Packit Service 360c39
extern uint32_t lgfs2_get_block_type(const struct gfs2_buffer_head *lbh);
Packit Service 360c39
Packit Service 360c39
#define bmodified(bh) do { bh->b_modified = 1; } while(0)
Packit Service 360c39
Packit Service 360c39
#define bread(bl, num) __bread(bl, num, __LINE__, __FUNCTION__)
Packit Service 360c39
#define breadm(bl, bhs, n, block) __breadm(bl, bhs, n, block, __LINE__, __FUNCTION__)
Packit Service 360c39
Packit Service 360c39
/* config.c */
Packit Service 360c39
extern void lgfs2_set_debug(int enable);
Packit Service 360c39
Packit Service 360c39
/* device_geometry.c */
Packit Service 360c39
extern int lgfs2_get_dev_info(int fd, struct lgfs2_dev_info *i);
Packit Service 360c39
extern void fix_device_geometry(struct gfs2_sbd *sdp);
Packit Service 360c39
Packit Service 360c39
/* fs_bits.c */
Packit Service 360c39
#define BFITNOENT (0xFFFFFFFF)
Packit Service 360c39
Packit Service 360c39
/* functions with blk #'s that are buffer relative */
Packit Service 360c39
extern unsigned long gfs2_bitfit(const unsigned char *buffer,
Packit Service 360c39
				 const unsigned int buflen,
Packit Service 360c39
				 unsigned long goal, unsigned char old_state);
Packit Service 360c39
Packit Service 360c39
/* functions with blk #'s that are rgrp relative */
Packit Service 360c39
extern uint32_t gfs2_blkalloc_internal(struct rgrp_tree *rgd, uint32_t goal,
Packit Service 360c39
				       unsigned char old_state,
Packit Service 360c39
				       unsigned char new_state, int do_it);
Packit Service 360c39
extern int gfs2_check_range(struct gfs2_sbd *sdp, uint64_t blkno);
Packit Service 360c39
Packit Service 360c39
/* functions with blk #'s that are file system relative */
Packit Service 360c39
extern int lgfs2_get_bitmap(struct gfs2_sbd *sdp, uint64_t blkno, struct rgrp_tree *rgd);
Packit Service 360c39
extern int gfs2_set_bitmap(lgfs2_rgrp_t rg, uint64_t blkno, int state);
Packit Service 360c39
Packit Service 360c39
/* fs_geometry.c */
Packit Service 360c39
extern uint32_t rgblocks2bitblocks(const unsigned int bsize, const uint32_t rgblocks,
Packit Service 360c39
                                    uint32_t *ri_data) __attribute__((nonnull(3)));
Packit Service 360c39
extern int build_rgrps(struct gfs2_sbd *sdp, int write);
Packit Service 360c39
Packit Service 360c39
/* fs_ops.c */
Packit Service 360c39
#define IS_LEAF     (1)
Packit Service 360c39
#define IS_DINODE   (2)
Packit Service 360c39
Packit Service 360c39
extern void find_metapath(struct gfs2_inode *ip, uint64_t block, struct metapath *mp);
Packit Service 360c39
extern void lookup_block(struct gfs2_inode *ip, struct gfs2_buffer_head *bh,
Packit Service 360c39
			 unsigned int height, struct metapath *mp,
Packit Service 360c39
			 int create, int *new, uint64_t *block);
Packit Service 360c39
extern struct gfs2_inode *lgfs2_inode_get(struct gfs2_sbd *sdp,
Packit Service 360c39
				    struct gfs2_buffer_head *bh);
Packit Service 360c39
extern struct gfs2_inode *lgfs2_inode_read(struct gfs2_sbd *sdp, uint64_t di_addr);
Packit Service 360c39
extern struct gfs2_inode *is_system_inode(struct gfs2_sbd *sdp,
Packit Service 360c39
					  uint64_t block);
Packit Service 360c39
extern void inode_put(struct gfs2_inode **ip);
Packit Service 360c39
extern uint64_t data_alloc(struct gfs2_inode *ip);
Packit Service 360c39
extern int lgfs2_meta_alloc(struct gfs2_inode *ip, uint64_t *blkno);
Packit Service 360c39
extern int lgfs2_dinode_alloc(struct gfs2_sbd *sdp, const uint64_t blksreq, uint64_t *blkno);
Packit Service 360c39
extern uint64_t lgfs2_space_for_data(const struct gfs2_sbd *sdp, unsigned bsize, uint64_t bytes);
Packit Service 360c39
extern int lgfs2_file_alloc(lgfs2_rgrp_t rg, uint64_t di_size, struct gfs2_inode *ip, uint32_t flags, unsigned mode);
Packit Service 360c39
Packit Service 360c39
extern int gfs2_readi(struct gfs2_inode *ip, void *buf, uint64_t offset,
Packit Service 360c39
		      unsigned int size);
Packit Service 360c39
#define gfs2_writei(ip, buf, offset, size) \
Packit Service 360c39
	__gfs2_writei(ip, buf, offset, size, 1)
Packit Service 360c39
extern int __gfs2_writei(struct gfs2_inode *ip, void *buf, uint64_t offset,
Packit Service 360c39
			 unsigned int size, int resize);
Packit Service 360c39
extern struct gfs2_buffer_head *get_file_buf(struct gfs2_inode *ip,
Packit Service 360c39
					     uint64_t lbn, int prealloc);
Packit Service 360c39
extern int init_dinode(struct gfs2_sbd *sdp, struct gfs2_buffer_head **bhp, struct gfs2_inum *inum,
Packit Service 360c39
                       unsigned int mode, uint32_t flags, struct gfs2_inum *parent);
Packit Service 360c39
extern struct gfs2_inode *createi(struct gfs2_inode *dip, const char *filename,
Packit Service 360c39
				  unsigned int mode, uint32_t flags);
Packit Service 360c39
extern struct gfs2_inode *gfs_createi(struct gfs2_inode *dip,
Packit Service 360c39
				      const char *filename, unsigned int mode,
Packit Service 360c39
				      uint32_t flags);
Packit Service 360c39
extern void dirent2_del(struct gfs2_inode *dip, struct gfs2_buffer_head *bh,
Packit Service 360c39
			struct gfs2_dirent *prev, struct gfs2_dirent *cur);
Packit Service 360c39
extern int dir_search(struct gfs2_inode *dip, const char *filename, int len,
Packit Service 360c39
		      unsigned int *type, struct gfs2_inum *inum);
Packit Service 360c39
extern int gfs2_lookupi(struct gfs2_inode *dip, const char *filename, int len,
Packit Service 360c39
			struct gfs2_inode **ipp);
Packit Service 360c39
extern int dir_add(struct gfs2_inode *dip, const char *filename, int len,
Packit Service 360c39
		    struct gfs2_inum *inum, unsigned int type);
Packit Service 360c39
extern int gfs2_dirent_del(struct gfs2_inode *dip, const char *filename,
Packit Service 360c39
			   int filename_len);
Packit Service 360c39
extern void block_map(struct gfs2_inode *ip, uint64_t lblock, int *new,
Packit Service 360c39
		      uint64_t *dblock, uint32_t *extlen, int prealloc);
Packit Service 360c39
extern int lgfs2_get_leaf_ptr(struct gfs2_inode *dip, uint32_t index, uint64_t *ptr) __attribute__((warn_unused_result));
Packit Service 360c39
extern void dir_split_leaf(struct gfs2_inode *dip, uint32_t start,
Packit Service 360c39
			   uint64_t leaf_no, struct gfs2_buffer_head *obh);
Packit Service 360c39
extern void gfs2_free_block(struct gfs2_sbd *sdp, uint64_t block);
Packit Service 360c39
extern int gfs2_freedi(struct gfs2_sbd *sdp, uint64_t block);
Packit Service 360c39
extern int gfs2_get_leaf(struct gfs2_inode *dip, uint64_t leaf_no,
Packit Service 360c39
			 struct gfs2_buffer_head **bhp);
Packit Service 360c39
extern int gfs2_dirent_first(struct gfs2_inode *dip,
Packit Service 360c39
			     struct gfs2_buffer_head *bh,
Packit Service 360c39
			     struct gfs2_dirent **dent);
Packit Service 360c39
extern int gfs2_dirent_next(struct gfs2_inode *dip, struct gfs2_buffer_head *bh,
Packit Service 360c39
			    struct gfs2_dirent **dent);
Packit Service 360c39
extern void build_height(struct gfs2_inode *ip, int height);
Packit Service 360c39
extern void unstuff_dinode(struct gfs2_inode *ip);
Packit Service 360c39
extern unsigned int calc_tree_height(struct gfs2_inode *ip, uint64_t size);
Packit Service 360c39
extern int write_journal(struct gfs2_inode *jnl, unsigned bsize, unsigned blocks);
Packit Service 360c39
extern int lgfs2_write_journal_data(struct gfs2_inode *ip);
Packit Service 360c39
extern int lgfs2_write_filemeta(struct gfs2_inode *ip);
Packit Service 360c39
extern uint32_t lgfs2_log_header_hash(char *buf);
Packit Service 360c39
extern uint32_t lgfs2_log_header_crc(char *buf, unsigned bsize);
Packit Service 360c39
Packit Service 360c39
/* gfs1.c - GFS1 backward compatibility structures and functions */
Packit Service 360c39
Packit Service 360c39
#define GFS_FORMAT_SB           (100)  /* Super-Block */
Packit Service 360c39
#define GFS_METATYPE_SB         (1)    /* Super-Block */
Packit Service 360c39
#define GFS_FORMAT_FS           (1309) /* Filesystem (all-encompassing) */
Packit Service 360c39
#define GFS_FORMAT_MULTI        (1401) /* Multi-Host */
Packit Service 360c39
/* GFS1 Dinode types  */
Packit Service 360c39
#define GFS_FILE_NON            (0)
Packit Service 360c39
#define GFS_FILE_REG            (1)    /* regular file */
Packit Service 360c39
#define GFS_FILE_DIR            (2)    /* directory */
Packit Service 360c39
#define GFS_FILE_LNK            (5)    /* link */
Packit Service 360c39
#define GFS_FILE_BLK            (7)    /* block device node */
Packit Service 360c39
#define GFS_FILE_CHR            (8)    /* character device node */
Packit Service 360c39
#define GFS_FILE_FIFO           (101)  /* fifo/pipe */
Packit Service 360c39
#define GFS_FILE_SOCK           (102)  /* socket */
Packit Service 360c39
Packit Service 360c39
/* GFS 1 journal block types: */
Packit Service 360c39
#define GFS_LOG_DESC_METADATA   (300)    /* metadata */
Packit Service 360c39
#define GFS_LOG_DESC_IUL        (400)    /* unlinked inode */
Packit Service 360c39
#define GFS_LOG_DESC_IDA        (401)    /* de-allocated inode */
Packit Service 360c39
#define GFS_LOG_DESC_Q          (402)    /* quota */
Packit Service 360c39
#define GFS_LOG_DESC_LAST       (500)    /* final in a logged transaction */
Packit Service 360c39
Packit Service 360c39
struct gfs_indirect {
Packit Service 360c39
	struct gfs2_meta_header in_header;
Packit Service 360c39
Packit Service 360c39
	char in_reserved[64];
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct gfs_dinode {
Packit Service 360c39
	struct gfs2_meta_header di_header;
Packit Service 360c39
Packit Service 360c39
	struct gfs2_inum di_num; /* formal inode # and block address */
Packit Service 360c39
Packit Service 360c39
	__be32 di_mode;	/* mode of file */
Packit Service 360c39
	__be32 di_uid;	/* owner's user id */
Packit Service 360c39
	__be32 di_gid;	/* owner's group id */
Packit Service 360c39
	__be32 di_nlink;	/* number (qty) of links to this file */
Packit Service 360c39
	__be64 di_size;	/* number (qty) of bytes in file */
Packit Service 360c39
	__be64 di_blocks;	/* number (qty) of blocks in file */
Packit Service 360c39
	__be64 di_atime;	/* time last accessed */
Packit Service 360c39
	__be64 di_mtime;	/* time last modified */
Packit Service 360c39
	__be64 di_ctime;	/* time last changed */
Packit Service 360c39
Packit Service 360c39
	/*  Non-zero only for character or block device nodes  */
Packit Service 360c39
	__be32 di_major;	/* device major number */
Packit Service 360c39
	__be32 di_minor;	/* device minor number */
Packit Service 360c39
Packit Service 360c39
	/*  Block allocation strategy  */
Packit Service 360c39
	__be64 di_rgrp;	/* dinode rgrp block number */
Packit Service 360c39
	__be64 di_goal_rgrp;	/* rgrp to alloc from next */
Packit Service 360c39
	__be32 di_goal_dblk;	/* data block goal */
Packit Service 360c39
	__be32 di_goal_mblk;	/* metadata block goal */
Packit Service 360c39
Packit Service 360c39
	__be32 di_flags;	/* GFS_DIF_... */
Packit Service 360c39
Packit Service 360c39
	/*  struct gfs_rindex, struct gfs_jindex, or struct gfs_dirent */
Packit Service 360c39
	__be32 di_payload_format;  /* GFS_FORMAT_... */
Packit Service 360c39
	__be16 di_type;	/* GFS_FILE_... type of file */
Packit Service 360c39
	__be16 di_height;	/* height of metadata (0 == stuffed) */
Packit Service 360c39
	__be32 di_incarn;	/* incarnation (unused, see gfs_meta_header) */
Packit Service 360c39
	__be16 di_pad;
Packit Service 360c39
Packit Service 360c39
	/*  These only apply to directories  */
Packit Service 360c39
	__be16 di_depth;	/* Number of bits in the table */
Packit Service 360c39
	__be32 di_entries;	/* The # (qty) of entries in the directory */
Packit Service 360c39
Packit Service 360c39
	/*  This formed an on-disk chain of unused dinodes  */
Packit Service 360c39
	struct gfs2_inum di_next_unused;  /* used in old versions only */
Packit Service 360c39
Packit Service 360c39
	__be64 di_eattr;	/* extended attribute block number */
Packit Service 360c39
Packit Service 360c39
	char di_reserved[56];
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct gfs_sb {
Packit Service 360c39
	/*  Order is important; need to be able to read old superblocks
Packit Service 360c39
	    in order to support on-disk version upgrades */
Packit Service 360c39
	struct gfs2_meta_header sb_header;
Packit Service 360c39
Packit Service 360c39
	__be32 sb_fs_format;         /* GFS_FORMAT_FS (on-disk version) */
Packit Service 360c39
	__be32 sb_multihost_format;  /* GFS_FORMAT_MULTI */
Packit Service 360c39
	__be32 sb_flags;             /* ?? */
Packit Service 360c39
Packit Service 360c39
	__be32 sb_bsize;             /* fundamental FS block size in bytes */
Packit Service 360c39
	__be32 sb_bsize_shift;       /* log2(sb_bsize) */
Packit Service 360c39
	__be32 sb_seg_size;          /* Journal segment size in FS blocks */
Packit Service 360c39
Packit Service 360c39
	/* These special inodes do not appear in any on-disk directory. */
Packit Service 360c39
	struct gfs2_inum sb_jindex_di;  /* journal index inode */
Packit Service 360c39
	struct gfs2_inum sb_rindex_di;  /* resource group index inode */
Packit Service 360c39
	struct gfs2_inum sb_root_di;    /* root directory inode */
Packit Service 360c39
Packit Service 360c39
	/* Default inter-node locking protocol (lock module) and namespace */
Packit Service 360c39
	uint8_t sb_lockproto[GFS2_LOCKNAME_LEN]; /* lock protocol name */
Packit Service 360c39
	uint8_t sb_locktable[GFS2_LOCKNAME_LEN]; /* unique name for this FS */
Packit Service 360c39
Packit Service 360c39
	/* More special inodes */
Packit Service 360c39
	struct gfs2_inum sb_quota_di;   /* quota inode */
Packit Service 360c39
	struct gfs2_inum sb_license_di; /* license inode */
Packit Service 360c39
Packit Service 360c39
	char sb_reserved[96];
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct gfs_rgrp {
Packit Service 360c39
	struct gfs2_meta_header rg_header;
Packit Service 360c39
Packit Service 360c39
	__be32 rg_flags;
Packit Service 360c39
	__be32 rg_free;       /* Number (qty) of free data blocks */
Packit Service 360c39
Packit Service 360c39
	/* Dinodes are USEDMETA, but are handled separately from other METAs */
Packit Service 360c39
	__be32 rg_useddi;     /* Number (qty) of dinodes (used or free) */
Packit Service 360c39
	__be32 rg_freedi;     /* Number (qty) of unused (free) dinodes */
Packit Service 360c39
	struct gfs2_inum rg_freedi_list; /* 1st block in chain of free dinodes */
Packit Service 360c39
Packit Service 360c39
	/* These META statistics do not include dinodes (used or free) */
Packit Service 360c39
	__be32 rg_usedmeta;   /* Number (qty) of used metadata blocks */
Packit Service 360c39
	__be32 rg_freemeta;   /* Number (qty) of unused metadata blocks */
Packit Service 360c39
Packit Service 360c39
	char rg_reserved[64];
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct gfs_log_header {
Packit Service 360c39
	struct gfs2_meta_header lh_header;
Packit Service 360c39
Packit Service 360c39
	__be32 lh_flags;      /* GFS_LOG_HEAD_... */
Packit Service 360c39
	__be32 lh_pad;
Packit Service 360c39
Packit Service 360c39
	__be64 lh_first;     /* Block number of first header in this trans */
Packit Service 360c39
	__be64 lh_sequence;   /* Sequence number of this transaction */
Packit Service 360c39
Packit Service 360c39
	__be64 lh_tail;       /* Block number of log tail */
Packit Service 360c39
	__be64 lh_last_dump;  /* Block number of last dump */
Packit Service 360c39
Packit Service 360c39
	uint8_t lh_reserved[64];
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct gfs_jindex {
Packit Service 360c39
        __be64 ji_addr;       /* starting block of the journal */
Packit Service 360c39
        __be32 ji_nsegment;   /* number (quantity) of segments in journal */
Packit Service 360c39
        __be32 ji_pad;
Packit Service 360c39
Packit Service 360c39
        uint8_t ji_reserved[64];
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
struct gfs_log_descriptor {
Packit Service 360c39
	struct gfs2_meta_header ld_header;
Packit Service 360c39
Packit Service 360c39
	__be32 ld_type;       /* GFS_LOG_DESC_... Type of this log chunk */
Packit Service 360c39
	__be32 ld_length;     /* Number of buffers in this chunk */
Packit Service 360c39
	__be32 ld_data1;      /* descriptor-specific field */
Packit Service 360c39
	__be32 ld_data2;      /* descriptor-specific field */
Packit Service 360c39
	uint8_t ld_reserved[64];
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
extern int is_gfs_dir(struct gfs2_dinode *dinode);
Packit Service 360c39
extern void gfs1_lookup_block(struct gfs2_inode *ip,
Packit Service 360c39
			      struct gfs2_buffer_head *bh,
Packit Service 360c39
			      unsigned int height, struct metapath *mp,
Packit Service 360c39
			      int create, int *new, uint64_t *block);
Packit Service 360c39
extern void gfs1_block_map(struct gfs2_inode *ip, uint64_t lblock, int *new,
Packit Service 360c39
			   uint64_t *dblock, uint32_t *extlen, int prealloc);
Packit Service 360c39
extern int gfs1_writei(struct gfs2_inode *ip, char *buf, uint64_t offset,
Packit Service 360c39
		       unsigned int size);
Packit Service 360c39
extern int gfs1_ri_update(struct gfs2_sbd *sdp, int fd, int *rgcount, int quiet);
Packit Service 360c39
extern struct gfs2_inode *lgfs2_gfs_inode_get(struct gfs2_sbd *sdp,
Packit Service 360c39
					struct gfs2_buffer_head *bh);
Packit Service 360c39
extern struct gfs2_inode *lgfs2_gfs_inode_read(struct gfs2_sbd *sdp,
Packit Service 360c39
					 uint64_t di_addr);
Packit Service 360c39
extern void gfs_jindex_in(struct gfs_jindex *jindex, char *buf);
Packit Service 360c39
extern void gfs_rgrp_in(struct gfs_rgrp *rg, struct gfs2_buffer_head *bh);
Packit Service 360c39
extern void gfs_rgrp_out(struct gfs_rgrp *rg, struct gfs2_buffer_head *bh);
Packit Service 360c39
Packit Service 360c39
/* misc.c */
Packit Service 360c39
extern int compute_heightsize(unsigned bsize, uint64_t *heightsize,
Packit Service 360c39
		uint32_t *maxheight, uint32_t bsize1, int diptrs, int inptrs);
Packit Service 360c39
extern int compute_constants(struct gfs2_sbd *sdp);
Packit Service 360c39
extern int lgfs2_open_mnt(const char *path, int dirflags, int *dirfd, int devflags, int *devfd, struct mntent **mnt);
Packit Service 360c39
extern int lgfs2_open_mnt_dev(const char *path, int flags, struct mntent **mnt);
Packit Service 360c39
extern int lgfs2_open_mnt_dir(const char *path, int flags, struct mntent **mnt);
Packit Service 360c39
Packit Service 360c39
/* recovery.c */
Packit Service 360c39
extern void gfs2_replay_incr_blk(struct gfs2_inode *ip, unsigned int *blk);
Packit Service 360c39
extern int gfs2_replay_read_block(struct gfs2_inode *ip, unsigned int blk,
Packit Service 360c39
				  struct gfs2_buffer_head **bh);
Packit Service 360c39
extern int gfs2_revoke_add(struct gfs2_sbd *sdp, uint64_t blkno, unsigned int where);
Packit Service 360c39
extern int gfs2_revoke_check(struct gfs2_sbd *sdp, uint64_t blkno,
Packit Service 360c39
			     unsigned int where);
Packit Service 360c39
extern void gfs2_revoke_clean(struct gfs2_sbd *sdp);
Packit Service 360c39
extern int get_log_header(struct gfs2_inode *ip, unsigned int blk,
Packit Service 360c39
			  struct gfs2_log_header *head);
Packit Service 360c39
extern int gfs2_find_jhead(struct gfs2_inode *ip, struct gfs2_log_header *head);
Packit Service 360c39
extern int clean_journal(struct gfs2_inode *ip, struct gfs2_log_header *head);
Packit Service 360c39
Packit Service 360c39
/* rgrp.c */
Packit Service 360c39
extern int gfs2_compute_bitstructs(const uint32_t bsize, struct rgrp_tree *rgd);
Packit Service 360c39
extern struct rgrp_tree *gfs2_blk2rgrpd(struct gfs2_sbd *sdp, uint64_t blk);
Packit Service 360c39
extern int lgfs2_rgrp_crc_check(char *buf);
Packit Service 360c39
extern void lgfs2_rgrp_crc_set(char *buf);
Packit Service 360c39
extern uint64_t gfs2_rgrp_read(struct gfs2_sbd *sdp, struct rgrp_tree *rgd);
Packit Service 360c39
extern void gfs2_rgrp_relse(struct rgrp_tree *rgd);
Packit Service 360c39
extern struct rgrp_tree *rgrp_insert(struct osi_root *rgtree,
Packit Service 360c39
				     uint64_t rgblock);
Packit Service 360c39
extern void gfs2_rgrp_free(struct osi_root *rgrp_tree);
Packit Service 360c39
/* figure out the size of the given resource group, in blocks */
Packit Service 360c39
static inline unsigned int rgrp_size(struct rgrp_tree *rgrp)
Packit Service 360c39
{
Packit Service 360c39
	return rgrp->ri.ri_data + rgrp->ri.ri_length;
Packit Service 360c39
}
Packit Service 360c39
Packit Service 360c39
/* structures.c */
Packit Service 360c39
extern int build_master(struct gfs2_sbd *sdp);
Packit Service 360c39
extern void lgfs2_sb_init(struct gfs2_sb *sb, unsigned bsize);
Packit Service 360c39
extern int lgfs2_sb_write(const struct gfs2_sb *sb, int fd, const unsigned bsize);
Packit Service 360c39
extern int build_journal(struct gfs2_sbd *sdp, int j,
Packit Service 360c39
			 struct gfs2_inode *jindex);
Packit Service 360c39
extern int build_jindex(struct gfs2_sbd *sdp);
Packit Service 360c39
extern int lgfs2_build_jindex(struct gfs2_inode *master, struct gfs2_inum *jnls, size_t nmemb);
Packit Service 360c39
extern int build_per_node(struct gfs2_sbd *sdp);
Packit Service 360c39
extern int build_inum(struct gfs2_sbd *sdp);
Packit Service 360c39
extern int build_statfs(struct gfs2_sbd *sdp);
Packit Service 360c39
extern int build_rindex(struct gfs2_sbd *sdp);
Packit Service 360c39
extern int build_quota(struct gfs2_sbd *sdp);
Packit Service 360c39
extern int build_root(struct gfs2_sbd *sdp);
Packit Service 360c39
extern int do_init_inum(struct gfs2_sbd *sdp);
Packit Service 360c39
extern int do_init_statfs(struct gfs2_sbd *sdp);
Packit Service 360c39
extern int gfs2_check_meta(struct gfs2_buffer_head *bh, int type);
Packit Service 360c39
extern unsigned lgfs2_bm_scan(struct rgrp_tree *rgd, unsigned idx,
Packit Service 360c39
			      uint64_t *buf, uint8_t state);
Packit Service 360c39
extern int build_inum_range(struct gfs2_inode *per_node, unsigned int j);
Packit Service 360c39
extern int build_statfs_change(struct gfs2_inode *per_node, unsigned int j);
Packit Service 360c39
extern int build_quota_change(struct gfs2_inode *per_node, unsigned int j);
Packit Service 360c39
Packit Service 360c39
/* super.c */
Packit Service 360c39
extern int check_sb(struct gfs2_sb *sb);
Packit Service 360c39
extern int read_sb(struct gfs2_sbd *sdp);
Packit Service 360c39
extern int rindex_read(struct gfs2_sbd *sdp, int fd, uint64_t *count1,
Packit Service 360c39
		       int *sane);
Packit Service 360c39
extern int ri_update(struct gfs2_sbd *sdp, int fd, int *rgcount, int *sane);
Packit Service 360c39
extern int write_sb(struct gfs2_sbd *sdp);
Packit Service 360c39
Packit Service 360c39
/* ondisk.c */
Packit Service 360c39
extern uint32_t gfs2_disk_hash(const char *data, int len);
Packit Service 360c39
extern void print_it(const char *label, const char *fmt, const char *fmt2, ...)
Packit Service 360c39
	__attribute__((format(printf,2,4)));
Packit Service 360c39
Packit Service 360c39
/* Translation functions */
Packit Service 360c39
Packit Service 360c39
extern void gfs2_inum_in(struct gfs2_inum *no, char *buf);
Packit Service 360c39
extern void gfs2_inum_out(const struct gfs2_inum *no, char *buf);
Packit Service 360c39
extern void gfs2_meta_header_in(struct gfs2_meta_header *mh, char *buf);
Packit Service 360c39
extern void gfs2_meta_header_out(const struct gfs2_meta_header *mh, char *buf);
Packit Service 360c39
extern void gfs2_sb_in(struct gfs2_sb *sb, char *buf);
Packit Service 360c39
extern void gfs2_sb_out(const struct gfs2_sb *sb, char *buf);
Packit Service 360c39
extern void gfs2_rindex_in(struct gfs2_rindex *ri, char *buf);
Packit Service 360c39
extern void gfs2_rindex_out(const struct gfs2_rindex *ri, char *buf);
Packit Service 360c39
extern void gfs2_rgrp_in(struct gfs2_rgrp *rg, char *buf);
Packit Service 360c39
extern void gfs2_rgrp_out(const struct gfs2_rgrp *rg, char *buf);
Packit Service 360c39
extern void gfs2_quota_in(struct gfs2_quota *qu, char *buf);
Packit Service 360c39
extern void gfs2_quota_out(struct gfs2_quota *qu, char *buf);
Packit Service 360c39
extern void gfs2_dinode_in(struct gfs2_dinode *di, char *buf);
Packit Service 360c39
extern void gfs2_dinode_out(struct gfs2_dinode *di, char *buf);
Packit Service 360c39
extern void gfs2_dirent_in(struct gfs2_dirent *de, char *buf);
Packit Service 360c39
extern void gfs2_dirent_out(struct gfs2_dirent *de, char *buf);
Packit Service 360c39
extern void gfs2_leaf_in(struct gfs2_leaf *lf, char *buf);
Packit Service 360c39
extern void gfs2_leaf_out(struct gfs2_leaf *lf, char *buf);
Packit Service 360c39
extern void gfs2_ea_header_in(struct gfs2_ea_header *ea, char *buf);
Packit Service 360c39
extern void gfs2_log_header_v1_in(struct gfs2_log_header *lh, char *buf);
Packit Service 360c39
extern void gfs2_log_header_in(struct gfs2_log_header *lh, char *buf);
Packit Service 360c39
extern void gfs2_log_header_v1_out(struct gfs2_log_header *lh, char *buf);
Packit Service 360c39
extern void gfs2_log_header_out(struct gfs2_log_header *lh, char *buf);
Packit Service 360c39
extern void gfs2_log_descriptor_in(struct gfs2_log_descriptor *ld, char *buf);
Packit Service 360c39
extern void gfs2_log_descriptor_out(struct gfs2_log_descriptor *ld, char *buf);
Packit Service 360c39
extern void gfs2_statfs_change_in(struct gfs2_statfs_change *sc, char *buf);
Packit Service 360c39
extern void gfs2_statfs_change_out(struct gfs2_statfs_change *sc, char *buf);
Packit Service 360c39
extern void gfs2_quota_change_in(struct gfs2_quota_change *qc, char *buf);
Packit Service 360c39
extern void gfs2_quota_change_out(struct gfs2_quota_change *qc, char *buf);
Packit Service 360c39
Packit Service 360c39
/* Printing functions */
Packit Service 360c39
Packit Service 360c39
extern void gfs2_inum_print(const struct gfs2_inum *no);
Packit Service 360c39
extern void gfs2_meta_header_print(const struct gfs2_meta_header *mh);
Packit Service 360c39
extern void gfs2_sb_print(const struct gfs2_sb *sb);
Packit Service 360c39
extern void gfs2_rindex_print(const struct gfs2_rindex *ri);
Packit Service 360c39
extern void gfs2_rgrp_print(const struct gfs2_rgrp *rg);
Packit Service 360c39
extern void gfs2_quota_print(const struct gfs2_quota *qu);
Packit Service 360c39
extern void gfs2_dinode_print(const struct gfs2_dinode *di);
Packit Service 360c39
extern void gfs2_leaf_print(const struct gfs2_leaf *lf);
Packit Service 360c39
extern void gfs2_ea_header_print(const struct gfs2_ea_header *ea, char *name);
Packit Service 360c39
extern void gfs2_log_header_v1_print(const struct gfs2_log_header *lh);
Packit Service 360c39
extern void gfs2_log_header_print(const struct gfs2_log_header *lh);
Packit Service 360c39
extern void gfs2_log_descriptor_print(const struct gfs2_log_descriptor *ld);
Packit Service 360c39
extern void gfs2_statfs_change_print(const struct gfs2_statfs_change *sc);
Packit Service 360c39
extern void gfs2_quota_change_print(const struct gfs2_quota_change *qc);
Packit Service 360c39
Packit Service 360c39
/* Language functions */
Packit Service 360c39
Packit Service 360c39
struct lgfs2_lang_state;
Packit Service 360c39
Packit Service 360c39
struct lgfs2_lang_result {
Packit Service 360c39
	uint64_t lr_blocknr;
Packit Service 360c39
	struct gfs2_buffer_head *lr_bh;
Packit Service 360c39
	const struct lgfs2_metadata *lr_mtype;
Packit Service 360c39
	int lr_state; // GFS2_BLKST_*
Packit Service 360c39
};
Packit Service 360c39
Packit Service 360c39
extern struct lgfs2_lang_state *lgfs2_lang_init(void);
Packit Service 360c39
extern int lgfs2_lang_parsef(struct lgfs2_lang_state *state, FILE *script);
Packit Service 360c39
extern int lgfs2_lang_parses(struct lgfs2_lang_state *state, const char *script);
Packit Service 360c39
extern struct lgfs2_lang_result *lgfs2_lang_result_next(struct lgfs2_lang_state *state, struct gfs2_sbd *sbd);
Packit Service 360c39
extern int lgfs2_lang_result_print(struct lgfs2_lang_result *result);
Packit Service 360c39
extern void lgfs2_lang_result_free(struct lgfs2_lang_result **result);
Packit Service 360c39
extern void lgfs2_lang_free(struct lgfs2_lang_state **state);
Packit Service 360c39
Packit Service 360c39
__END_DECLS
Packit Service 360c39
Packit Service 360c39
#endif /* __LIBGFS2_DOT_H__ */