1*9663SMark.Logan@Sun.COM /* 2*9663SMark.Logan@Sun.COM * Copyright (c) International Business Machines Corp., 2000 3*9663SMark.Logan@Sun.COM * 4*9663SMark.Logan@Sun.COM * This program is free software; you can redistribute it and/or modify 5*9663SMark.Logan@Sun.COM * it under the terms of the GNU General Public License as published by 6*9663SMark.Logan@Sun.COM * the Free Software Foundation; either version 3 of the License, or 7*9663SMark.Logan@Sun.COM * (at your option) any later version. 8*9663SMark.Logan@Sun.COM * 9*9663SMark.Logan@Sun.COM * This program is distributed in the hope that it will be useful, 10*9663SMark.Logan@Sun.COM * but WITHOUT ANY WARRANTY; without even the implied warranty of 11*9663SMark.Logan@Sun.COM * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 12*9663SMark.Logan@Sun.COM * the GNU General Public License for more details. 13*9663SMark.Logan@Sun.COM * 14*9663SMark.Logan@Sun.COM * You should have received a copy of the GNU General Public License 15*9663SMark.Logan@Sun.COM * along with this program. If not, see <http://www.gnu.org/licenses/>. 16*9663SMark.Logan@Sun.COM * 17*9663SMark.Logan@Sun.COM */ 18*9663SMark.Logan@Sun.COM #ifndef _H_JFS_SUPERBLOCK 19*9663SMark.Logan@Sun.COM #define _H_JFS_SUPERBLOCK 20*9663SMark.Logan@Sun.COM /* 21*9663SMark.Logan@Sun.COM * jfs_superblock.h 22*9663SMark.Logan@Sun.COM */ 23*9663SMark.Logan@Sun.COM 24*9663SMark.Logan@Sun.COM /* 25*9663SMark.Logan@Sun.COM * make the magic number something a human could read 26*9663SMark.Logan@Sun.COM */ 27*9663SMark.Logan@Sun.COM #define JFS_MAGIC "JFS1" /* Magic word: Version 1 */ 28*9663SMark.Logan@Sun.COM 29*9663SMark.Logan@Sun.COM #define JFS_VERSION 1 /* Version number: Version 1 */ 30*9663SMark.Logan@Sun.COM 31*9663SMark.Logan@Sun.COM #define LV_NAME_SIZE 11 /* MUST BE 11 for OS/2 boot sector */ 32*9663SMark.Logan@Sun.COM 33*9663SMark.Logan@Sun.COM /* 34*9663SMark.Logan@Sun.COM * aggregate superblock 35*9663SMark.Logan@Sun.COM * 36*9663SMark.Logan@Sun.COM * The name superblock is too close to super_block, so the name has been 37*9663SMark.Logan@Sun.COM * changed to jfs_superblock. The utilities are still using the old name. 38*9663SMark.Logan@Sun.COM */ 39*9663SMark.Logan@Sun.COM #ifdef _JFS_UTILITY 40*9663SMark.Logan@Sun.COM struct superblock 41*9663SMark.Logan@Sun.COM #else 42*9663SMark.Logan@Sun.COM struct jfs_superblock 43*9663SMark.Logan@Sun.COM #endif 44*9663SMark.Logan@Sun.COM { 45*9663SMark.Logan@Sun.COM char s_magic[4]; /* 4: magic number */ 46*9663SMark.Logan@Sun.COM u32 s_version; /* 4: version number */ 47*9663SMark.Logan@Sun.COM 48*9663SMark.Logan@Sun.COM s64 s_size; /* 8: aggregate size in hardware/LVM blocks; 49*9663SMark.Logan@Sun.COM * VFS: number of blocks 50*9663SMark.Logan@Sun.COM */ 51*9663SMark.Logan@Sun.COM s32 s_bsize; /* 4: aggregate block size in bytes; 52*9663SMark.Logan@Sun.COM * VFS: fragment size 53*9663SMark.Logan@Sun.COM */ 54*9663SMark.Logan@Sun.COM s16 s_l2bsize; /* 2: log2 of s_bsize */ 55*9663SMark.Logan@Sun.COM s16 s_l2bfactor; /* 2: log2(s_bsize/hardware block size) */ 56*9663SMark.Logan@Sun.COM s32 s_pbsize; /* 4: hardware/LVM block size in bytes */ 57*9663SMark.Logan@Sun.COM s16 s_l2pbsize; /* 2: log2 of s_pbsize */ 58*9663SMark.Logan@Sun.COM s16 pad; /* 2: padding necessary for alignment */ 59*9663SMark.Logan@Sun.COM 60*9663SMark.Logan@Sun.COM u32 s_agsize; /* 4: allocation group size in aggr. blocks */ 61*9663SMark.Logan@Sun.COM 62*9663SMark.Logan@Sun.COM u32 s_flag; /* 4: aggregate attributes: 63*9663SMark.Logan@Sun.COM * see jfs_filsys.h 64*9663SMark.Logan@Sun.COM */ 65*9663SMark.Logan@Sun.COM u32 s_state; /* 4: mount/unmount/recovery state: 66*9663SMark.Logan@Sun.COM * see jfs_filsys.h 67*9663SMark.Logan@Sun.COM */ 68*9663SMark.Logan@Sun.COM s32 s_compress; /* 4: > 0 if data compression */ 69*9663SMark.Logan@Sun.COM 70*9663SMark.Logan@Sun.COM pxd_t s_ait2; /* 8: first extent of secondary 71*9663SMark.Logan@Sun.COM * aggregate inode table 72*9663SMark.Logan@Sun.COM */ 73*9663SMark.Logan@Sun.COM 74*9663SMark.Logan@Sun.COM pxd_t s_aim2; /* 8: first extent of secondary 75*9663SMark.Logan@Sun.COM * aggregate inode map 76*9663SMark.Logan@Sun.COM */ 77*9663SMark.Logan@Sun.COM u32 s_logdev; /* 4: device address of log */ 78*9663SMark.Logan@Sun.COM s32 s_logserial; /* 4: log serial number at aggregate mount */ 79*9663SMark.Logan@Sun.COM pxd_t s_logpxd; /* 8: inline log extent */ 80*9663SMark.Logan@Sun.COM 81*9663SMark.Logan@Sun.COM pxd_t s_fsckpxd; /* 8: inline fsck work space extent */ 82*9663SMark.Logan@Sun.COM 83*9663SMark.Logan@Sun.COM struct timestruc_t s_time; /* 8: time last updated */ 84*9663SMark.Logan@Sun.COM 85*9663SMark.Logan@Sun.COM s32 s_fsckloglen; /* 4: Number of file system blocks reserved for 86*9663SMark.Logan@Sun.COM * the fsck service log. 87*9663SMark.Logan@Sun.COM * N.B. These blocks are divided among the 88*9663SMark.Logan@Sun.COM * versions kept. This is not a per 89*9663SMark.Logan@Sun.COM * version size. 90*9663SMark.Logan@Sun.COM * N.B. These blocks are included in the 91*9663SMark.Logan@Sun.COM * length field of s_fsckpxd. 92*9663SMark.Logan@Sun.COM */ 93*9663SMark.Logan@Sun.COM s8 s_fscklog; /* 1: which fsck service log is most recent 94*9663SMark.Logan@Sun.COM * 0 => no service log data yet 95*9663SMark.Logan@Sun.COM * 1 => the first one 96*9663SMark.Logan@Sun.COM * 2 => the 2nd one 97*9663SMark.Logan@Sun.COM */ 98*9663SMark.Logan@Sun.COM char s_fpack[11]; /* 11: file system volume name 99*9663SMark.Logan@Sun.COM * N.B. This must be 11 bytes to 100*9663SMark.Logan@Sun.COM * conform with the OS/2 BootSector 101*9663SMark.Logan@Sun.COM * requirements 102*9663SMark.Logan@Sun.COM */ 103*9663SMark.Logan@Sun.COM 104*9663SMark.Logan@Sun.COM /* extendfs() parameter under s_state & FM_EXTENDFS */ 105*9663SMark.Logan@Sun.COM s64 s_xsize; /* 8: extendfs s_size */ 106*9663SMark.Logan@Sun.COM pxd_t s_xfsckpxd; /* 8: extendfs fsckpxd */ 107*9663SMark.Logan@Sun.COM pxd_t s_xlogpxd; /* 8: extendfs logpxd */ 108*9663SMark.Logan@Sun.COM /* - 128 byte boundary - */ 109*9663SMark.Logan@Sun.COM 110*9663SMark.Logan@Sun.COM /* 111*9663SMark.Logan@Sun.COM * DFS VFS support (preliminary) 112*9663SMark.Logan@Sun.COM */ 113*9663SMark.Logan@Sun.COM char s_attach; /* 1: VFS: flag: set when aggregate is attached 114*9663SMark.Logan@Sun.COM */ 115*9663SMark.Logan@Sun.COM u8 rsrvd4[7]; /* 7: reserved - set to 0 */ 116*9663SMark.Logan@Sun.COM 117*9663SMark.Logan@Sun.COM u64 totalUsable; /* 8: VFS: total of 1K blocks which are 118*9663SMark.Logan@Sun.COM * available to "normal" (non-root) users. 119*9663SMark.Logan@Sun.COM */ 120*9663SMark.Logan@Sun.COM u64 minFree; /* 8: VFS: # of 1K blocks held in reserve for 121*9663SMark.Logan@Sun.COM * exclusive use of root. This value can be 0, 122*9663SMark.Logan@Sun.COM * and if it is then totalUsable will be equal 123*9663SMark.Logan@Sun.COM * to # of blocks in aggregate. I believe this 124*9663SMark.Logan@Sun.COM * means that minFree + totalUsable = # blocks. 125*9663SMark.Logan@Sun.COM * In that case, we don't need to store both 126*9663SMark.Logan@Sun.COM * totalUsable and minFree since we can compute 127*9663SMark.Logan@Sun.COM * one from the other. I would guess minFree 128*9663SMark.Logan@Sun.COM * would be the one we should store, and 129*9663SMark.Logan@Sun.COM * totalUsable would be the one we should 130*9663SMark.Logan@Sun.COM * compute. (Just a guess...) 131*9663SMark.Logan@Sun.COM */ 132*9663SMark.Logan@Sun.COM 133*9663SMark.Logan@Sun.COM u64 realFree; /* 8: VFS: # of free 1K blocks can be used by 134*9663SMark.Logan@Sun.COM * "normal" users. It may be this is something 135*9663SMark.Logan@Sun.COM * we should compute when asked for instead of 136*9663SMark.Logan@Sun.COM * storing in the superblock. I don't know how 137*9663SMark.Logan@Sun.COM * often this information is needed. 138*9663SMark.Logan@Sun.COM */ 139*9663SMark.Logan@Sun.COM /* 140*9663SMark.Logan@Sun.COM * graffiti area 141*9663SMark.Logan@Sun.COM */ 142*9663SMark.Logan@Sun.COM }; 143*9663SMark.Logan@Sun.COM 144*9663SMark.Logan@Sun.COM #endif /*_H_JFS_SUPERBLOCK */ 145