blob: b71cb617a079af39243e890cc368f389ee6e3fc2 [file] [log] [blame]
#ifndef _OCFS2_FS_H
#define _OCFS2_FS_H
/* Object signatures */
#define OCFS2_SUPER_BLOCK_SIGNATURE "OCFSV2"
#define OCFS2_VOL_UUID_LEN 16
#define OCFS2_MAX_VOL_LABEL_LEN 64
/*
* On disk superblock for OCFS2
* Note that it is contained inside an ocfs2_dinode, so all offsets
* are relative to the start of ocfs2_dinode.id2.
*/
struct ocfs2_super_block {
/*00*/ uint16_t s_major_rev_level;
uint16_t s_minor_rev_level;
uint16_t s_mnt_count;
int16_t s_max_mnt_count;
uint16_t s_state; /* File system state */
uint16_t s_errors; /* Behaviour when detecting errors */
uint32_t s_checkinterval; /* Max time between checks */
/*10*/ uint64_t s_lastcheck; /* Time of last check */
uint32_t s_creator_os; /* OS */
uint32_t s_feature_compat; /* Compatible feature set */
/*20*/ uint32_t s_feature_incompat; /* Incompatible feature set */
uint32_t s_feature_ro_compat; /* Readonly-compatible feature set */
uint64_t s_root_blkno; /* Offset, in blocks, of root directory
dinode */
/*30*/ uint64_t s_system_dir_blkno; /* Offset, in blocks, of system
directory dinode */
uint32_t s_blocksize_bits; /* Blocksize for this fs */
uint32_t s_clustersize_bits; /* Clustersize for this fs */
/*40*/ uint16_t s_max_slots; /* Max number of simultaneous mounts
before tunefs required */
uint16_t s_reserved1;
uint32_t s_reserved2;
uint64_t s_first_cluster_group; /* Block offset of 1st cluster
* group header */
/*50*/ uint8_t s_label[OCFS2_MAX_VOL_LABEL_LEN]; /* Label for mounting, etc. */
/*90*/ uint8_t s_uuid[OCFS2_VOL_UUID_LEN]; /* 128-bit uuid */
/*A0*/
} __attribute__ ((packed));
/*
* On disk inode for OCFS2
*/
struct ocfs2_dinode {
/*00*/ uint8_t i_signature[8]; /* Signature for validation */
uint32_t i_generation; /* Generation number */
uint16_t i_suballoc_slot; /* Slot suballocator this inode
belongs to */
int16_t i_suballoc_bit; /* Bit offset in suballocator
block group */
/*10*/ uint32_t i_reserved0;
uint32_t i_clusters; /* Cluster count */
uint32_t i_uid; /* Owner UID */
uint32_t i_gid; /* Owning GID */
/*20*/ uint64_t i_size; /* Size in bytes */
uint16_t i_mode; /* File mode */
uint16_t i_links_count; /* Links count */
uint32_t i_flags; /* File flags */
/*30*/ uint64_t i_atime; /* Access time */
uint64_t i_ctime; /* Creation time */
/*40*/ uint64_t i_mtime; /* Modification time */
uint64_t i_dtime; /* Deletion time */
/*50*/ uint64_t i_blkno; /* Offset on disk, in blocks */
uint64_t i_last_eb_blk; /* Pointer to last extent
block */
/*60*/ uint32_t i_fs_generation; /* Generation per fs-instance */
uint32_t i_atime_nsec;
uint32_t i_ctime_nsec;
uint32_t i_mtime_nsec;
uint32_t i_attr;
uint16_t i_orphaned_slot; /* Only valid when OCFS2_ORPHANED_FL
was set in i_flags */
uint16_t i_reserved1;
/*70*/ uint64_t i_reserved2[8];
/*B8*/ uint64_t i_pad1;
uint64_t i_rdev; /* Device number */
uint32_t i_used; /* Bits (ie, clusters) used */
uint32_t i_total; /* Total bits (clusters)
available */
uint32_t ij_flags; /* Mounted, version, etc. */
uint32_t ij_pad;
/*C0*/ struct ocfs2_super_block i_super;
/* Actual on-disk size is one block */
} __attribute__ ((packed));
#endif /* _OCFS2_FS_H */