📄 jfs.h
字号:
/* jfs.h - an extractions from linux/include/linux/jfs/jfs* into one file *//* * GRUB -- GRand Unified Bootloader * Copyright (C) 2000 International Business Machines Corp. * Copyright (C) 2001 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. */#ifndef _JFS_H_#define _JFS_H_/* those are from jfs_filsys.h *//* * file system option (superblock flag) *//* platform option (conditional compilation) */#define JFS_AIX 0x80000000 /* AIX support *//* POSIX name/directory support */#define JFS_OS2 0x40000000 /* OS/2 support *//* case-insensitive name/directory support */#define JFS_LINUX 0x10000000 /* Linux support *//* case-sensitive name/directory support *//* directory option */#define JFS_UNICODE 0x00000001 /* unicode name *//* bba */#define JFS_SWAP_BYTES 0x00100000 /* running on big endian computer *//* * buffer cache configuration *//* page size */#ifdef PSIZE#undef PSIZE#endif#define PSIZE 4096 /* page size (in byte) *//* * fs fundamental size * * PSIZE >= file system block size >= PBSIZE >= DISIZE */#define PBSIZE 512 /* physical block size (in byte) */#define DISIZE 512 /* on-disk inode size (in byte) */#define L2DISIZE 9#define INOSPERIAG 4096 /* number of disk inodes per iag */#define L2INOSPERIAG 12#define INOSPEREXT 32 /* number of disk inode per extent */#define L2INOSPEREXT 5/* Minimum number of bytes supported for a JFS partition */#define MINJFS (0x1000000)/* * fixed byte offset address */#define SUPER1_OFF 0x8000 /* primary superblock */#define AITBL_OFF (SUPER1_OFF + PSIZE + (PSIZE << 1))/* * fixed reserved inode number *//* aggregate inode */#define AGGREGATE_I 1 /* aggregate inode map inode */#define FILESYSTEM_I 16 /* 1st/only fileset inode in ait: * fileset inode map inode *//* per fileset inode */#define ROOT_I 2 /* fileset root inode *//* * directory configuration */#define JFS_NAME_MAX 255#define JFS_PATH_MAX PSIZE#if 0typedef unsigned char u8;typedef char s8;typedef unsigned short u16;typedef short s16;typedef unsigned int u32;typedef int s32;typedef unsigned long long u64;typedef long long s64;#endiftypedef u16 UniChar;/* these from jfs_btree.h *//* btpaget_t flag */#define BT_TYPE 0x07 /* B+-tree index */#define BT_ROOT 0x01 /* root page */#define BT_LEAF 0x02 /* leaf page */#define BT_INTERNAL 0x04 /* internal page */#define BT_RIGHTMOST 0x10 /* rightmost page */#define BT_LEFTMOST 0x20 /* leftmost page *//* those are from jfs_types.h */struct timestruc_t { u32 tv_sec; u32 tv_nsec;};/* * physical xd (pxd) */typedef struct { unsigned len:24; unsigned addr1:8; u32 addr2;} pxd_t;/* xd_t field extraction */#define lengthPXD(pxd) ((pxd)->len)#define addressPXD(pxd) (((s64)((pxd)->addr1)) << 32 | ((pxd)->addr2))/* * data extent descriptor (dxd) */typedef struct { unsigned flag:8; /* 1: flags */ unsigned rsrvd:24; /* 3: */ u32 size; /* 4: size in byte */ unsigned len:24; /* 3: length in unit of fsblksize */ unsigned addr1:8; /* 1: address in unit of fsblksize */ u32 addr2; /* 4: address in unit of fsblksize */} dxd_t; /* - 16 - *//* * DASD limit information - stored in directory inode */typedef struct dasd { u8 thresh; /* Alert Threshold (in percent) */ u8 delta; /* Alert Threshold delta (in percent) */ u8 rsrvd1; u8 limit_hi; /* DASD limit (in logical blocks) */ u32 limit_lo; /* DASD limit (in logical blocks) */ u8 rsrvd2[3]; u8 used_hi; /* DASD usage (in logical blocks) */ u32 used_lo; /* DASD usage (in logical blocks) */} dasd_t;/* from jfs_superblock.h */#define JFS_MAGIC 0x3153464A /* "JFS1" */struct jfs_superblock{ u32 s_magic; /* 4: magic number */ u32 s_version; /* 4: version number */ s64 s_size; /* 8: aggregate size in hardware/LVM blocks; * VFS: number of blocks */ s32 s_bsize; /* 4: aggregate block size in bytes; * VFS: fragment size */ s16 s_l2bsize; /* 2: log2 of s_bsize */ s16 s_l2bfactor; /* 2: log2(s_bsize/hardware block size) */ s32 s_pbsize; /* 4: hardware/LVM block size in bytes */ s16 s_l2pbsize; /* 2: log2 of s_pbsize */ s16 pad; /* 2: padding necessary for alignment */ u32 s_agsize; /* 4: allocation group size in aggr. blocks */ u32 s_flag; /* 4: aggregate attributes: * see jfs_filsys.h */ u32 s_state; /* 4: mount/unmount/recovery state: * see jfs_filsys.h */ s32 s_compress; /* 4: > 0 if data compression */ pxd_t s_ait2; /* 8: first extent of secondary * aggregate inode table */ pxd_t s_aim2; /* 8: first extent of secondary * aggregate inode map */ u32 s_logdev; /* 4: device address of log */ s32 s_logserial; /* 4: log serial number at aggregate mount */ pxd_t s_logpxd; /* 8: inline log extent */ pxd_t s_fsckpxd; /* 8: inline fsck work space extent */ struct timestruc_t s_time; /* 8: time last updated */ s32 s_fsckloglen; /* 4: Number of filesystem blocks reserved for * the fsck service log. * N.B. These blocks are divided among the * versions kept. This is not a per * version size. * N.B. These blocks are included in the * length field of s_fsckpxd. */ s8 s_fscklog; /* 1: which fsck service log is most recent * 0 => no service log data yet * 1 => the first one * 2 => the 2nd one */ char s_fpack[11]; /* 11: file system volume name * N.B. This must be 11 bytes to * conform with the OS/2 BootSector * requirements */ /* extendfs() parameter under s_state & FM_EXTENDFS */ s64 s_xsize; /* 8: extendfs s_size */ pxd_t s_xfsckpxd; /* 8: extendfs fsckpxd */ pxd_t s_xlogpxd; /* 8: extendfs logpxd */ /* - 128 byte boundary - */ /* * DFS VFS support (preliminary) */ char s_attach; /* 1: VFS: flag: set when aggregate is attached */ u8 rsrvd4[7]; /* 7: reserved - set to 0 */ u64 totalUsable; /* 8: VFS: total of 1K blocks which are * available to "normal" (non-root) users. */ u64 minFree; /* 8: VFS: # of 1K blocks held in reserve for * exclusive use of root. This value can be 0, * and if it is then totalUsable will be equal * to # of blocks in aggregate. I believe this * means that minFree + totalUsable = # blocks. * In that case, we don't need to store both * totalUsable and minFree since we can compute * one from the other. I would guess minFree * would be the one we should store, and * totalUsable would be the one we should * compute. (Just a guess...) */ u64 realFree; /* 8: VFS: # of free 1K blocks can be used by * "normal" users. It may be this is something * we should compute when asked for instead of * storing in the superblock. I don't know how * often this information is needed. */ /* * graffiti area */};/* from jfs_dtree.h *//* * entry segment/slot * * an entry consists of type dependent head/only segment/slot and * additional segments/slots linked vi next field; * N.B. last/only segment of entry is terminated by next = -1; *//* * directory page slot */typedef struct { s8 next; /* 1: */ s8 cnt; /* 1: */ UniChar name[15]; /* 30: */} dtslot_t; /* (32) */#define DTSLOTDATALEN 15/* * internal node entry head/only segment */typedef struct { pxd_t xd; /* 8: child extent descriptor */ s8 next; /* 1: */ u8 namlen; /* 1: */ UniChar name[11]; /* 22: 2-byte aligned */} idtentry_t; /* (32) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -