18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * linux/include/linux/ufs_fs.h 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 1996 68c2ecf20Sopenharmony_ci * Adrian Rodriguez (adrian@franklins-tower.rutgers.edu) 78c2ecf20Sopenharmony_ci * Laboratory for Computer Science Research Computing Facility 88c2ecf20Sopenharmony_ci * Rutgers, The State University of New Jersey 98c2ecf20Sopenharmony_ci * 108c2ecf20Sopenharmony_ci * Clean swab support by Fare <fare@tunes.org> 118c2ecf20Sopenharmony_ci * just hope no one is using NNUUXXI on __?64 structure elements 128c2ecf20Sopenharmony_ci * 64-bit clean thanks to Maciej W. Rozycki <macro@ds2.pg.gda.pl> 138c2ecf20Sopenharmony_ci * 148c2ecf20Sopenharmony_ci * 4.4BSD (FreeBSD) support added on February 1st 1998 by 158c2ecf20Sopenharmony_ci * Niels Kristian Bech Jensen <nkbj@image.dk> partially based 168c2ecf20Sopenharmony_ci * on code by Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>. 178c2ecf20Sopenharmony_ci * 188c2ecf20Sopenharmony_ci * NeXTstep support added on February 5th 1998 by 198c2ecf20Sopenharmony_ci * Niels Kristian Bech Jensen <nkbj@image.dk>. 208c2ecf20Sopenharmony_ci * 218c2ecf20Sopenharmony_ci * Write support by Daniel Pirkl <daniel.pirkl@email.cz> 228c2ecf20Sopenharmony_ci * 238c2ecf20Sopenharmony_ci * HP/UX hfs filesystem support added by 248c2ecf20Sopenharmony_ci * Martin K. Petersen <mkp@mkp.net>, August 1999 258c2ecf20Sopenharmony_ci * 268c2ecf20Sopenharmony_ci * UFS2 (of FreeBSD 5.x) support added by 278c2ecf20Sopenharmony_ci * Niraj Kumar <niraj17@iitbombay.org> , Jan 2004 288c2ecf20Sopenharmony_ci * 298c2ecf20Sopenharmony_ci */ 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci#ifndef __LINUX_UFS_FS_H 328c2ecf20Sopenharmony_ci#define __LINUX_UFS_FS_H 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci#include <linux/types.h> 358c2ecf20Sopenharmony_ci#include <linux/kernel.h> 368c2ecf20Sopenharmony_ci#include <linux/stat.h> 378c2ecf20Sopenharmony_ci#include <linux/fs.h> 388c2ecf20Sopenharmony_ci#include <linux/workqueue.h> 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci#include <asm/div64.h> 418c2ecf20Sopenharmony_citypedef __u64 __bitwise __fs64; 428c2ecf20Sopenharmony_citypedef __u32 __bitwise __fs32; 438c2ecf20Sopenharmony_citypedef __u16 __bitwise __fs16; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci#define UFS_BBLOCK 0 468c2ecf20Sopenharmony_ci#define UFS_BBSIZE 8192 478c2ecf20Sopenharmony_ci#define UFS_SBLOCK 8192 488c2ecf20Sopenharmony_ci#define UFS_SBSIZE 8192 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci#define UFS_SECTOR_SIZE 512 518c2ecf20Sopenharmony_ci#define UFS_SECTOR_BITS 9 528c2ecf20Sopenharmony_ci#define UFS_MAGIC 0x00011954 538c2ecf20Sopenharmony_ci#define UFS_MAGIC_BW 0x0f242697 548c2ecf20Sopenharmony_ci#define UFS2_MAGIC 0x19540119 558c2ecf20Sopenharmony_ci#define UFS_CIGAM 0x54190100 /* byteswapped MAGIC */ 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci/* Copied from FreeBSD */ 588c2ecf20Sopenharmony_ci/* 598c2ecf20Sopenharmony_ci * Each disk drive contains some number of filesystems. 608c2ecf20Sopenharmony_ci * A filesystem consists of a number of cylinder groups. 618c2ecf20Sopenharmony_ci * Each cylinder group has inodes and data. 628c2ecf20Sopenharmony_ci * 638c2ecf20Sopenharmony_ci * A filesystem is described by its super-block, which in turn 648c2ecf20Sopenharmony_ci * describes the cylinder groups. The super-block is critical 658c2ecf20Sopenharmony_ci * data and is replicated in each cylinder group to protect against 668c2ecf20Sopenharmony_ci * catastrophic loss. This is done at `newfs' time and the critical 678c2ecf20Sopenharmony_ci * super-block data does not change, so the copies need not be 688c2ecf20Sopenharmony_ci * referenced further unless disaster strikes. 698c2ecf20Sopenharmony_ci * 708c2ecf20Sopenharmony_ci * For filesystem fs, the offsets of the various blocks of interest 718c2ecf20Sopenharmony_ci * are given in the super block as: 728c2ecf20Sopenharmony_ci * [fs->fs_sblkno] Super-block 738c2ecf20Sopenharmony_ci * [fs->fs_cblkno] Cylinder group block 748c2ecf20Sopenharmony_ci * [fs->fs_iblkno] Inode blocks 758c2ecf20Sopenharmony_ci * [fs->fs_dblkno] Data blocks 768c2ecf20Sopenharmony_ci * The beginning of cylinder group cg in fs, is given by 778c2ecf20Sopenharmony_ci * the ``cgbase(fs, cg)'' macro. 788c2ecf20Sopenharmony_ci * 798c2ecf20Sopenharmony_ci * Depending on the architecture and the media, the superblock may 808c2ecf20Sopenharmony_ci * reside in any one of four places. For tiny media where every block 818c2ecf20Sopenharmony_ci * counts, it is placed at the very front of the partition. Historically, 828c2ecf20Sopenharmony_ci * UFS1 placed it 8K from the front to leave room for the disk label and 838c2ecf20Sopenharmony_ci * a small bootstrap. For UFS2 it got moved to 64K from the front to leave 848c2ecf20Sopenharmony_ci * room for the disk label and a bigger bootstrap, and for really piggy 858c2ecf20Sopenharmony_ci * systems we check at 256K from the front if the first three fail. In 868c2ecf20Sopenharmony_ci * all cases the size of the superblock will be SBLOCKSIZE. All values are 878c2ecf20Sopenharmony_ci * given in byte-offset form, so they do not imply a sector size. The 888c2ecf20Sopenharmony_ci * SBLOCKSEARCH specifies the order in which the locations should be searched. 898c2ecf20Sopenharmony_ci */ 908c2ecf20Sopenharmony_ci#define SBLOCK_FLOPPY 0 918c2ecf20Sopenharmony_ci#define SBLOCK_UFS1 8192 928c2ecf20Sopenharmony_ci#define SBLOCK_UFS2 65536 938c2ecf20Sopenharmony_ci#define SBLOCK_PIGGY 262144 948c2ecf20Sopenharmony_ci#define SBLOCKSIZE 8192 958c2ecf20Sopenharmony_ci#define SBLOCKSEARCH \ 968c2ecf20Sopenharmony_ci { SBLOCK_UFS2, SBLOCK_UFS1, SBLOCK_FLOPPY, SBLOCK_PIGGY, -1 } 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ci 998c2ecf20Sopenharmony_ci/* HP specific MAGIC values */ 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ci#define UFS_MAGIC_LFN 0x00095014 /* fs supports filenames > 14 chars */ 1028c2ecf20Sopenharmony_ci#define UFS_CIGAM_LFN 0x14500900 /* srahc 41 < semanelif stroppus sf */ 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_ci#define UFS_MAGIC_SEC 0x00612195 /* B1 security fs */ 1058c2ecf20Sopenharmony_ci#define UFS_CIGAM_SEC 0x95216100 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_ci#define UFS_MAGIC_FEA 0x00195612 /* fs_featurebits supported */ 1088c2ecf20Sopenharmony_ci#define UFS_CIGAM_FEA 0x12561900 1098c2ecf20Sopenharmony_ci 1108c2ecf20Sopenharmony_ci#define UFS_MAGIC_4GB 0x05231994 /* fs > 4 GB && fs_featurebits */ 1118c2ecf20Sopenharmony_ci#define UFS_CIGAM_4GB 0x94192305 1128c2ecf20Sopenharmony_ci 1138c2ecf20Sopenharmony_ci/* Seems somebody at HP goofed here. B1 and lfs are both 0x2 !?! */ 1148c2ecf20Sopenharmony_ci#define UFS_FSF_LFN 0x00000001 /* long file names */ 1158c2ecf20Sopenharmony_ci#define UFS_FSF_B1 0x00000002 /* B1 security */ 1168c2ecf20Sopenharmony_ci#define UFS_FSF_LFS 0x00000002 /* large files */ 1178c2ecf20Sopenharmony_ci#define UFS_FSF_LUID 0x00000004 /* large UIDs */ 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_ci/* End of HP stuff */ 1208c2ecf20Sopenharmony_ci 1218c2ecf20Sopenharmony_ci 1228c2ecf20Sopenharmony_ci#define UFS_BSIZE 8192 1238c2ecf20Sopenharmony_ci#define UFS_MINBSIZE 4096 1248c2ecf20Sopenharmony_ci#define UFS_FSIZE 1024 1258c2ecf20Sopenharmony_ci#define UFS_MAXFRAG (UFS_BSIZE / UFS_FSIZE) 1268c2ecf20Sopenharmony_ci 1278c2ecf20Sopenharmony_ci#define UFS_NDADDR 12 1288c2ecf20Sopenharmony_ci#define UFS_NINDIR 3 1298c2ecf20Sopenharmony_ci 1308c2ecf20Sopenharmony_ci#define UFS_IND_BLOCK (UFS_NDADDR + 0) 1318c2ecf20Sopenharmony_ci#define UFS_DIND_BLOCK (UFS_NDADDR + 1) 1328c2ecf20Sopenharmony_ci#define UFS_TIND_BLOCK (UFS_NDADDR + 2) 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_ci#define UFS_NDIR_FRAGMENT (UFS_NDADDR << uspi->s_fpbshift) 1358c2ecf20Sopenharmony_ci#define UFS_IND_FRAGMENT (UFS_IND_BLOCK << uspi->s_fpbshift) 1368c2ecf20Sopenharmony_ci#define UFS_DIND_FRAGMENT (UFS_DIND_BLOCK << uspi->s_fpbshift) 1378c2ecf20Sopenharmony_ci#define UFS_TIND_FRAGMENT (UFS_TIND_BLOCK << uspi->s_fpbshift) 1388c2ecf20Sopenharmony_ci 1398c2ecf20Sopenharmony_ci#define UFS_ROOTINO 2 1408c2ecf20Sopenharmony_ci#define UFS_FIRST_INO (UFS_ROOTINO + 1) 1418c2ecf20Sopenharmony_ci 1428c2ecf20Sopenharmony_ci#define UFS_USEEFT ((__u16)65535) 1438c2ecf20Sopenharmony_ci 1448c2ecf20Sopenharmony_ci/* fs_clean values */ 1458c2ecf20Sopenharmony_ci#define UFS_FSOK 0x7c269d38 1468c2ecf20Sopenharmony_ci#define UFS_FSACTIVE ((__s8)0x00) 1478c2ecf20Sopenharmony_ci#define UFS_FSCLEAN ((__s8)0x01) 1488c2ecf20Sopenharmony_ci#define UFS_FSSTABLE ((__s8)0x02) 1498c2ecf20Sopenharmony_ci#define UFS_FSOSF1 ((__s8)0x03) /* is this correct for DEC OSF/1? */ 1508c2ecf20Sopenharmony_ci#define UFS_FSBAD ((__s8)0xff) 1518c2ecf20Sopenharmony_ci 1528c2ecf20Sopenharmony_ci/* Solaris-specific fs_clean values */ 1538c2ecf20Sopenharmony_ci#define UFS_FSSUSPEND ((__s8)0xfe) /* temporarily suspended */ 1548c2ecf20Sopenharmony_ci#define UFS_FSLOG ((__s8)0xfd) /* logging fs */ 1558c2ecf20Sopenharmony_ci#define UFS_FSFIX ((__s8)0xfc) /* being repaired while mounted */ 1568c2ecf20Sopenharmony_ci 1578c2ecf20Sopenharmony_ci/* From here to next blank line, s_flags for ufs_sb_info */ 1588c2ecf20Sopenharmony_ci/* directory entry encoding */ 1598c2ecf20Sopenharmony_ci#define UFS_DE_MASK 0x00000010 /* mask for the following */ 1608c2ecf20Sopenharmony_ci#define UFS_DE_OLD 0x00000000 1618c2ecf20Sopenharmony_ci#define UFS_DE_44BSD 0x00000010 1628c2ecf20Sopenharmony_ci/* uid encoding */ 1638c2ecf20Sopenharmony_ci#define UFS_UID_MASK 0x00000060 /* mask for the following */ 1648c2ecf20Sopenharmony_ci#define UFS_UID_OLD 0x00000000 1658c2ecf20Sopenharmony_ci#define UFS_UID_44BSD 0x00000020 1668c2ecf20Sopenharmony_ci#define UFS_UID_EFT 0x00000040 1678c2ecf20Sopenharmony_ci/* superblock state encoding */ 1688c2ecf20Sopenharmony_ci#define UFS_ST_MASK 0x00000700 /* mask for the following */ 1698c2ecf20Sopenharmony_ci#define UFS_ST_OLD 0x00000000 1708c2ecf20Sopenharmony_ci#define UFS_ST_44BSD 0x00000100 1718c2ecf20Sopenharmony_ci#define UFS_ST_SUN 0x00000200 /* Solaris */ 1728c2ecf20Sopenharmony_ci#define UFS_ST_SUNOS 0x00000300 1738c2ecf20Sopenharmony_ci#define UFS_ST_SUNx86 0x00000400 /* Solaris x86 */ 1748c2ecf20Sopenharmony_ci/*cylinder group encoding */ 1758c2ecf20Sopenharmony_ci#define UFS_CG_MASK 0x00003000 /* mask for the following */ 1768c2ecf20Sopenharmony_ci#define UFS_CG_OLD 0x00000000 1778c2ecf20Sopenharmony_ci#define UFS_CG_44BSD 0x00002000 1788c2ecf20Sopenharmony_ci#define UFS_CG_SUN 0x00001000 1798c2ecf20Sopenharmony_ci/* filesystem type encoding */ 1808c2ecf20Sopenharmony_ci#define UFS_TYPE_MASK 0x00010000 /* mask for the following */ 1818c2ecf20Sopenharmony_ci#define UFS_TYPE_UFS1 0x00000000 1828c2ecf20Sopenharmony_ci#define UFS_TYPE_UFS2 0x00010000 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_ci 1858c2ecf20Sopenharmony_ci/* fs_inodefmt options */ 1868c2ecf20Sopenharmony_ci#define UFS_42INODEFMT -1 1878c2ecf20Sopenharmony_ci#define UFS_44INODEFMT 2 1888c2ecf20Sopenharmony_ci 1898c2ecf20Sopenharmony_ci/* 1908c2ecf20Sopenharmony_ci * MINFREE gives the minimum acceptable percentage of file system 1918c2ecf20Sopenharmony_ci * blocks which may be free. If the freelist drops below this level 1928c2ecf20Sopenharmony_ci * only the superuser may continue to allocate blocks. This may 1938c2ecf20Sopenharmony_ci * be set to 0 if no reserve of free blocks is deemed necessary, 1948c2ecf20Sopenharmony_ci * however throughput drops by fifty percent if the file system 1958c2ecf20Sopenharmony_ci * is run at between 95% and 100% full; thus the minimum default 1968c2ecf20Sopenharmony_ci * value of fs_minfree is 5%. However, to get good clustering 1978c2ecf20Sopenharmony_ci * performance, 10% is a better choice. hence we use 10% as our 1988c2ecf20Sopenharmony_ci * default value. With 10% free space, fragmentation is not a 1998c2ecf20Sopenharmony_ci * problem, so we choose to optimize for time. 2008c2ecf20Sopenharmony_ci */ 2018c2ecf20Sopenharmony_ci#define UFS_MINFREE 5 2028c2ecf20Sopenharmony_ci#define UFS_DEFAULTOPT UFS_OPTTIME 2038c2ecf20Sopenharmony_ci 2048c2ecf20Sopenharmony_ci/* 2058c2ecf20Sopenharmony_ci * Turn file system block numbers into disk block addresses. 2068c2ecf20Sopenharmony_ci * This maps file system blocks to device size blocks. 2078c2ecf20Sopenharmony_ci */ 2088c2ecf20Sopenharmony_ci#define ufs_fsbtodb(uspi, b) ((b) << (uspi)->s_fsbtodb) 2098c2ecf20Sopenharmony_ci#define ufs_dbtofsb(uspi, b) ((b) >> (uspi)->s_fsbtodb) 2108c2ecf20Sopenharmony_ci 2118c2ecf20Sopenharmony_ci/* 2128c2ecf20Sopenharmony_ci * Cylinder group macros to locate things in cylinder groups. 2138c2ecf20Sopenharmony_ci * They calc file system addresses of cylinder group data structures. 2148c2ecf20Sopenharmony_ci */ 2158c2ecf20Sopenharmony_ci#define ufs_cgbase(c) (uspi->s_fpg * (c)) 2168c2ecf20Sopenharmony_ci#define ufs_cgstart(c) ((uspi)->fs_magic == UFS2_MAGIC ? ufs_cgbase(c) : \ 2178c2ecf20Sopenharmony_ci (ufs_cgbase(c) + uspi->s_cgoffset * ((c) & ~uspi->s_cgmask))) 2188c2ecf20Sopenharmony_ci#define ufs_cgsblock(c) (ufs_cgstart(c) + uspi->s_sblkno) /* super blk */ 2198c2ecf20Sopenharmony_ci#define ufs_cgcmin(c) (ufs_cgstart(c) + uspi->s_cblkno) /* cg block */ 2208c2ecf20Sopenharmony_ci#define ufs_cgimin(c) (ufs_cgstart(c) + uspi->s_iblkno) /* inode blk */ 2218c2ecf20Sopenharmony_ci#define ufs_cgdmin(c) (ufs_cgstart(c) + uspi->s_dblkno) /* 1st data */ 2228c2ecf20Sopenharmony_ci 2238c2ecf20Sopenharmony_ci/* 2248c2ecf20Sopenharmony_ci * Macros for handling inode numbers: 2258c2ecf20Sopenharmony_ci * inode number to file system block offset. 2268c2ecf20Sopenharmony_ci * inode number to cylinder group number. 2278c2ecf20Sopenharmony_ci * inode number to file system block address. 2288c2ecf20Sopenharmony_ci */ 2298c2ecf20Sopenharmony_ci#define ufs_inotocg(x) ((x) / uspi->s_ipg) 2308c2ecf20Sopenharmony_ci#define ufs_inotocgoff(x) ((x) % uspi->s_ipg) 2318c2ecf20Sopenharmony_ci#define ufs_inotofsba(x) (((u64)ufs_cgimin(ufs_inotocg(x))) + ufs_inotocgoff(x) / uspi->s_inopf) 2328c2ecf20Sopenharmony_ci#define ufs_inotofsbo(x) ((x) % uspi->s_inopf) 2338c2ecf20Sopenharmony_ci 2348c2ecf20Sopenharmony_ci/* 2358c2ecf20Sopenharmony_ci * Compute the cylinder and rotational position of a cyl block addr. 2368c2ecf20Sopenharmony_ci */ 2378c2ecf20Sopenharmony_ci#define ufs_cbtocylno(bno) \ 2388c2ecf20Sopenharmony_ci ((bno) * uspi->s_nspf / uspi->s_spc) 2398c2ecf20Sopenharmony_ci#define ufs_cbtorpos(bno) \ 2408c2ecf20Sopenharmony_ci ((UFS_SB(sb)->s_flags & UFS_CG_SUN) ? \ 2418c2ecf20Sopenharmony_ci (((((bno) * uspi->s_nspf % uspi->s_spc) % \ 2428c2ecf20Sopenharmony_ci uspi->s_nsect) * \ 2438c2ecf20Sopenharmony_ci uspi->s_nrpos) / uspi->s_nsect) \ 2448c2ecf20Sopenharmony_ci : \ 2458c2ecf20Sopenharmony_ci ((((bno) * uspi->s_nspf % uspi->s_spc / uspi->s_nsect \ 2468c2ecf20Sopenharmony_ci * uspi->s_trackskew + (bno) * uspi->s_nspf % uspi->s_spc \ 2478c2ecf20Sopenharmony_ci % uspi->s_nsect * uspi->s_interleave) % uspi->s_nsect \ 2488c2ecf20Sopenharmony_ci * uspi->s_nrpos) / uspi->s_npsect)) 2498c2ecf20Sopenharmony_ci 2508c2ecf20Sopenharmony_ci/* 2518c2ecf20Sopenharmony_ci * The following macros optimize certain frequently calculated 2528c2ecf20Sopenharmony_ci * quantities by using shifts and masks in place of divisions 2538c2ecf20Sopenharmony_ci * modulos and multiplications. 2548c2ecf20Sopenharmony_ci */ 2558c2ecf20Sopenharmony_ci#define ufs_blkoff(loc) ((loc) & uspi->s_qbmask) 2568c2ecf20Sopenharmony_ci#define ufs_fragoff(loc) ((loc) & uspi->s_qfmask) 2578c2ecf20Sopenharmony_ci#define ufs_lblktosize(blk) ((blk) << uspi->s_bshift) 2588c2ecf20Sopenharmony_ci#define ufs_lblkno(loc) ((loc) >> uspi->s_bshift) 2598c2ecf20Sopenharmony_ci#define ufs_numfrags(loc) ((loc) >> uspi->s_fshift) 2608c2ecf20Sopenharmony_ci#define ufs_blkroundup(size) (((size) + uspi->s_qbmask) & uspi->s_bmask) 2618c2ecf20Sopenharmony_ci#define ufs_fragroundup(size) (((size) + uspi->s_qfmask) & uspi->s_fmask) 2628c2ecf20Sopenharmony_ci#define ufs_fragstoblks(frags) ((frags) >> uspi->s_fpbshift) 2638c2ecf20Sopenharmony_ci#define ufs_blkstofrags(blks) ((blks) << uspi->s_fpbshift) 2648c2ecf20Sopenharmony_ci#define ufs_fragnum(fsb) ((fsb) & uspi->s_fpbmask) 2658c2ecf20Sopenharmony_ci#define ufs_blknum(fsb) ((fsb) & ~uspi->s_fpbmask) 2668c2ecf20Sopenharmony_ci 2678c2ecf20Sopenharmony_ci#define UFS_MAXNAMLEN 255 2688c2ecf20Sopenharmony_ci#define UFS_MAXMNTLEN 512 2698c2ecf20Sopenharmony_ci#define UFS2_MAXMNTLEN 468 2708c2ecf20Sopenharmony_ci#define UFS2_MAXVOLLEN 32 2718c2ecf20Sopenharmony_ci#define UFS_MAXCSBUFS 31 2728c2ecf20Sopenharmony_ci#define UFS_LINK_MAX 32000 2738c2ecf20Sopenharmony_ci/* 2748c2ecf20Sopenharmony_ci#define UFS2_NOCSPTRS ((128 / sizeof(void *)) - 4) 2758c2ecf20Sopenharmony_ci*/ 2768c2ecf20Sopenharmony_ci#define UFS2_NOCSPTRS 28 2778c2ecf20Sopenharmony_ci 2788c2ecf20Sopenharmony_ci/* 2798c2ecf20Sopenharmony_ci * UFS_DIR_PAD defines the directory entries boundaries 2808c2ecf20Sopenharmony_ci * (must be a multiple of 4) 2818c2ecf20Sopenharmony_ci */ 2828c2ecf20Sopenharmony_ci#define UFS_DIR_PAD 4 2838c2ecf20Sopenharmony_ci#define UFS_DIR_ROUND (UFS_DIR_PAD - 1) 2848c2ecf20Sopenharmony_ci#define UFS_DIR_REC_LEN(name_len) (((name_len) + 1 + 8 + UFS_DIR_ROUND) & ~UFS_DIR_ROUND) 2858c2ecf20Sopenharmony_ci 2868c2ecf20Sopenharmony_cistruct ufs_timeval { 2878c2ecf20Sopenharmony_ci __fs32 tv_sec; 2888c2ecf20Sopenharmony_ci __fs32 tv_usec; 2898c2ecf20Sopenharmony_ci}; 2908c2ecf20Sopenharmony_ci 2918c2ecf20Sopenharmony_cistruct ufs_dir_entry { 2928c2ecf20Sopenharmony_ci __fs32 d_ino; /* inode number of this entry */ 2938c2ecf20Sopenharmony_ci __fs16 d_reclen; /* length of this entry */ 2948c2ecf20Sopenharmony_ci union { 2958c2ecf20Sopenharmony_ci __fs16 d_namlen; /* actual length of d_name */ 2968c2ecf20Sopenharmony_ci struct { 2978c2ecf20Sopenharmony_ci __u8 d_type; /* file type */ 2988c2ecf20Sopenharmony_ci __u8 d_namlen; /* length of string in d_name */ 2998c2ecf20Sopenharmony_ci } d_44; 3008c2ecf20Sopenharmony_ci } d_u; 3018c2ecf20Sopenharmony_ci __u8 d_name[UFS_MAXNAMLEN + 1]; /* file name */ 3028c2ecf20Sopenharmony_ci}; 3038c2ecf20Sopenharmony_ci 3048c2ecf20Sopenharmony_cistruct ufs_csum { 3058c2ecf20Sopenharmony_ci __fs32 cs_ndir; /* number of directories */ 3068c2ecf20Sopenharmony_ci __fs32 cs_nbfree; /* number of free blocks */ 3078c2ecf20Sopenharmony_ci __fs32 cs_nifree; /* number of free inodes */ 3088c2ecf20Sopenharmony_ci __fs32 cs_nffree; /* number of free frags */ 3098c2ecf20Sopenharmony_ci}; 3108c2ecf20Sopenharmony_cistruct ufs2_csum_total { 3118c2ecf20Sopenharmony_ci __fs64 cs_ndir; /* number of directories */ 3128c2ecf20Sopenharmony_ci __fs64 cs_nbfree; /* number of free blocks */ 3138c2ecf20Sopenharmony_ci __fs64 cs_nifree; /* number of free inodes */ 3148c2ecf20Sopenharmony_ci __fs64 cs_nffree; /* number of free frags */ 3158c2ecf20Sopenharmony_ci __fs64 cs_numclusters; /* number of free clusters */ 3168c2ecf20Sopenharmony_ci __fs64 cs_spare[3]; /* future expansion */ 3178c2ecf20Sopenharmony_ci}; 3188c2ecf20Sopenharmony_ci 3198c2ecf20Sopenharmony_cistruct ufs_csum_core { 3208c2ecf20Sopenharmony_ci __u64 cs_ndir; /* number of directories */ 3218c2ecf20Sopenharmony_ci __u64 cs_nbfree; /* number of free blocks */ 3228c2ecf20Sopenharmony_ci __u64 cs_nifree; /* number of free inodes */ 3238c2ecf20Sopenharmony_ci __u64 cs_nffree; /* number of free frags */ 3248c2ecf20Sopenharmony_ci __u64 cs_numclusters; /* number of free clusters */ 3258c2ecf20Sopenharmony_ci}; 3268c2ecf20Sopenharmony_ci 3278c2ecf20Sopenharmony_ci/* 3288c2ecf20Sopenharmony_ci * File system flags 3298c2ecf20Sopenharmony_ci */ 3308c2ecf20Sopenharmony_ci#define UFS_UNCLEAN 0x01 /* file system not clean at mount (unused) */ 3318c2ecf20Sopenharmony_ci#define UFS_DOSOFTDEP 0x02 /* file system using soft dependencies */ 3328c2ecf20Sopenharmony_ci#define UFS_NEEDSFSCK 0x04 /* needs sync fsck (FreeBSD compat, unused) */ 3338c2ecf20Sopenharmony_ci#define UFS_INDEXDIRS 0x08 /* kernel supports indexed directories */ 3348c2ecf20Sopenharmony_ci#define UFS_ACLS 0x10 /* file system has ACLs enabled */ 3358c2ecf20Sopenharmony_ci#define UFS_MULTILABEL 0x20 /* file system is MAC multi-label */ 3368c2ecf20Sopenharmony_ci#define UFS_FLAGS_UPDATED 0x80 /* flags have been moved to new location */ 3378c2ecf20Sopenharmony_ci 3388c2ecf20Sopenharmony_ci#if 0 3398c2ecf20Sopenharmony_ci/* 3408c2ecf20Sopenharmony_ci * This is the actual superblock, as it is laid out on the disk. 3418c2ecf20Sopenharmony_ci * Do NOT use this structure, because of sizeof(ufs_super_block) > 512 and 3428c2ecf20Sopenharmony_ci * it may occupy several blocks, use 3438c2ecf20Sopenharmony_ci * struct ufs_super_block_(first,second,third) instead. 3448c2ecf20Sopenharmony_ci */ 3458c2ecf20Sopenharmony_cistruct ufs_super_block { 3468c2ecf20Sopenharmony_ci union { 3478c2ecf20Sopenharmony_ci struct { 3488c2ecf20Sopenharmony_ci __fs32 fs_link; /* UNUSED */ 3498c2ecf20Sopenharmony_ci } fs_42; 3508c2ecf20Sopenharmony_ci struct { 3518c2ecf20Sopenharmony_ci __fs32 fs_state; /* file system state flag */ 3528c2ecf20Sopenharmony_ci } fs_sun; 3538c2ecf20Sopenharmony_ci } fs_u0; 3548c2ecf20Sopenharmony_ci __fs32 fs_rlink; /* UNUSED */ 3558c2ecf20Sopenharmony_ci __fs32 fs_sblkno; /* addr of super-block in filesys */ 3568c2ecf20Sopenharmony_ci __fs32 fs_cblkno; /* offset of cyl-block in filesys */ 3578c2ecf20Sopenharmony_ci __fs32 fs_iblkno; /* offset of inode-blocks in filesys */ 3588c2ecf20Sopenharmony_ci __fs32 fs_dblkno; /* offset of first data after cg */ 3598c2ecf20Sopenharmony_ci __fs32 fs_cgoffset; /* cylinder group offset in cylinder */ 3608c2ecf20Sopenharmony_ci __fs32 fs_cgmask; /* used to calc mod fs_ntrak */ 3618c2ecf20Sopenharmony_ci __fs32 fs_time; /* last time written -- time_t */ 3628c2ecf20Sopenharmony_ci __fs32 fs_size; /* number of blocks in fs */ 3638c2ecf20Sopenharmony_ci __fs32 fs_dsize; /* number of data blocks in fs */ 3648c2ecf20Sopenharmony_ci __fs32 fs_ncg; /* number of cylinder groups */ 3658c2ecf20Sopenharmony_ci __fs32 fs_bsize; /* size of basic blocks in fs */ 3668c2ecf20Sopenharmony_ci __fs32 fs_fsize; /* size of frag blocks in fs */ 3678c2ecf20Sopenharmony_ci __fs32 fs_frag; /* number of frags in a block in fs */ 3688c2ecf20Sopenharmony_ci/* these are configuration parameters */ 3698c2ecf20Sopenharmony_ci __fs32 fs_minfree; /* minimum percentage of free blocks */ 3708c2ecf20Sopenharmony_ci __fs32 fs_rotdelay; /* num of ms for optimal next block */ 3718c2ecf20Sopenharmony_ci __fs32 fs_rps; /* disk revolutions per second */ 3728c2ecf20Sopenharmony_ci/* these fields can be computed from the others */ 3738c2ecf20Sopenharmony_ci __fs32 fs_bmask; /* ``blkoff'' calc of blk offsets */ 3748c2ecf20Sopenharmony_ci __fs32 fs_fmask; /* ``fragoff'' calc of frag offsets */ 3758c2ecf20Sopenharmony_ci __fs32 fs_bshift; /* ``lblkno'' calc of logical blkno */ 3768c2ecf20Sopenharmony_ci __fs32 fs_fshift; /* ``numfrags'' calc number of frags */ 3778c2ecf20Sopenharmony_ci/* these are configuration parameters */ 3788c2ecf20Sopenharmony_ci __fs32 fs_maxcontig; /* max number of contiguous blks */ 3798c2ecf20Sopenharmony_ci __fs32 fs_maxbpg; /* max number of blks per cyl group */ 3808c2ecf20Sopenharmony_ci/* these fields can be computed from the others */ 3818c2ecf20Sopenharmony_ci __fs32 fs_fragshift; /* block to frag shift */ 3828c2ecf20Sopenharmony_ci __fs32 fs_fsbtodb; /* fsbtodb and dbtofsb shift constant */ 3838c2ecf20Sopenharmony_ci __fs32 fs_sbsize; /* actual size of super block */ 3848c2ecf20Sopenharmony_ci __fs32 fs_csmask; /* csum block offset */ 3858c2ecf20Sopenharmony_ci __fs32 fs_csshift; /* csum block number */ 3868c2ecf20Sopenharmony_ci __fs32 fs_nindir; /* value of NINDIR */ 3878c2ecf20Sopenharmony_ci __fs32 fs_inopb; /* value of INOPB */ 3888c2ecf20Sopenharmony_ci __fs32 fs_nspf; /* value of NSPF */ 3898c2ecf20Sopenharmony_ci/* yet another configuration parameter */ 3908c2ecf20Sopenharmony_ci __fs32 fs_optim; /* optimization preference, see below */ 3918c2ecf20Sopenharmony_ci/* these fields are derived from the hardware */ 3928c2ecf20Sopenharmony_ci union { 3938c2ecf20Sopenharmony_ci struct { 3948c2ecf20Sopenharmony_ci __fs32 fs_npsect; /* # sectors/track including spares */ 3958c2ecf20Sopenharmony_ci } fs_sun; 3968c2ecf20Sopenharmony_ci struct { 3978c2ecf20Sopenharmony_ci __fs32 fs_state; /* file system state time stamp */ 3988c2ecf20Sopenharmony_ci } fs_sunx86; 3998c2ecf20Sopenharmony_ci } fs_u1; 4008c2ecf20Sopenharmony_ci __fs32 fs_interleave; /* hardware sector interleave */ 4018c2ecf20Sopenharmony_ci __fs32 fs_trackskew; /* sector 0 skew, per track */ 4028c2ecf20Sopenharmony_ci/* a unique id for this filesystem (currently unused and unmaintained) */ 4038c2ecf20Sopenharmony_ci/* In 4.3 Tahoe this space is used by fs_headswitch and fs_trkseek */ 4048c2ecf20Sopenharmony_ci/* Neither of those fields is used in the Tahoe code right now but */ 4058c2ecf20Sopenharmony_ci/* there could be problems if they are. */ 4068c2ecf20Sopenharmony_ci __fs32 fs_id[2]; /* file system id */ 4078c2ecf20Sopenharmony_ci/* sizes determined by number of cylinder groups and their sizes */ 4088c2ecf20Sopenharmony_ci __fs32 fs_csaddr; /* blk addr of cyl grp summary area */ 4098c2ecf20Sopenharmony_ci __fs32 fs_cssize; /* size of cyl grp summary area */ 4108c2ecf20Sopenharmony_ci __fs32 fs_cgsize; /* cylinder group size */ 4118c2ecf20Sopenharmony_ci/* these fields are derived from the hardware */ 4128c2ecf20Sopenharmony_ci __fs32 fs_ntrak; /* tracks per cylinder */ 4138c2ecf20Sopenharmony_ci __fs32 fs_nsect; /* sectors per track */ 4148c2ecf20Sopenharmony_ci __fs32 fs_spc; /* sectors per cylinder */ 4158c2ecf20Sopenharmony_ci/* this comes from the disk driver partitioning */ 4168c2ecf20Sopenharmony_ci __fs32 fs_ncyl; /* cylinders in file system */ 4178c2ecf20Sopenharmony_ci/* these fields can be computed from the others */ 4188c2ecf20Sopenharmony_ci __fs32 fs_cpg; /* cylinders per group */ 4198c2ecf20Sopenharmony_ci __fs32 fs_ipg; /* inodes per cylinder group */ 4208c2ecf20Sopenharmony_ci __fs32 fs_fpg; /* blocks per group * fs_frag */ 4218c2ecf20Sopenharmony_ci/* this data must be re-computed after crashes */ 4228c2ecf20Sopenharmony_ci struct ufs_csum fs_cstotal; /* cylinder summary information */ 4238c2ecf20Sopenharmony_ci/* these fields are cleared at mount time */ 4248c2ecf20Sopenharmony_ci __s8 fs_fmod; /* super block modified flag */ 4258c2ecf20Sopenharmony_ci __s8 fs_clean; /* file system is clean flag */ 4268c2ecf20Sopenharmony_ci __s8 fs_ronly; /* mounted read-only flag */ 4278c2ecf20Sopenharmony_ci __s8 fs_flags; 4288c2ecf20Sopenharmony_ci union { 4298c2ecf20Sopenharmony_ci struct { 4308c2ecf20Sopenharmony_ci __s8 fs_fsmnt[UFS_MAXMNTLEN];/* name mounted on */ 4318c2ecf20Sopenharmony_ci __fs32 fs_cgrotor; /* last cg searched */ 4328c2ecf20Sopenharmony_ci __fs32 fs_csp[UFS_MAXCSBUFS];/*list of fs_cs info buffers */ 4338c2ecf20Sopenharmony_ci __fs32 fs_maxcluster; 4348c2ecf20Sopenharmony_ci __fs32 fs_cpc; /* cyl per cycle in postbl */ 4358c2ecf20Sopenharmony_ci __fs16 fs_opostbl[16][8]; /* old rotation block list head */ 4368c2ecf20Sopenharmony_ci } fs_u1; 4378c2ecf20Sopenharmony_ci struct { 4388c2ecf20Sopenharmony_ci __s8 fs_fsmnt[UFS2_MAXMNTLEN]; /* name mounted on */ 4398c2ecf20Sopenharmony_ci __u8 fs_volname[UFS2_MAXVOLLEN]; /* volume name */ 4408c2ecf20Sopenharmony_ci __fs64 fs_swuid; /* system-wide uid */ 4418c2ecf20Sopenharmony_ci __fs32 fs_pad; /* due to alignment of fs_swuid */ 4428c2ecf20Sopenharmony_ci __fs32 fs_cgrotor; /* last cg searched */ 4438c2ecf20Sopenharmony_ci __fs32 fs_ocsp[UFS2_NOCSPTRS]; /*list of fs_cs info buffers */ 4448c2ecf20Sopenharmony_ci __fs32 fs_contigdirs;/*# of contiguously allocated dirs */ 4458c2ecf20Sopenharmony_ci __fs32 fs_csp; /* cg summary info buffer for fs_cs */ 4468c2ecf20Sopenharmony_ci __fs32 fs_maxcluster; 4478c2ecf20Sopenharmony_ci __fs32 fs_active;/* used by snapshots to track fs */ 4488c2ecf20Sopenharmony_ci __fs32 fs_old_cpc; /* cyl per cycle in postbl */ 4498c2ecf20Sopenharmony_ci __fs32 fs_maxbsize;/*maximum blocking factor permitted */ 4508c2ecf20Sopenharmony_ci __fs64 fs_sparecon64[17];/*old rotation block list head */ 4518c2ecf20Sopenharmony_ci __fs64 fs_sblockloc; /* byte offset of standard superblock */ 4528c2ecf20Sopenharmony_ci struct ufs2_csum_total fs_cstotal;/*cylinder summary information*/ 4538c2ecf20Sopenharmony_ci struct ufs_timeval fs_time; /* last time written */ 4548c2ecf20Sopenharmony_ci __fs64 fs_size; /* number of blocks in fs */ 4558c2ecf20Sopenharmony_ci __fs64 fs_dsize; /* number of data blocks in fs */ 4568c2ecf20Sopenharmony_ci __fs64 fs_csaddr; /* blk addr of cyl grp summary area */ 4578c2ecf20Sopenharmony_ci __fs64 fs_pendingblocks;/* blocks in process of being freed */ 4588c2ecf20Sopenharmony_ci __fs32 fs_pendinginodes;/*inodes in process of being freed */ 4598c2ecf20Sopenharmony_ci } fs_u2; 4608c2ecf20Sopenharmony_ci } fs_u11; 4618c2ecf20Sopenharmony_ci union { 4628c2ecf20Sopenharmony_ci struct { 4638c2ecf20Sopenharmony_ci __fs32 fs_sparecon[53];/* reserved for future constants */ 4648c2ecf20Sopenharmony_ci __fs32 fs_reclaim; 4658c2ecf20Sopenharmony_ci __fs32 fs_sparecon2[1]; 4668c2ecf20Sopenharmony_ci __fs32 fs_state; /* file system state time stamp */ 4678c2ecf20Sopenharmony_ci __fs32 fs_qbmask[2]; /* ~usb_bmask */ 4688c2ecf20Sopenharmony_ci __fs32 fs_qfmask[2]; /* ~usb_fmask */ 4698c2ecf20Sopenharmony_ci } fs_sun; 4708c2ecf20Sopenharmony_ci struct { 4718c2ecf20Sopenharmony_ci __fs32 fs_sparecon[53];/* reserved for future constants */ 4728c2ecf20Sopenharmony_ci __fs32 fs_reclaim; 4738c2ecf20Sopenharmony_ci __fs32 fs_sparecon2[1]; 4748c2ecf20Sopenharmony_ci __fs32 fs_npsect; /* # sectors/track including spares */ 4758c2ecf20Sopenharmony_ci __fs32 fs_qbmask[2]; /* ~usb_bmask */ 4768c2ecf20Sopenharmony_ci __fs32 fs_qfmask[2]; /* ~usb_fmask */ 4778c2ecf20Sopenharmony_ci } fs_sunx86; 4788c2ecf20Sopenharmony_ci struct { 4798c2ecf20Sopenharmony_ci __fs32 fs_sparecon[50];/* reserved for future constants */ 4808c2ecf20Sopenharmony_ci __fs32 fs_contigsumsize;/* size of cluster summary array */ 4818c2ecf20Sopenharmony_ci __fs32 fs_maxsymlinklen;/* max length of an internal symlink */ 4828c2ecf20Sopenharmony_ci __fs32 fs_inodefmt; /* format of on-disk inodes */ 4838c2ecf20Sopenharmony_ci __fs32 fs_maxfilesize[2]; /* max representable file size */ 4848c2ecf20Sopenharmony_ci __fs32 fs_qbmask[2]; /* ~usb_bmask */ 4858c2ecf20Sopenharmony_ci __fs32 fs_qfmask[2]; /* ~usb_fmask */ 4868c2ecf20Sopenharmony_ci __fs32 fs_state; /* file system state time stamp */ 4878c2ecf20Sopenharmony_ci } fs_44; 4888c2ecf20Sopenharmony_ci } fs_u2; 4898c2ecf20Sopenharmony_ci __fs32 fs_postblformat; /* format of positional layout tables */ 4908c2ecf20Sopenharmony_ci __fs32 fs_nrpos; /* number of rotational positions */ 4918c2ecf20Sopenharmony_ci __fs32 fs_postbloff; /* (__s16) rotation block list head */ 4928c2ecf20Sopenharmony_ci __fs32 fs_rotbloff; /* (__u8) blocks for each rotation */ 4938c2ecf20Sopenharmony_ci __fs32 fs_magic; /* magic number */ 4948c2ecf20Sopenharmony_ci __u8 fs_space[1]; /* list of blocks for each rotation */ 4958c2ecf20Sopenharmony_ci}; 4968c2ecf20Sopenharmony_ci#endif/*struct ufs_super_block*/ 4978c2ecf20Sopenharmony_ci 4988c2ecf20Sopenharmony_ci/* 4998c2ecf20Sopenharmony_ci * Preference for optimization. 5008c2ecf20Sopenharmony_ci */ 5018c2ecf20Sopenharmony_ci#define UFS_OPTTIME 0 /* minimize allocation time */ 5028c2ecf20Sopenharmony_ci#define UFS_OPTSPACE 1 /* minimize disk fragmentation */ 5038c2ecf20Sopenharmony_ci 5048c2ecf20Sopenharmony_ci/* 5058c2ecf20Sopenharmony_ci * Rotational layout table format types 5068c2ecf20Sopenharmony_ci */ 5078c2ecf20Sopenharmony_ci#define UFS_42POSTBLFMT -1 /* 4.2BSD rotational table format */ 5088c2ecf20Sopenharmony_ci#define UFS_DYNAMICPOSTBLFMT 1 /* dynamic rotational table format */ 5098c2ecf20Sopenharmony_ci 5108c2ecf20Sopenharmony_ci/* 5118c2ecf20Sopenharmony_ci * Convert cylinder group to base address of its global summary info. 5128c2ecf20Sopenharmony_ci */ 5138c2ecf20Sopenharmony_ci#define fs_cs(indx) s_csp[(indx)] 5148c2ecf20Sopenharmony_ci 5158c2ecf20Sopenharmony_ci/* 5168c2ecf20Sopenharmony_ci * Cylinder group block for a file system. 5178c2ecf20Sopenharmony_ci * 5188c2ecf20Sopenharmony_ci * Writable fields in the cylinder group are protected by the associated 5198c2ecf20Sopenharmony_ci * super block lock fs->fs_lock. 5208c2ecf20Sopenharmony_ci */ 5218c2ecf20Sopenharmony_ci#define CG_MAGIC 0x090255 5228c2ecf20Sopenharmony_ci#define ufs_cg_chkmagic(sb, ucg) \ 5238c2ecf20Sopenharmony_ci (fs32_to_cpu((sb), (ucg)->cg_magic) == CG_MAGIC) 5248c2ecf20Sopenharmony_ci/* 5258c2ecf20Sopenharmony_ci * Macros for access to old cylinder group array structures 5268c2ecf20Sopenharmony_ci */ 5278c2ecf20Sopenharmony_ci#define ufs_ocg_blktot(sb, ucg) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_btot) 5288c2ecf20Sopenharmony_ci#define ufs_ocg_blks(sb, ucg, cylno) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_b[cylno]) 5298c2ecf20Sopenharmony_ci#define ufs_ocg_inosused(sb, ucg) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_iused) 5308c2ecf20Sopenharmony_ci#define ufs_ocg_blksfree(sb, ucg) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_free) 5318c2ecf20Sopenharmony_ci#define ufs_ocg_chkmagic(sb, ucg) \ 5328c2ecf20Sopenharmony_ci (fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_magic) == CG_MAGIC) 5338c2ecf20Sopenharmony_ci 5348c2ecf20Sopenharmony_ci/* 5358c2ecf20Sopenharmony_ci * size of this structure is 172 B 5368c2ecf20Sopenharmony_ci */ 5378c2ecf20Sopenharmony_cistruct ufs_cylinder_group { 5388c2ecf20Sopenharmony_ci __fs32 cg_link; /* linked list of cyl groups */ 5398c2ecf20Sopenharmony_ci __fs32 cg_magic; /* magic number */ 5408c2ecf20Sopenharmony_ci __fs32 cg_time; /* time last written */ 5418c2ecf20Sopenharmony_ci __fs32 cg_cgx; /* we are the cgx'th cylinder group */ 5428c2ecf20Sopenharmony_ci __fs16 cg_ncyl; /* number of cyl's this cg */ 5438c2ecf20Sopenharmony_ci __fs16 cg_niblk; /* number of inode blocks this cg */ 5448c2ecf20Sopenharmony_ci __fs32 cg_ndblk; /* number of data blocks this cg */ 5458c2ecf20Sopenharmony_ci struct ufs_csum cg_cs; /* cylinder summary information */ 5468c2ecf20Sopenharmony_ci __fs32 cg_rotor; /* position of last used block */ 5478c2ecf20Sopenharmony_ci __fs32 cg_frotor; /* position of last used frag */ 5488c2ecf20Sopenharmony_ci __fs32 cg_irotor; /* position of last used inode */ 5498c2ecf20Sopenharmony_ci __fs32 cg_frsum[UFS_MAXFRAG]; /* counts of available frags */ 5508c2ecf20Sopenharmony_ci __fs32 cg_btotoff; /* (__u32) block totals per cylinder */ 5518c2ecf20Sopenharmony_ci __fs32 cg_boff; /* (short) free block positions */ 5528c2ecf20Sopenharmony_ci __fs32 cg_iusedoff; /* (char) used inode map */ 5538c2ecf20Sopenharmony_ci __fs32 cg_freeoff; /* (u_char) free block map */ 5548c2ecf20Sopenharmony_ci __fs32 cg_nextfreeoff; /* (u_char) next available space */ 5558c2ecf20Sopenharmony_ci union { 5568c2ecf20Sopenharmony_ci struct { 5578c2ecf20Sopenharmony_ci __fs32 cg_clustersumoff; /* (u_int32) counts of avail clusters */ 5588c2ecf20Sopenharmony_ci __fs32 cg_clusteroff; /* (u_int8) free cluster map */ 5598c2ecf20Sopenharmony_ci __fs32 cg_nclusterblks; /* number of clusters this cg */ 5608c2ecf20Sopenharmony_ci __fs32 cg_sparecon[13]; /* reserved for future use */ 5618c2ecf20Sopenharmony_ci } cg_44; 5628c2ecf20Sopenharmony_ci struct { 5638c2ecf20Sopenharmony_ci __fs32 cg_clustersumoff;/* (u_int32) counts of avail clusters */ 5648c2ecf20Sopenharmony_ci __fs32 cg_clusteroff; /* (u_int8) free cluster map */ 5658c2ecf20Sopenharmony_ci __fs32 cg_nclusterblks;/* number of clusters this cg */ 5668c2ecf20Sopenharmony_ci __fs32 cg_niblk; /* number of inode blocks this cg */ 5678c2ecf20Sopenharmony_ci __fs32 cg_initediblk; /* last initialized inode */ 5688c2ecf20Sopenharmony_ci __fs32 cg_sparecon32[3];/* reserved for future use */ 5698c2ecf20Sopenharmony_ci __fs64 cg_time; /* time last written */ 5708c2ecf20Sopenharmony_ci __fs64 cg_sparecon[3]; /* reserved for future use */ 5718c2ecf20Sopenharmony_ci } cg_u2; 5728c2ecf20Sopenharmony_ci __fs32 cg_sparecon[16]; /* reserved for future use */ 5738c2ecf20Sopenharmony_ci } cg_u; 5748c2ecf20Sopenharmony_ci __u8 cg_space[1]; /* space for cylinder group maps */ 5758c2ecf20Sopenharmony_ci/* actually longer */ 5768c2ecf20Sopenharmony_ci}; 5778c2ecf20Sopenharmony_ci 5788c2ecf20Sopenharmony_ci/* Historic Cylinder group info */ 5798c2ecf20Sopenharmony_cistruct ufs_old_cylinder_group { 5808c2ecf20Sopenharmony_ci __fs32 cg_link; /* linked list of cyl groups */ 5818c2ecf20Sopenharmony_ci __fs32 cg_rlink; /* for incore cyl groups */ 5828c2ecf20Sopenharmony_ci __fs32 cg_time; /* time last written */ 5838c2ecf20Sopenharmony_ci __fs32 cg_cgx; /* we are the cgx'th cylinder group */ 5848c2ecf20Sopenharmony_ci __fs16 cg_ncyl; /* number of cyl's this cg */ 5858c2ecf20Sopenharmony_ci __fs16 cg_niblk; /* number of inode blocks this cg */ 5868c2ecf20Sopenharmony_ci __fs32 cg_ndblk; /* number of data blocks this cg */ 5878c2ecf20Sopenharmony_ci struct ufs_csum cg_cs; /* cylinder summary information */ 5888c2ecf20Sopenharmony_ci __fs32 cg_rotor; /* position of last used block */ 5898c2ecf20Sopenharmony_ci __fs32 cg_frotor; /* position of last used frag */ 5908c2ecf20Sopenharmony_ci __fs32 cg_irotor; /* position of last used inode */ 5918c2ecf20Sopenharmony_ci __fs32 cg_frsum[8]; /* counts of available frags */ 5928c2ecf20Sopenharmony_ci __fs32 cg_btot[32]; /* block totals per cylinder */ 5938c2ecf20Sopenharmony_ci __fs16 cg_b[32][8]; /* positions of free blocks */ 5948c2ecf20Sopenharmony_ci __u8 cg_iused[256]; /* used inode map */ 5958c2ecf20Sopenharmony_ci __fs32 cg_magic; /* magic number */ 5968c2ecf20Sopenharmony_ci __u8 cg_free[1]; /* free block map */ 5978c2ecf20Sopenharmony_ci/* actually longer */ 5988c2ecf20Sopenharmony_ci}; 5998c2ecf20Sopenharmony_ci 6008c2ecf20Sopenharmony_ci/* 6018c2ecf20Sopenharmony_ci * structure of an on-disk inode 6028c2ecf20Sopenharmony_ci */ 6038c2ecf20Sopenharmony_cistruct ufs_inode { 6048c2ecf20Sopenharmony_ci __fs16 ui_mode; /* 0x0 */ 6058c2ecf20Sopenharmony_ci __fs16 ui_nlink; /* 0x2 */ 6068c2ecf20Sopenharmony_ci union { 6078c2ecf20Sopenharmony_ci struct { 6088c2ecf20Sopenharmony_ci __fs16 ui_suid; /* 0x4 */ 6098c2ecf20Sopenharmony_ci __fs16 ui_sgid; /* 0x6 */ 6108c2ecf20Sopenharmony_ci } oldids; 6118c2ecf20Sopenharmony_ci __fs32 ui_inumber; /* 0x4 lsf: inode number */ 6128c2ecf20Sopenharmony_ci __fs32 ui_author; /* 0x4 GNU HURD: author */ 6138c2ecf20Sopenharmony_ci } ui_u1; 6148c2ecf20Sopenharmony_ci __fs64 ui_size; /* 0x8 */ 6158c2ecf20Sopenharmony_ci struct ufs_timeval ui_atime; /* 0x10 access */ 6168c2ecf20Sopenharmony_ci struct ufs_timeval ui_mtime; /* 0x18 modification */ 6178c2ecf20Sopenharmony_ci struct ufs_timeval ui_ctime; /* 0x20 creation */ 6188c2ecf20Sopenharmony_ci union { 6198c2ecf20Sopenharmony_ci struct { 6208c2ecf20Sopenharmony_ci __fs32 ui_db[UFS_NDADDR];/* 0x28 data blocks */ 6218c2ecf20Sopenharmony_ci __fs32 ui_ib[UFS_NINDIR];/* 0x58 indirect blocks */ 6228c2ecf20Sopenharmony_ci } ui_addr; 6238c2ecf20Sopenharmony_ci __u8 ui_symlink[4*(UFS_NDADDR+UFS_NINDIR)];/* 0x28 fast symlink */ 6248c2ecf20Sopenharmony_ci } ui_u2; 6258c2ecf20Sopenharmony_ci __fs32 ui_flags; /* 0x64 immutable, append-only... */ 6268c2ecf20Sopenharmony_ci __fs32 ui_blocks; /* 0x68 blocks in use */ 6278c2ecf20Sopenharmony_ci __fs32 ui_gen; /* 0x6c like ext2 i_version, for NFS support */ 6288c2ecf20Sopenharmony_ci union { 6298c2ecf20Sopenharmony_ci struct { 6308c2ecf20Sopenharmony_ci __fs32 ui_shadow; /* 0x70 shadow inode with security data */ 6318c2ecf20Sopenharmony_ci __fs32 ui_uid; /* 0x74 long EFT version of uid */ 6328c2ecf20Sopenharmony_ci __fs32 ui_gid; /* 0x78 long EFT version of gid */ 6338c2ecf20Sopenharmony_ci __fs32 ui_oeftflag; /* 0x7c reserved */ 6348c2ecf20Sopenharmony_ci } ui_sun; 6358c2ecf20Sopenharmony_ci struct { 6368c2ecf20Sopenharmony_ci __fs32 ui_uid; /* 0x70 File owner */ 6378c2ecf20Sopenharmony_ci __fs32 ui_gid; /* 0x74 File group */ 6388c2ecf20Sopenharmony_ci __fs32 ui_spare[2]; /* 0x78 reserved */ 6398c2ecf20Sopenharmony_ci } ui_44; 6408c2ecf20Sopenharmony_ci struct { 6418c2ecf20Sopenharmony_ci __fs32 ui_uid; /* 0x70 */ 6428c2ecf20Sopenharmony_ci __fs32 ui_gid; /* 0x74 */ 6438c2ecf20Sopenharmony_ci __fs16 ui_modeh; /* 0x78 mode high bits */ 6448c2ecf20Sopenharmony_ci __fs16 ui_spare; /* 0x7A unused */ 6458c2ecf20Sopenharmony_ci __fs32 ui_trans; /* 0x7c filesystem translator */ 6468c2ecf20Sopenharmony_ci } ui_hurd; 6478c2ecf20Sopenharmony_ci } ui_u3; 6488c2ecf20Sopenharmony_ci}; 6498c2ecf20Sopenharmony_ci 6508c2ecf20Sopenharmony_ci#define UFS_NXADDR 2 /* External addresses in inode. */ 6518c2ecf20Sopenharmony_cistruct ufs2_inode { 6528c2ecf20Sopenharmony_ci __fs16 ui_mode; /* 0: IFMT, permissions; see below. */ 6538c2ecf20Sopenharmony_ci __fs16 ui_nlink; /* 2: File link count. */ 6548c2ecf20Sopenharmony_ci __fs32 ui_uid; /* 4: File owner. */ 6558c2ecf20Sopenharmony_ci __fs32 ui_gid; /* 8: File group. */ 6568c2ecf20Sopenharmony_ci __fs32 ui_blksize; /* 12: Inode blocksize. */ 6578c2ecf20Sopenharmony_ci __fs64 ui_size; /* 16: File byte count. */ 6588c2ecf20Sopenharmony_ci __fs64 ui_blocks; /* 24: Bytes actually held. */ 6598c2ecf20Sopenharmony_ci __fs64 ui_atime; /* 32: Last access time. */ 6608c2ecf20Sopenharmony_ci __fs64 ui_mtime; /* 40: Last modified time. */ 6618c2ecf20Sopenharmony_ci __fs64 ui_ctime; /* 48: Last inode change time. */ 6628c2ecf20Sopenharmony_ci __fs64 ui_birthtime; /* 56: Inode creation time. */ 6638c2ecf20Sopenharmony_ci __fs32 ui_mtimensec; /* 64: Last modified time. */ 6648c2ecf20Sopenharmony_ci __fs32 ui_atimensec; /* 68: Last access time. */ 6658c2ecf20Sopenharmony_ci __fs32 ui_ctimensec; /* 72: Last inode change time. */ 6668c2ecf20Sopenharmony_ci __fs32 ui_birthnsec; /* 76: Inode creation time. */ 6678c2ecf20Sopenharmony_ci __fs32 ui_gen; /* 80: Generation number. */ 6688c2ecf20Sopenharmony_ci __fs32 ui_kernflags; /* 84: Kernel flags. */ 6698c2ecf20Sopenharmony_ci __fs32 ui_flags; /* 88: Status flags (chflags). */ 6708c2ecf20Sopenharmony_ci __fs32 ui_extsize; /* 92: External attributes block. */ 6718c2ecf20Sopenharmony_ci __fs64 ui_extb[UFS_NXADDR];/* 96: External attributes block. */ 6728c2ecf20Sopenharmony_ci union { 6738c2ecf20Sopenharmony_ci struct { 6748c2ecf20Sopenharmony_ci __fs64 ui_db[UFS_NDADDR]; /* 112: Direct disk blocks. */ 6758c2ecf20Sopenharmony_ci __fs64 ui_ib[UFS_NINDIR];/* 208: Indirect disk blocks.*/ 6768c2ecf20Sopenharmony_ci } ui_addr; 6778c2ecf20Sopenharmony_ci __u8 ui_symlink[2*4*(UFS_NDADDR+UFS_NINDIR)];/* 0x28 fast symlink */ 6788c2ecf20Sopenharmony_ci } ui_u2; 6798c2ecf20Sopenharmony_ci __fs64 ui_spare[3]; /* 232: Reserved; currently unused */ 6808c2ecf20Sopenharmony_ci}; 6818c2ecf20Sopenharmony_ci 6828c2ecf20Sopenharmony_ci 6838c2ecf20Sopenharmony_ci/* FreeBSD has these in sys/stat.h */ 6848c2ecf20Sopenharmony_ci/* ui_flags that can be set by a file owner */ 6858c2ecf20Sopenharmony_ci#define UFS_UF_SETTABLE 0x0000ffff 6868c2ecf20Sopenharmony_ci#define UFS_UF_NODUMP 0x00000001 /* do not dump */ 6878c2ecf20Sopenharmony_ci#define UFS_UF_IMMUTABLE 0x00000002 /* immutable (can't "change") */ 6888c2ecf20Sopenharmony_ci#define UFS_UF_APPEND 0x00000004 /* append-only */ 6898c2ecf20Sopenharmony_ci#define UFS_UF_OPAQUE 0x00000008 /* directory is opaque (unionfs) */ 6908c2ecf20Sopenharmony_ci#define UFS_UF_NOUNLINK 0x00000010 /* can't be removed or renamed */ 6918c2ecf20Sopenharmony_ci/* ui_flags that only root can set */ 6928c2ecf20Sopenharmony_ci#define UFS_SF_SETTABLE 0xffff0000 6938c2ecf20Sopenharmony_ci#define UFS_SF_ARCHIVED 0x00010000 /* archived */ 6948c2ecf20Sopenharmony_ci#define UFS_SF_IMMUTABLE 0x00020000 /* immutable (can't "change") */ 6958c2ecf20Sopenharmony_ci#define UFS_SF_APPEND 0x00040000 /* append-only */ 6968c2ecf20Sopenharmony_ci#define UFS_SF_NOUNLINK 0x00100000 /* can't be removed or renamed */ 6978c2ecf20Sopenharmony_ci 6988c2ecf20Sopenharmony_ci/* 6998c2ecf20Sopenharmony_ci * This structure is used for reading disk structures larger 7008c2ecf20Sopenharmony_ci * than the size of fragment. 7018c2ecf20Sopenharmony_ci */ 7028c2ecf20Sopenharmony_cistruct ufs_buffer_head { 7038c2ecf20Sopenharmony_ci __u64 fragment; /* first fragment */ 7048c2ecf20Sopenharmony_ci __u64 count; /* number of fragments */ 7058c2ecf20Sopenharmony_ci struct buffer_head * bh[UFS_MAXFRAG]; /* buffers */ 7068c2ecf20Sopenharmony_ci}; 7078c2ecf20Sopenharmony_ci 7088c2ecf20Sopenharmony_cistruct ufs_cg_private_info { 7098c2ecf20Sopenharmony_ci struct ufs_buffer_head c_ubh; 7108c2ecf20Sopenharmony_ci __u32 c_cgx; /* number of cylidner group */ 7118c2ecf20Sopenharmony_ci __u16 c_ncyl; /* number of cyl's this cg */ 7128c2ecf20Sopenharmony_ci __u16 c_niblk; /* number of inode blocks this cg */ 7138c2ecf20Sopenharmony_ci __u32 c_ndblk; /* number of data blocks this cg */ 7148c2ecf20Sopenharmony_ci __u32 c_rotor; /* position of last used block */ 7158c2ecf20Sopenharmony_ci __u32 c_frotor; /* position of last used frag */ 7168c2ecf20Sopenharmony_ci __u32 c_irotor; /* position of last used inode */ 7178c2ecf20Sopenharmony_ci __u32 c_btotoff; /* (__u32) block totals per cylinder */ 7188c2ecf20Sopenharmony_ci __u32 c_boff; /* (short) free block positions */ 7198c2ecf20Sopenharmony_ci __u32 c_iusedoff; /* (char) used inode map */ 7208c2ecf20Sopenharmony_ci __u32 c_freeoff; /* (u_char) free block map */ 7218c2ecf20Sopenharmony_ci __u32 c_nextfreeoff; /* (u_char) next available space */ 7228c2ecf20Sopenharmony_ci __u32 c_clustersumoff;/* (u_int32) counts of avail clusters */ 7238c2ecf20Sopenharmony_ci __u32 c_clusteroff; /* (u_int8) free cluster map */ 7248c2ecf20Sopenharmony_ci __u32 c_nclusterblks; /* number of clusters this cg */ 7258c2ecf20Sopenharmony_ci}; 7268c2ecf20Sopenharmony_ci 7278c2ecf20Sopenharmony_ci 7288c2ecf20Sopenharmony_cistruct ufs_sb_private_info { 7298c2ecf20Sopenharmony_ci struct ufs_buffer_head s_ubh; /* buffer containing super block */ 7308c2ecf20Sopenharmony_ci struct ufs_csum_core cs_total; 7318c2ecf20Sopenharmony_ci __u32 s_sblkno; /* offset of super-blocks in filesys */ 7328c2ecf20Sopenharmony_ci __u32 s_cblkno; /* offset of cg-block in filesys */ 7338c2ecf20Sopenharmony_ci __u32 s_iblkno; /* offset of inode-blocks in filesys */ 7348c2ecf20Sopenharmony_ci __u32 s_dblkno; /* offset of first data after cg */ 7358c2ecf20Sopenharmony_ci __u32 s_cgoffset; /* cylinder group offset in cylinder */ 7368c2ecf20Sopenharmony_ci __u32 s_cgmask; /* used to calc mod fs_ntrak */ 7378c2ecf20Sopenharmony_ci __u64 s_size; /* number of blocks (fragments) in fs */ 7388c2ecf20Sopenharmony_ci __u64 s_dsize; /* number of data blocks in fs */ 7398c2ecf20Sopenharmony_ci __u32 s_ncg; /* number of cylinder groups */ 7408c2ecf20Sopenharmony_ci __u32 s_bsize; /* size of basic blocks */ 7418c2ecf20Sopenharmony_ci __u32 s_fsize; /* size of fragments */ 7428c2ecf20Sopenharmony_ci __u32 s_fpb; /* fragments per block */ 7438c2ecf20Sopenharmony_ci __u32 s_minfree; /* minimum percentage of free blocks */ 7448c2ecf20Sopenharmony_ci __u32 s_bmask; /* `blkoff'' calc of blk offsets */ 7458c2ecf20Sopenharmony_ci __u32 s_fmask; /* s_fsize mask */ 7468c2ecf20Sopenharmony_ci __u32 s_bshift; /* `lblkno'' calc of logical blkno */ 7478c2ecf20Sopenharmony_ci __u32 s_fshift; /* s_fsize shift */ 7488c2ecf20Sopenharmony_ci __u32 s_fpbshift; /* fragments per block shift */ 7498c2ecf20Sopenharmony_ci __u32 s_fsbtodb; /* fsbtodb and dbtofsb shift constant */ 7508c2ecf20Sopenharmony_ci __u32 s_sbsize; /* actual size of super block */ 7518c2ecf20Sopenharmony_ci __u32 s_csmask; /* csum block offset */ 7528c2ecf20Sopenharmony_ci __u32 s_csshift; /* csum block number */ 7538c2ecf20Sopenharmony_ci __u32 s_nindir; /* value of NINDIR */ 7548c2ecf20Sopenharmony_ci __u32 s_inopb; /* value of INOPB */ 7558c2ecf20Sopenharmony_ci __u32 s_nspf; /* value of NSPF */ 7568c2ecf20Sopenharmony_ci __u32 s_npsect; /* # sectors/track including spares */ 7578c2ecf20Sopenharmony_ci __u32 s_interleave; /* hardware sector interleave */ 7588c2ecf20Sopenharmony_ci __u32 s_trackskew; /* sector 0 skew, per track */ 7598c2ecf20Sopenharmony_ci __u64 s_csaddr; /* blk addr of cyl grp summary area */ 7608c2ecf20Sopenharmony_ci __u32 s_cssize; /* size of cyl grp summary area */ 7618c2ecf20Sopenharmony_ci __u32 s_cgsize; /* cylinder group size */ 7628c2ecf20Sopenharmony_ci __u32 s_ntrak; /* tracks per cylinder */ 7638c2ecf20Sopenharmony_ci __u32 s_nsect; /* sectors per track */ 7648c2ecf20Sopenharmony_ci __u32 s_spc; /* sectors per cylinder */ 7658c2ecf20Sopenharmony_ci __u32 s_ipg; /* inodes per cylinder group */ 7668c2ecf20Sopenharmony_ci __u32 s_fpg; /* fragments per group */ 7678c2ecf20Sopenharmony_ci __u32 s_cpc; /* cyl per cycle in postbl */ 7688c2ecf20Sopenharmony_ci __s32 s_contigsumsize;/* size of cluster summary array, 44bsd */ 7698c2ecf20Sopenharmony_ci __s64 s_qbmask; /* ~usb_bmask */ 7708c2ecf20Sopenharmony_ci __s64 s_qfmask; /* ~usb_fmask */ 7718c2ecf20Sopenharmony_ci __s32 s_postblformat; /* format of positional layout tables */ 7728c2ecf20Sopenharmony_ci __s32 s_nrpos; /* number of rotational positions */ 7738c2ecf20Sopenharmony_ci __s32 s_postbloff; /* (__s16) rotation block list head */ 7748c2ecf20Sopenharmony_ci __s32 s_rotbloff; /* (__u8) blocks for each rotation */ 7758c2ecf20Sopenharmony_ci 7768c2ecf20Sopenharmony_ci __u32 s_fpbmask; /* fragments per block mask */ 7778c2ecf20Sopenharmony_ci __u32 s_apb; /* address per block */ 7788c2ecf20Sopenharmony_ci __u32 s_2apb; /* address per block^2 */ 7798c2ecf20Sopenharmony_ci __u32 s_3apb; /* address per block^3 */ 7808c2ecf20Sopenharmony_ci __u32 s_apbmask; /* address per block mask */ 7818c2ecf20Sopenharmony_ci __u32 s_apbshift; /* address per block shift */ 7828c2ecf20Sopenharmony_ci __u32 s_2apbshift; /* address per block shift * 2 */ 7838c2ecf20Sopenharmony_ci __u32 s_3apbshift; /* address per block shift * 3 */ 7848c2ecf20Sopenharmony_ci __u32 s_nspfshift; /* number of sector per fragment shift */ 7858c2ecf20Sopenharmony_ci __u32 s_nspb; /* number of sector per block */ 7868c2ecf20Sopenharmony_ci __u32 s_inopf; /* inodes per fragment */ 7878c2ecf20Sopenharmony_ci __u32 s_sbbase; /* offset of NeXTstep superblock */ 7888c2ecf20Sopenharmony_ci __u32 s_bpf; /* bits per fragment */ 7898c2ecf20Sopenharmony_ci __u32 s_bpfshift; /* bits per fragment shift*/ 7908c2ecf20Sopenharmony_ci __u32 s_bpfmask; /* bits per fragment mask */ 7918c2ecf20Sopenharmony_ci 7928c2ecf20Sopenharmony_ci __u32 s_maxsymlinklen;/* upper limit on fast symlinks' size */ 7938c2ecf20Sopenharmony_ci __s32 fs_magic; /* filesystem magic */ 7948c2ecf20Sopenharmony_ci unsigned int s_dirblksize; 7958c2ecf20Sopenharmony_ci __u64 s_root_blocks; 7968c2ecf20Sopenharmony_ci __u64 s_time_to_space; 7978c2ecf20Sopenharmony_ci __u64 s_space_to_time; 7988c2ecf20Sopenharmony_ci}; 7998c2ecf20Sopenharmony_ci 8008c2ecf20Sopenharmony_ci/* 8018c2ecf20Sopenharmony_ci * Sizes of this structures are: 8028c2ecf20Sopenharmony_ci * ufs_super_block_first 512 8038c2ecf20Sopenharmony_ci * ufs_super_block_second 512 8048c2ecf20Sopenharmony_ci * ufs_super_block_third 356 8058c2ecf20Sopenharmony_ci */ 8068c2ecf20Sopenharmony_cistruct ufs_super_block_first { 8078c2ecf20Sopenharmony_ci union { 8088c2ecf20Sopenharmony_ci struct { 8098c2ecf20Sopenharmony_ci __fs32 fs_link; /* UNUSED */ 8108c2ecf20Sopenharmony_ci } fs_42; 8118c2ecf20Sopenharmony_ci struct { 8128c2ecf20Sopenharmony_ci __fs32 fs_state; /* file system state flag */ 8138c2ecf20Sopenharmony_ci } fs_sun; 8148c2ecf20Sopenharmony_ci } fs_u0; 8158c2ecf20Sopenharmony_ci __fs32 fs_rlink; 8168c2ecf20Sopenharmony_ci __fs32 fs_sblkno; 8178c2ecf20Sopenharmony_ci __fs32 fs_cblkno; 8188c2ecf20Sopenharmony_ci __fs32 fs_iblkno; 8198c2ecf20Sopenharmony_ci __fs32 fs_dblkno; 8208c2ecf20Sopenharmony_ci __fs32 fs_cgoffset; 8218c2ecf20Sopenharmony_ci __fs32 fs_cgmask; 8228c2ecf20Sopenharmony_ci __fs32 fs_time; 8238c2ecf20Sopenharmony_ci __fs32 fs_size; 8248c2ecf20Sopenharmony_ci __fs32 fs_dsize; 8258c2ecf20Sopenharmony_ci __fs32 fs_ncg; 8268c2ecf20Sopenharmony_ci __fs32 fs_bsize; 8278c2ecf20Sopenharmony_ci __fs32 fs_fsize; 8288c2ecf20Sopenharmony_ci __fs32 fs_frag; 8298c2ecf20Sopenharmony_ci __fs32 fs_minfree; 8308c2ecf20Sopenharmony_ci __fs32 fs_rotdelay; 8318c2ecf20Sopenharmony_ci __fs32 fs_rps; 8328c2ecf20Sopenharmony_ci __fs32 fs_bmask; 8338c2ecf20Sopenharmony_ci __fs32 fs_fmask; 8348c2ecf20Sopenharmony_ci __fs32 fs_bshift; 8358c2ecf20Sopenharmony_ci __fs32 fs_fshift; 8368c2ecf20Sopenharmony_ci __fs32 fs_maxcontig; 8378c2ecf20Sopenharmony_ci __fs32 fs_maxbpg; 8388c2ecf20Sopenharmony_ci __fs32 fs_fragshift; 8398c2ecf20Sopenharmony_ci __fs32 fs_fsbtodb; 8408c2ecf20Sopenharmony_ci __fs32 fs_sbsize; 8418c2ecf20Sopenharmony_ci __fs32 fs_csmask; 8428c2ecf20Sopenharmony_ci __fs32 fs_csshift; 8438c2ecf20Sopenharmony_ci __fs32 fs_nindir; 8448c2ecf20Sopenharmony_ci __fs32 fs_inopb; 8458c2ecf20Sopenharmony_ci __fs32 fs_nspf; 8468c2ecf20Sopenharmony_ci __fs32 fs_optim; 8478c2ecf20Sopenharmony_ci union { 8488c2ecf20Sopenharmony_ci struct { 8498c2ecf20Sopenharmony_ci __fs32 fs_npsect; 8508c2ecf20Sopenharmony_ci } fs_sun; 8518c2ecf20Sopenharmony_ci struct { 8528c2ecf20Sopenharmony_ci __fs32 fs_state; 8538c2ecf20Sopenharmony_ci } fs_sunx86; 8548c2ecf20Sopenharmony_ci } fs_u1; 8558c2ecf20Sopenharmony_ci __fs32 fs_interleave; 8568c2ecf20Sopenharmony_ci __fs32 fs_trackskew; 8578c2ecf20Sopenharmony_ci __fs32 fs_id[2]; 8588c2ecf20Sopenharmony_ci __fs32 fs_csaddr; 8598c2ecf20Sopenharmony_ci __fs32 fs_cssize; 8608c2ecf20Sopenharmony_ci __fs32 fs_cgsize; 8618c2ecf20Sopenharmony_ci __fs32 fs_ntrak; 8628c2ecf20Sopenharmony_ci __fs32 fs_nsect; 8638c2ecf20Sopenharmony_ci __fs32 fs_spc; 8648c2ecf20Sopenharmony_ci __fs32 fs_ncyl; 8658c2ecf20Sopenharmony_ci __fs32 fs_cpg; 8668c2ecf20Sopenharmony_ci __fs32 fs_ipg; 8678c2ecf20Sopenharmony_ci __fs32 fs_fpg; 8688c2ecf20Sopenharmony_ci struct ufs_csum fs_cstotal; 8698c2ecf20Sopenharmony_ci __s8 fs_fmod; 8708c2ecf20Sopenharmony_ci __s8 fs_clean; 8718c2ecf20Sopenharmony_ci __s8 fs_ronly; 8728c2ecf20Sopenharmony_ci __s8 fs_flags; 8738c2ecf20Sopenharmony_ci __s8 fs_fsmnt[UFS_MAXMNTLEN - 212]; 8748c2ecf20Sopenharmony_ci 8758c2ecf20Sopenharmony_ci}; 8768c2ecf20Sopenharmony_ci 8778c2ecf20Sopenharmony_cistruct ufs_super_block_second { 8788c2ecf20Sopenharmony_ci union { 8798c2ecf20Sopenharmony_ci struct { 8808c2ecf20Sopenharmony_ci __s8 fs_fsmnt[212]; 8818c2ecf20Sopenharmony_ci __fs32 fs_cgrotor; 8828c2ecf20Sopenharmony_ci __fs32 fs_csp[UFS_MAXCSBUFS]; 8838c2ecf20Sopenharmony_ci __fs32 fs_maxcluster; 8848c2ecf20Sopenharmony_ci __fs32 fs_cpc; 8858c2ecf20Sopenharmony_ci __fs16 fs_opostbl[82]; 8868c2ecf20Sopenharmony_ci } fs_u1; 8878c2ecf20Sopenharmony_ci struct { 8888c2ecf20Sopenharmony_ci __s8 fs_fsmnt[UFS2_MAXMNTLEN - UFS_MAXMNTLEN + 212]; 8898c2ecf20Sopenharmony_ci __u8 fs_volname[UFS2_MAXVOLLEN]; 8908c2ecf20Sopenharmony_ci __fs64 fs_swuid; 8918c2ecf20Sopenharmony_ci __fs32 fs_pad; 8928c2ecf20Sopenharmony_ci __fs32 fs_cgrotor; 8938c2ecf20Sopenharmony_ci __fs32 fs_ocsp[UFS2_NOCSPTRS]; 8948c2ecf20Sopenharmony_ci __fs32 fs_contigdirs; 8958c2ecf20Sopenharmony_ci __fs32 fs_csp; 8968c2ecf20Sopenharmony_ci __fs32 fs_maxcluster; 8978c2ecf20Sopenharmony_ci __fs32 fs_active; 8988c2ecf20Sopenharmony_ci __fs32 fs_old_cpc; 8998c2ecf20Sopenharmony_ci __fs32 fs_maxbsize; 9008c2ecf20Sopenharmony_ci __fs64 fs_sparecon64[17]; 9018c2ecf20Sopenharmony_ci __fs64 fs_sblockloc; 9028c2ecf20Sopenharmony_ci __fs64 cs_ndir; 9038c2ecf20Sopenharmony_ci __fs64 cs_nbfree; 9048c2ecf20Sopenharmony_ci } fs_u2; 9058c2ecf20Sopenharmony_ci } fs_un; 9068c2ecf20Sopenharmony_ci}; 9078c2ecf20Sopenharmony_ci 9088c2ecf20Sopenharmony_cistruct ufs_super_block_third { 9098c2ecf20Sopenharmony_ci union { 9108c2ecf20Sopenharmony_ci struct { 9118c2ecf20Sopenharmony_ci __fs16 fs_opostbl[46]; 9128c2ecf20Sopenharmony_ci } fs_u1; 9138c2ecf20Sopenharmony_ci struct { 9148c2ecf20Sopenharmony_ci __fs64 cs_nifree; /* number of free inodes */ 9158c2ecf20Sopenharmony_ci __fs64 cs_nffree; /* number of free frags */ 9168c2ecf20Sopenharmony_ci __fs64 cs_numclusters; /* number of free clusters */ 9178c2ecf20Sopenharmony_ci __fs64 cs_spare[3]; /* future expansion */ 9188c2ecf20Sopenharmony_ci struct ufs_timeval fs_time; /* last time written */ 9198c2ecf20Sopenharmony_ci __fs64 fs_size; /* number of blocks in fs */ 9208c2ecf20Sopenharmony_ci __fs64 fs_dsize; /* number of data blocks in fs */ 9218c2ecf20Sopenharmony_ci __fs64 fs_csaddr; /* blk addr of cyl grp summary area */ 9228c2ecf20Sopenharmony_ci __fs64 fs_pendingblocks;/* blocks in process of being freed */ 9238c2ecf20Sopenharmony_ci __fs32 fs_pendinginodes;/*inodes in process of being freed */ 9248c2ecf20Sopenharmony_ci } __attribute__ ((packed)) fs_u2; 9258c2ecf20Sopenharmony_ci } fs_un1; 9268c2ecf20Sopenharmony_ci union { 9278c2ecf20Sopenharmony_ci struct { 9288c2ecf20Sopenharmony_ci __fs32 fs_sparecon[53];/* reserved for future constants */ 9298c2ecf20Sopenharmony_ci __fs32 fs_reclaim; 9308c2ecf20Sopenharmony_ci __fs32 fs_sparecon2[1]; 9318c2ecf20Sopenharmony_ci __fs32 fs_state; /* file system state time stamp */ 9328c2ecf20Sopenharmony_ci __fs32 fs_qbmask[2]; /* ~usb_bmask */ 9338c2ecf20Sopenharmony_ci __fs32 fs_qfmask[2]; /* ~usb_fmask */ 9348c2ecf20Sopenharmony_ci } fs_sun; 9358c2ecf20Sopenharmony_ci struct { 9368c2ecf20Sopenharmony_ci __fs32 fs_sparecon[53];/* reserved for future constants */ 9378c2ecf20Sopenharmony_ci __fs32 fs_reclaim; 9388c2ecf20Sopenharmony_ci __fs32 fs_sparecon2[1]; 9398c2ecf20Sopenharmony_ci __fs32 fs_npsect; /* # sectors/track including spares */ 9408c2ecf20Sopenharmony_ci __fs32 fs_qbmask[2]; /* ~usb_bmask */ 9418c2ecf20Sopenharmony_ci __fs32 fs_qfmask[2]; /* ~usb_fmask */ 9428c2ecf20Sopenharmony_ci } fs_sunx86; 9438c2ecf20Sopenharmony_ci struct { 9448c2ecf20Sopenharmony_ci __fs32 fs_sparecon[50];/* reserved for future constants */ 9458c2ecf20Sopenharmony_ci __fs32 fs_contigsumsize;/* size of cluster summary array */ 9468c2ecf20Sopenharmony_ci __fs32 fs_maxsymlinklen;/* max length of an internal symlink */ 9478c2ecf20Sopenharmony_ci __fs32 fs_inodefmt; /* format of on-disk inodes */ 9488c2ecf20Sopenharmony_ci __fs32 fs_maxfilesize[2]; /* max representable file size */ 9498c2ecf20Sopenharmony_ci __fs32 fs_qbmask[2]; /* ~usb_bmask */ 9508c2ecf20Sopenharmony_ci __fs32 fs_qfmask[2]; /* ~usb_fmask */ 9518c2ecf20Sopenharmony_ci __fs32 fs_state; /* file system state time stamp */ 9528c2ecf20Sopenharmony_ci } fs_44; 9538c2ecf20Sopenharmony_ci } fs_un2; 9548c2ecf20Sopenharmony_ci __fs32 fs_postblformat; 9558c2ecf20Sopenharmony_ci __fs32 fs_nrpos; 9568c2ecf20Sopenharmony_ci __fs32 fs_postbloff; 9578c2ecf20Sopenharmony_ci __fs32 fs_rotbloff; 9588c2ecf20Sopenharmony_ci __fs32 fs_magic; 9598c2ecf20Sopenharmony_ci __u8 fs_space[1]; 9608c2ecf20Sopenharmony_ci}; 9618c2ecf20Sopenharmony_ci 9628c2ecf20Sopenharmony_ci#endif /* __LINUX_UFS_FS_H */ 963