Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 636587 Details for
Bug 872150
GFS2: [RFE] gfs2-utils shouldn't depend on kernel headers
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
Userspace port of linux/gfs2_ondisk.h
libgfs2_types.h (text/x-chdr), 12.00 KB, created by
Andrew Price
on 2012-11-01 11:53:36 UTC
(
hide
)
Description:
Userspace port of linux/gfs2_ondisk.h
Filename:
MIME Type:
Creator:
Andrew Price
Created:
2012-11-01 11:53:36 UTC
Size:
12.00 KB
patch
obsolete
>#ifndef __LGFS2_TYPES_H__ >#define __LGFS2_TYPES_H__ > >#include <stdint.h> >#include <byteswap.h> > >/* Define the bitwise attribute for sparse */ >#ifdef __CHECKER__ > #define __bitwise__ __attribute__((bitwise)) >#else > #define __bitwise__ >#endif >#ifdef __CHECK_ENDIAN__ > #define __bitwise __bitwise__ >#else > #define __bitwise >#endif > >/* Unsigned integer types */ >typedef uint8_t lgfs2_u8; >typedef uint16_t lgfs2_u16; >typedef uint32_t lgfs2_u32; >typedef uint64_t lgfs2_u64; > >/* Big endian integer types */ >typedef uint8_t __bitwise lgfs2_be8; >typedef uint16_t __bitwise lgfs2_be16; >typedef uint32_t __bitwise lgfs2_be32; >typedef uint64_t __bitwise lgfs2_be64; > >#define LGFS2_MAGIC 0x01161970 >#define LGFS2_BASIC_BLOCK 512 >#define LGFS2_BASIC_BLOCK_SHIFT 9 > >/* Lock numbers of the LM_TYPE_NONDISK type */ > >#define LGFS2_MOUNT_LOCK 0 >#define LGFS2_LIVE_LOCK 1 >#define LGFS2_TRANS_LOCK 2 >#define LGFS2_RENAME_LOCK 3 > >/* Format numbers for various metadata types */ >#define LGFS2_FORMAT_NONE 0 >#define LGFS2_FORMAT_SB 100 >#define LGFS2_FORMAT_RG 200 >#define LGFS2_FORMAT_RB 300 >#define LGFS2_FORMAT_DI 400 >#define LGFS2_FORMAT_IN 500 >#define LGFS2_FORMAT_LF 600 >#define LGFS2_FORMAT_JD 700 >#define LGFS2_FORMAT_LH 800 >#define LGFS2_FORMAT_LD 900 >#define LGFS2_FORMAT_LB 1000 >#define LGFS2_FORMAT_EA 1600 >#define LGFS2_FORMAT_ED 1700 >#define LGFS2_FORMAT_QC 1400 >/* These are format numbers for entities contained in files */ >#define LGFS2_FORMAT_RI 1100 >#define LGFS2_FORMAT_DE 1200 >#define LGFS2_FORMAT_QU 1500 >/* These are part of the superblock */ >#define LGFS2_FORMAT_FS 1801 >#define LGFS2_FORMAT_MULTI 1900 > >/* > * An on-disk inode number > */ > >struct lgfs2_inum { > lgfs2_be64 no_formal_ino; > lgfs2_be64 no_addr; >}; > >/* > * Generic metadata head structure > * Every inplace buffer logged in the journal must start with this. > */ > >#define LGFS2_METATYPE_NONE 0 >#define LGFS2_METATYPE_SB 1 >#define LGFS2_METATYPE_RG 2 >#define LGFS2_METATYPE_RB 3 >#define LGFS2_METATYPE_DI 4 >#define LGFS2_METATYPE_IN 5 >#define LGFS2_METATYPE_LF 6 >#define LGFS2_METATYPE_JD 7 >#define LGFS2_METATYPE_LH 8 >#define LGFS2_METATYPE_LD 9 >#define LGFS2_METATYPE_LB 12 >#define LGFS2_METATYPE_EA 10 >#define LGFS2_METATYPE_ED 11 >#define LGFS2_METATYPE_QC 14 > >struct lgfs2_meta_header { > lgfs2_be32 mh_magic; > lgfs2_be32 mh_type; > lgfs2_be64 __pad0; /* Was generation number in gfs1 */ > lgfs2_be32 mh_format; > /* This union is to keep userspace happy */ > union { > lgfs2_be32 mh_jid; /* Was incarnation number in gfs1 */ > lgfs2_be32 __pad1; > }; >}; > >/* > * super-block structure > * > * It's probably good if SIZEOF_SB <= LGFS2_BASIC_BLOCK (512 bytes) > * > * Order is important, need to be able to read old superblocks to do on-disk > * version upgrades. > */ > >/* Address of superblock in GFS2 basic blocks */ >#define LGFS2_SB_ADDR 128 > >/* The lock number for the superblock (must be zero) */ >#define LGFS2_SB_LOCK 0 > >/* Requirement: LGFS2_LOCKNAME_LEN % 8 == 0 > Includes: the fencing zero at the end */ >#define LGFS2_LOCKNAME_LEN 64 > >struct lgfs2_sb { > struct lgfs2_meta_header sb_header; > > lgfs2_be32 sb_fs_format; > lgfs2_be32 sb_multihost_format; > lgfs2_u32 __pad0; /* Was superblock flags in gfs1 */ > > lgfs2_be32 sb_bsize; > lgfs2_be32 sb_bsize_shift; > lgfs2_u32 __pad1; /* Was journal segment size in gfs1 */ > > struct lgfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */ > struct lgfs2_inum __pad2; /* Was rindex dinode in gfs1 */ > struct lgfs2_inum sb_root_dir; > > char sb_lockproto[LGFS2_LOCKNAME_LEN]; > char sb_locktable[LGFS2_LOCKNAME_LEN]; > > struct lgfs2_inum __pad3; /* Was quota inode in gfs1 */ > struct lgfs2_inum __pad4; /* Was licence inode in gfs1 */ >#define LGFS2_HAS_UUID 1 > lgfs2_u8 sb_uuid[16]; /* The UUID, maybe 0 for backwards compat */ >}; > >/* > * resource index structure > */ > >struct lgfs2_rindex { > lgfs2_be64 ri_addr; /* grp block disk address */ > lgfs2_be32 ri_length; /* length of rgrp header in fs blocks */ > lgfs2_u32 __pad; > > lgfs2_be64 ri_data0; /* first data location */ > lgfs2_be32 ri_data; /* num of data blocks in rgrp */ > > lgfs2_be32 ri_bitbytes; /* number of bytes in data bitmaps */ > > lgfs2_u8 ri_reserved[64]; >}; > >/* > * resource group header structure > */ > >/* Number of blocks per byte in rgrp */ >#define LGFS2_NBBY 4 >#define LGFS2_BIT_SIZE 2 >#define LGFS2_BIT_MASK 0x00000003 > >#define LGFS2_BLKST_FREE 0 >#define LGFS2_BLKST_USED 1 >#define LGFS2_BLKST_UNLINKED 2 >#define LGFS2_BLKST_DINODE 3 > >#define LGFS2_RGF_JOURNAL 0x00000001 >#define LGFS2_RGF_METAONLY 0x00000002 >#define LGFS2_RGF_DATAONLY 0x00000004 >#define LGFS2_RGF_NOALLOC 0x00000008 > >struct lgfs2_rgrp { > struct lgfs2_meta_header rg_header; > > lgfs2_be32 rg_flags; > lgfs2_be32 rg_free; > lgfs2_be32 rg_dinodes; > lgfs2_be32 __pad; > lgfs2_be64 rg_igeneration; > > lgfs2_u8 rg_reserved[80]; /* Several fields from gfs1 now reserved */ >}; > >/* > * quota structure > */ > >struct lgfs2_quota { > lgfs2_be64 qu_limit; > lgfs2_be64 qu_warn; > lgfs2_be64 qu_value; > lgfs2_u8 qu_reserved[64]; >}; > >/* > * dinode structure > */ > >#define LGFS2_MAX_META_HEIGHT 10 >#define LGFS2_DIR_MAX_DEPTH 17 > >#define DT2IF(dt) (((dt) << 12) & S_IFMT) >#define IF2DT(sif) (((sif) & S_IFMT) >> 12) > >enum { > lgfs2fl_Jdata = 0, > lgfs2fl_ExHash = 1, > lgfs2fl_Unused = 2, > lgfs2fl_EaIndirect = 3, > lgfs2fl_Directio = 4, > lgfs2fl_Immutable = 5, > lgfs2fl_AppendOnly = 6, > lgfs2fl_NoAtime = 7, > lgfs2fl_Sync = 8, > lgfs2fl_System = 9, > lgfs2fl_TruncInProg = 29, > lgfs2fl_InheritDirectio = 30, > lgfs2fl_InheritJdata = 31, >}; > >/* Dinode flags */ >#define LGFS2_DIF_JDATA 0x00000001 >#define LGFS2_DIF_EXHASH 0x00000002 >#define LGFS2_DIF_UNUSED 0x00000004 /* only in gfs1 */ >#define LGFS2_DIF_EA_INDIRECT 0x00000008 >#define LGFS2_DIF_DIRECTIO 0x00000010 >#define LGFS2_DIF_IMMUTABLE 0x00000020 >#define LGFS2_DIF_APPENDONLY 0x00000040 >#define LGFS2_DIF_NOATIME 0x00000080 >#define LGFS2_DIF_SYNC 0x00000100 >#define LGFS2_DIF_SYSTEM 0x00000200 /* New in gfs2 */ >#define LGFS2_DIF_TRUNC_IN_PROG 0x20000000 /* New in gfs2 */ >#define LGFS2_DIF_INHERIT_DIRECTIO 0x40000000 >#define LGFS2_DIF_INHERIT_JDATA 0x80000000 > >struct lgfs2_dinode { > struct lgfs2_meta_header di_header; > > struct lgfs2_inum di_num; > > lgfs2_be32 di_mode; /* mode of file */ > lgfs2_be32 di_uid; /* owner's user id */ > lgfs2_be32 di_gid; /* owner's group id */ > lgfs2_be32 di_nlink; /* number of links to this file */ > lgfs2_be64 di_size; /* number of bytes in file */ > lgfs2_be64 di_blocks; /* number of blocks in file */ > lgfs2_be64 di_atime; /* time last accessed */ > lgfs2_be64 di_mtime; /* time last modified */ > lgfs2_be64 di_ctime; /* time last changed */ > lgfs2_be32 di_major; /* device major number */ > lgfs2_be32 di_minor; /* device minor number */ > > /* This section varies from gfs1. Padding added to align with > * remainder of dinode > */ > lgfs2_be64 di_goal_meta; /* rgrp to alloc from next */ > lgfs2_be64 di_goal_data; /* data block goal */ > lgfs2_be64 di_generation; /* generation number for NFS */ > > lgfs2_be32 di_flags; /* LGFS2_DIF_... */ > lgfs2_be32 di_payload_format; /* LGFS2_FORMAT_... */ > lgfs2_u16 __pad1; /* Was ditype in gfs1 */ > lgfs2_be16 di_height; /* height of metadata */ > lgfs2_u32 __pad2; /* Unused incarnation number from gfs1 */ > > /* These only apply to directories */ > lgfs2_u16 __pad3; /* Padding */ > lgfs2_be16 di_depth; /* Number of bits in the table */ > lgfs2_be32 di_entries; /* The number of entries in the directory */ > > struct lgfs2_inum __pad4; /* Unused even in current gfs1 */ > > lgfs2_be64 di_eattr; /* extended attribute block number */ > lgfs2_be32 di_atime_nsec; /* nsec portion of atime */ > lgfs2_be32 di_mtime_nsec; /* nsec portion of mtime */ > lgfs2_be32 di_ctime_nsec; /* nsec portion of ctime */ > > lgfs2_u8 di_reserved[44]; >}; > >/* > * directory structure - many of these per directory file > */ > >#define LGFS2_FNAMESIZE 255 >#define LGFS2_DIRENT_SIZE(name_len) ((sizeof(struct lgfs2_dirent) + (name_len) + 7) & ~7) > >struct lgfs2_dirent { > struct lgfs2_inum de_inum; > lgfs2_be32 de_hash; > lgfs2_be16 de_rec_len; > lgfs2_be16 de_name_len; > lgfs2_be16 de_type; > lgfs2_u8 __pad[14]; >}; > >/* > * Header of leaf directory nodes > */ > >struct lgfs2_leaf { > struct lgfs2_meta_header lf_header; > > lgfs2_be16 lf_depth; /* Depth of leaf */ > lgfs2_be16 lf_entries; /* Number of dirents in leaf */ > lgfs2_be32 lf_dirent_format; /* Format of the dirents */ > lgfs2_be64 lf_next; /* Next leaf, if overflow */ > > lgfs2_u8 lf_reserved[64]; >}; > >/* > * Extended attribute header format > * > * This works in a similar way to dirents. There is a fixed size header > * followed by a variable length section made up of the name and the > * associated data. In the case of a "stuffed" entry, the value is > * inline directly after the name, the ea_num_ptrs entry will be > * zero in that case. For non-"stuffed" entries, there will be > * a set of pointers (aligned to 8 byte boundary) to the block(s) > * containing the value. > * > * The blocks containing the values and the blocks containing the > * extended attribute headers themselves all start with the common > * metadata header. Each inode, if it has extended attributes, will > * have either a single block containing the extended attribute headers > * or a single indirect block pointing to blocks containing the > * extended attribure headers. > * > * The maximim size of the data part of an extended attribute is 64k > * so the number of blocks required depends upon block size. Since the > * block size also determines the number of pointers in an indirect > * block, its a fairly complicated calculation to work out the maximum > * number of blocks that an inode may have relating to extended attributes. > * > */ > >#define LGFS2_EA_MAX_NAME_LEN 255 >#define LGFS2_EA_MAX_DATA_LEN 65536 > >#define LGFS2_EATYPE_UNUSED 0 >#define LGFS2_EATYPE_USR 1 >#define LGFS2_EATYPE_SYS 2 >#define LGFS2_EATYPE_SECURITY 3 > >#define LGFS2_EATYPE_LAST 3 >#define LGFS2_EATYPE_VALID(x) ((x) <= LGFS2_EATYPE_LAST) > >#define LGFS2_EAFLAG_LAST 0x01 /* last ea in block */ > >struct lgfs2_ea_header { > lgfs2_be32 ea_rec_len; > lgfs2_be32 ea_data_len; > lgfs2_u8 ea_name_len; /* no NULL pointer after the string */ > lgfs2_u8 ea_type; /* LGFS2_EATYPE_... */ > lgfs2_u8 ea_flags; /* LGFS2_EAFLAG_... */ > lgfs2_u8 ea_num_ptrs; > lgfs2_u32 __pad; >}; > >/* > * Log header structure > */ > >#define LGFS2_LOG_HEAD_UNMOUNT 0x00000001 /* log is clean */ > >struct lgfs2_log_header { > struct lgfs2_meta_header lh_header; > > lgfs2_be64 lh_sequence; /* Sequence number of this transaction */ > lgfs2_be32 lh_flags; /* LGFS2_LOG_HEAD_... */ > lgfs2_be32 lh_tail; /* Block number of log tail */ > lgfs2_be32 lh_blkno; > lgfs2_be32 lh_hash; >}; > >/* > * Log type descriptor > */ > >#define LGFS2_LOG_DESC_METADATA 300 >/* ld_data1 is the number of metadata blocks in the descriptor. > ld_data2 is unused. */ > >#define LGFS2_LOG_DESC_REVOKE 301 >/* ld_data1 is the number of revoke blocks in the descriptor. > ld_data2 is unused. */ > >#define LGFS2_LOG_DESC_JDATA 302 >/* ld_data1 is the number of data blocks in the descriptor. > ld_data2 is unused. */ > >struct lgfs2_log_descriptor { > struct lgfs2_meta_header ld_header; > > lgfs2_be32 ld_type; /* LGFS2_LOG_DESC_... */ > lgfs2_be32 ld_length; /* Number of buffers in this chunk */ > lgfs2_be32 ld_data1; /* descriptor-specific field */ > lgfs2_be32 ld_data2; /* descriptor-specific field */ > > lgfs2_u8 ld_reserved[32]; >}; > >/* > * Inum Range > * Describe a range of formal inode numbers allocated to > * one machine to assign to inodes. > */ > >#define LGFS2_INUM_QUANTUM 1048576 > >struct lgfs2_inum_range { > lgfs2_be64 ir_start; > lgfs2_be64 ir_length; >}; > >/* > * Statfs change > * Describes an change to the pool of free and allocated > * blocks. > */ > >struct lgfs2_statfs_change { > lgfs2_be64 sc_total; > lgfs2_be64 sc_free; > lgfs2_be64 sc_dinodes; >}; > >/* > * Quota change > * Describes an allocation change for a particular > * user or group. > */ > >#define LGFS2_QCF_USER 0x00000001 > >struct lgfs2_quota_change { > lgfs2_be64 qc_change; > lgfs2_be32 qc_flags; /* LGFS2_QCF_... */ > lgfs2_be32 qc_id; >}; > >struct lgfs2_quota_lvb { > lgfs2_be32 qb_magic; > lgfs2_u32 __pad; > lgfs2_be64 qb_limit; /* Hard limit of # blocks to alloc */ > lgfs2_be64 qb_warn; /* Warn user when alloc is above this # */ > lgfs2_be64 qb_value; /* Current # blocks allocated */ >}; > >#endif /* __LGFS2_TYPES_H__ */
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 872150
: 636587