1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) International Business Machines Corp., 2000-2003 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun #ifndef _H_JFS_SUPERBLOCK 6*4882a593Smuzhiyun #define _H_JFS_SUPERBLOCK 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include <linux/uuid.h> 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun /* 11*4882a593Smuzhiyun * make the magic number something a human could read 12*4882a593Smuzhiyun */ 13*4882a593Smuzhiyun #define JFS_MAGIC "JFS1" /* Magic word */ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define JFS_VERSION 2 /* Version number: Version 2 */ 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define LV_NAME_SIZE 11 /* MUST BE 11 for OS/2 boot sector */ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* 20*4882a593Smuzhiyun * aggregate superblock 21*4882a593Smuzhiyun * 22*4882a593Smuzhiyun * The name superblock is too close to super_block, so the name has been 23*4882a593Smuzhiyun * changed to jfs_superblock. The utilities are still using the old name. 24*4882a593Smuzhiyun */ 25*4882a593Smuzhiyun struct jfs_superblock { 26*4882a593Smuzhiyun char s_magic[4]; /* 4: magic number */ 27*4882a593Smuzhiyun __le32 s_version; /* 4: version number */ 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun __le64 s_size; /* 8: aggregate size in hardware/LVM blocks; 30*4882a593Smuzhiyun * VFS: number of blocks 31*4882a593Smuzhiyun */ 32*4882a593Smuzhiyun __le32 s_bsize; /* 4: aggregate block size in bytes; 33*4882a593Smuzhiyun * VFS: fragment size 34*4882a593Smuzhiyun */ 35*4882a593Smuzhiyun __le16 s_l2bsize; /* 2: log2 of s_bsize */ 36*4882a593Smuzhiyun __le16 s_l2bfactor; /* 2: log2(s_bsize/hardware block size) */ 37*4882a593Smuzhiyun __le32 s_pbsize; /* 4: hardware/LVM block size in bytes */ 38*4882a593Smuzhiyun __le16 s_l2pbsize; /* 2: log2 of s_pbsize */ 39*4882a593Smuzhiyun __le16 pad; /* 2: padding necessary for alignment */ 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun __le32 s_agsize; /* 4: allocation group size in aggr. blocks */ 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun __le32 s_flag; /* 4: aggregate attributes: 44*4882a593Smuzhiyun * see jfs_filsys.h 45*4882a593Smuzhiyun */ 46*4882a593Smuzhiyun __le32 s_state; /* 4: mount/unmount/recovery state: 47*4882a593Smuzhiyun * see jfs_filsys.h 48*4882a593Smuzhiyun */ 49*4882a593Smuzhiyun __le32 s_compress; /* 4: > 0 if data compression */ 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun pxd_t s_ait2; /* 8: first extent of secondary 52*4882a593Smuzhiyun * aggregate inode table 53*4882a593Smuzhiyun */ 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun pxd_t s_aim2; /* 8: first extent of secondary 56*4882a593Smuzhiyun * aggregate inode map 57*4882a593Smuzhiyun */ 58*4882a593Smuzhiyun __le32 s_logdev; /* 4: device address of log */ 59*4882a593Smuzhiyun __le32 s_logserial; /* 4: log serial number at aggregate mount */ 60*4882a593Smuzhiyun pxd_t s_logpxd; /* 8: inline log extent */ 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun pxd_t s_fsckpxd; /* 8: inline fsck work space extent */ 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun struct timestruc_t s_time; /* 8: time last updated */ 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun __le32 s_fsckloglen; /* 4: Number of filesystem blocks reserved for 67*4882a593Smuzhiyun * the fsck service log. 68*4882a593Smuzhiyun * N.B. These blocks are divided among the 69*4882a593Smuzhiyun * versions kept. This is not a per 70*4882a593Smuzhiyun * version size. 71*4882a593Smuzhiyun * N.B. These blocks are included in the 72*4882a593Smuzhiyun * length field of s_fsckpxd. 73*4882a593Smuzhiyun */ 74*4882a593Smuzhiyun s8 s_fscklog; /* 1: which fsck service log is most recent 75*4882a593Smuzhiyun * 0 => no service log data yet 76*4882a593Smuzhiyun * 1 => the first one 77*4882a593Smuzhiyun * 2 => the 2nd one 78*4882a593Smuzhiyun */ 79*4882a593Smuzhiyun char s_fpack[11]; /* 11: file system volume name 80*4882a593Smuzhiyun * N.B. This must be 11 bytes to 81*4882a593Smuzhiyun * conform with the OS/2 BootSector 82*4882a593Smuzhiyun * requirements 83*4882a593Smuzhiyun * Only used when s_version is 1 84*4882a593Smuzhiyun */ 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun /* extendfs() parameter under s_state & FM_EXTENDFS */ 87*4882a593Smuzhiyun __le64 s_xsize; /* 8: extendfs s_size */ 88*4882a593Smuzhiyun pxd_t s_xfsckpxd; /* 8: extendfs fsckpxd */ 89*4882a593Smuzhiyun pxd_t s_xlogpxd; /* 8: extendfs logpxd */ 90*4882a593Smuzhiyun uuid_t s_uuid; /* 16: 128-bit uuid for volume */ 91*4882a593Smuzhiyun char s_label[16]; /* 16: volume label */ 92*4882a593Smuzhiyun uuid_t s_loguuid; /* 16: 128-bit uuid for log device */ 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun }; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun extern int readSuper(struct super_block *, struct buffer_head **); 97*4882a593Smuzhiyun extern int updateSuper(struct super_block *, uint); 98*4882a593Smuzhiyun __printf(2, 3) 99*4882a593Smuzhiyun extern void jfs_error(struct super_block *, const char *, ...); 100*4882a593Smuzhiyun extern int jfs_mount(struct super_block *); 101*4882a593Smuzhiyun extern int jfs_mount_rw(struct super_block *, int); 102*4882a593Smuzhiyun extern int jfs_umount(struct super_block *); 103*4882a593Smuzhiyun extern int jfs_umount_rw(struct super_block *); 104*4882a593Smuzhiyun extern int jfs_extendfs(struct super_block *, s64, int); 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun extern struct task_struct *jfsIOthread; 107*4882a593Smuzhiyun extern struct task_struct *jfsSyncThread; 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun #endif /*_H_JFS_SUPERBLOCK */ 110