struct csum { int32_t cs_ndir; /* number of directories */ int32_t cs_nbfree; /* number of free blocks */ int32_t cs_nifree; /* number of free inodes */ int32_t cs_nffree; /* number of free frags */ }; struct csum_total { int64_t cs_ndir; /* number of directories */ int64_t cs_nbfree; /* number of free blocks */ int64_t cs_nifree; /* number of free inodes */ int64_t cs_nffree; /* number of free frags */ int64_t cs_numclusters; /* number of free clusters */ int64_t cs_spare[3]; /* future expansion */ }; /* * Super block for an FFS filesystem. */ struct fs { int fs_firstfield; /* historic filesystem linked list, */ int fs_unused_1; /* used for incore super blocks */ int fs_sblkno; /* offset of super-block in filesys */ int fs_cblkno; /* offset of cyl-block in filesys */ int fs_iblkno; /* offset of inode-blocks in filesys */ int fs_dblkno; /* offset of first data after cg */ int fs_old_cgoffset; /* cylinder group offset in cylinder */ int fs_old_cgmask; /* used to calc mod fs_ntrak */ int fs_old_time; /* last time written */ int fs_old_size; /* number of blocks in fs */ int fs_old_dsize; /* number of data blocks in fs */ int fs_ncg; /* number of cylinder groups */ int fs_bsize; /* size of basic blocks in fs */ int fs_fsize; /* size of frag blocks in fs */ int fs_frag; /* number of frags in a block in fs */ int fs_minfree; /* minimum percentage of free blocks */ int fs_old_rotdelay; /* num of ms for optimal next block */ int fs_old_rps; /* disk revolutions per second */ int fs_bmask; /* ``blkoff'' calc of blk offsets */ int fs_fmask; /* ``fragoff'' calc of frag offsets */ int fs_bshift; /* ``lblkno'' calc of logical blkno */ int fs_fshift; /* ``numfrags'' calc number of frags */ int fs_maxcontig; /* max number of contiguous blks */ int fs_maxbpg; /* max number of blks per cyl group */ int fs_fragshift; /* block to frag shift */ int fs_fsbtodb; /* fsbtodb and dbtofsb shift constant */ int fs_sbsize; /* actual size of super block */ int fs_spare1[2]; /* old fs_csmask */ int fs_nindir; /* value of NINDIR */ int fs_inopb; /* value of INOPB */ int fs_old_nspf; /* value of NSPF */ int fs_optim; /* optimization preference, see below */ int fs_old_npsect; /* # sectors/track including spares */ int fs_old_interleave; /* hardware sector interleave */ int fs_old_trackskew; /* sector 0 skew, per track */ int fs_id[2]; /* unique filesystem id */ int fs_old_csaddr; /* blk addr of cyl grp summary area */ int fs_cssize; /* size of cyl grp summary area */ int fs_cgsize; /* cylinder group size */ int fs_spare2; /* old fs_ntrak */ int fs_old_nsect; /* sectors per track */ int fs_old_spc; /* sectors per cylinder */ int fs_old_ncyl; /* cylinders in filesystem */ int fs_old_cpg; /* cylinders per group */ int fs_ipg; /* inodes per group */ int fs_fpg; /* blocks per group * fs_frag */ csum fs_old_cstotal; /* cylinder summary information */ int8_t fs_fmod; /* super block modified flag */ int8_t fs_clean; /* filesystem is clean flag */ int8_t fs_ronly; /* mounted read-only flag */ int8_t fs_old_flags; /* old FS_ flags */ u_char fs_fsmnt[MAXMNTLEN]; /* name mounted on */ u_char fs_volname[MAXVOLLEN]; /* volume name */ uint64_t fs_swuid; /* system-wide uid */ int fs_pad; /* due to alignment of fs_swuid */ int fs_cgrotor; /* last cg searched */ void *fs_ocsp[NOCSPTRS]; /* padding; was list of fs_cs buffers */ uint8_t *fs_contigdirs; /* (u) # of contig. allocated dirs */ csum *fs_csp; /* (u) cg summary info buffer */ int *fs_maxcluster; /* (u) max cluster in each cyl group */ u_int *fs_active; /* (u) used by snapshots to track fs */ int fs_old_cpc; /* cyl per cycle in postbl */ int fs_maxbsize; /* maximum blocking factor permitted */ int64_t fs_sparecon64[17]; /* old rotation block list head */ int64_t fs_sblockloc; /* byte offset of standard superblock */ csum_total fs_cstotal; /* (u) cylinder summary information */ ufs_time_t fs_time; /* last time written */ int64_t fs_size; /* number of blocks in fs */ int64_t fs_dsize; /* number of data blocks in fs */ ufs2_daddr_t fs_csaddr; /* blk addr of cyl grp summary area */ int64_t fs_pendingblocks; /* (u) blocks being freed */ int fs_pendinginodes; /* (u) inodes being freed */ int fs_snapinum[FSMAXSNAP];/* list of snapshot inode numbers */ int fs_avgfilesize; /* expected average file size */ int fs_avgfpdir; /* expected # of files per directory */ int fs_save_cgsize; /* save real cg size to use fs_bsize */ int fs_sparecon32[26]; /* reserved for future constants */ int fs_flags; /* see FS_ flags below */ int fs_contigsumsize; /* size of cluster summary array */ int fs_maxsymlinklen; /* max length of an internal symlink */ int fs_old_inodefmt; /* format of on-disk inodes */ uint64_t fs_maxfilesize; /* maximum representable file size */ int64_t fs_qbmask; /* ~fs_bmask for use with 64-bit size */ int64_t fs_qfmask; /* ~fs_fmask for use with 64-bit size */ int fs_state; /* validate fs_clean field */ int fs_old_postblformat; /* format of positional layout tables */ int fs_old_nrpos; /* number of rotational positions */ int fs_spare5[2]; /* old fs_postbloff */ int fs_magic; /* magic number */ };