⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ufs_fs.h

📁 UnixBSD、SunOs、FreeBSD、NetBSD、OpenBSD和NeXTStep文件系统源代码
💻 H
📖 第 1 页 / 共 3 页
字号:
/* *  linux/include/linux/ufs_fs.h * * Copyright (C) 1996 * Adrian Rodriguez (adrian@franklins-tower.rutgers.edu) * Laboratory for Computer Science Research Computing Facility * Rutgers, The State University of New Jersey * * Clean swab support by Fare <fare@tunes.org> * just hope no one is using NNUUXXI on __?64 structure elements * 64-bit clean thanks to Maciej W. Rozycki <macro@ds2.pg.gda.pl> * * 4.4BSD (FreeBSD) support added on February 1st 1998 by * Niels Kristian Bech Jensen <nkbj@image.dk> partially based * on code by Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>. * * NeXTstep support added on February 5th 1998 by * Niels Kristian Bech Jensen <nkbj@image.dk>. * * Write support by Daniel Pirkl <daniel.pirkl@email.cz> * * HP/UX hfs filesystem support added by * Martin K. Petersen <mkp@mkp.net>, August 1999 * * UFS2 (of FreeBSD 5.x) support added by * Niraj Kumar <niraj17@iitbombay.org>  , Jan 2004 * */#ifndef __LINUX_UFS_FS_H#define __LINUX_UFS_FS_H#include <linux/types.h>#include <linux/kernel.h>#include <linux/stat.h>#include <linux/fs.h>#include <asm/div64.h>typedef __u64 __bitwise __fs64;typedef __u32 __bitwise __fs32;typedef __u16 __bitwise __fs16;#define UFS_BBLOCK 0#define UFS_BBSIZE 8192#define UFS_SBLOCK 8192#define UFS_SBSIZE 8192#define UFS_SECTOR_SIZE 512#define UFS_SECTOR_BITS 9#define UFS_MAGIC  0x00011954#define UFS2_MAGIC 0x19540119#define UFS_CIGAM  0x54190100 /* byteswapped MAGIC *//* Copied from FreeBSD *//* * Each disk drive contains some number of filesystems. * A filesystem consists of a number of cylinder groups. * Each cylinder group has inodes and data. * * A filesystem is described by its super-block, which in turn * describes the cylinder groups.  The super-block is critical * data and is replicated in each cylinder group to protect against * catastrophic loss.  This is done at `newfs' time and the critical * super-block data does not change, so the copies need not be * referenced further unless disaster strikes. * * For filesystem fs, the offsets of the various blocks of interest * are given in the super block as: *      [fs->fs_sblkno]         Super-block *      [fs->fs_cblkno]         Cylinder group block *      [fs->fs_iblkno]         Inode blocks *      [fs->fs_dblkno]         Data blocks * The beginning of cylinder group cg in fs, is given by * the ``cgbase(fs, cg)'' macro. * * Depending on the architecture and the media, the superblock may * reside in any one of four places. For tiny media where every block * counts, it is placed at the very front of the partition. Historically, * UFS1 placed it 8K from the front to leave room for the disk label and * a small bootstrap. For UFS2 it got moved to 64K from the front to leave * room for the disk label and a bigger bootstrap, and for really piggy * systems we check at 256K from the front if the first three fail. In * all cases the size of the superblock will be SBLOCKSIZE. All values are * given in byte-offset form, so they do not imply a sector size. The * SBLOCKSEARCH specifies the order in which the locations should be searched. */#define SBLOCK_FLOPPY        0#define SBLOCK_UFS1       8192#define SBLOCK_UFS2      65536#define SBLOCK_PIGGY    262144#define SBLOCKSIZE        8192#define SBLOCKSEARCH \        { SBLOCK_UFS2, SBLOCK_UFS1, SBLOCK_FLOPPY, SBLOCK_PIGGY, -1 }/* HP specific MAGIC values */#define UFS_MAGIC_LFN   0x00095014 /* fs supports filenames > 14 chars */#define UFS_CIGAM_LFN   0x14500900 /* srahc 41 < semanelif stroppus sf */#define UFS_MAGIC_SEC   0x00612195 /* B1 security fs */#define UFS_CIGAM_SEC   0x95216100#define UFS_MAGIC_FEA   0x00195612 /* fs_featurebits supported */#define UFS_CIGAM_FEA   0x12561900#define UFS_MAGIC_4GB   0x05231994 /* fs > 4 GB && fs_featurebits */#define UFS_CIGAM_4GB   0x94192305/* Seems somebody at HP goofed here. B1 and lfs are both 0x2 !?! */#define UFS_FSF_LFN     0x00000001 /* long file names */#define UFS_FSF_B1      0x00000002 /* B1 security */#define UFS_FSF_LFS     0x00000002 /* large files */#define UFS_FSF_LUID    0x00000004 /* large UIDs *//* End of HP stuff */#define UFS_BSIZE	8192#define UFS_MINBSIZE	4096#define UFS_FSIZE	1024#define UFS_MAXFRAG	(UFS_BSIZE / UFS_FSIZE)#define UFS_NDADDR 12#define UFS_NINDIR 3#define UFS_IND_BLOCK	(UFS_NDADDR + 0)#define UFS_DIND_BLOCK	(UFS_NDADDR + 1)#define UFS_TIND_BLOCK	(UFS_NDADDR + 2)#define UFS_NDIR_FRAGMENT (UFS_NDADDR << uspi->s_fpbshift)#define UFS_IND_FRAGMENT (UFS_IND_BLOCK << uspi->s_fpbshift)#define UFS_DIND_FRAGMENT (UFS_DIND_BLOCK << uspi->s_fpbshift)#define UFS_TIND_FRAGMENT (UFS_TIND_BLOCK << uspi->s_fpbshift)#define UFS_ROOTINO 2#define UFS_FIRST_INO (UFS_ROOTINO + 1)#define UFS_USEEFT  ((__u16)65535)#define UFS_FSOK      0x7c269d38#define UFS_FSACTIVE  ((__s8)0x00)#define UFS_FSCLEAN   ((__s8)0x01)#define UFS_FSSTABLE  ((__s8)0x02)#define UFS_FSOSF1    ((__s8)0x03)	/* is this correct for DEC OSF/1? */#define UFS_FSBAD     ((__s8)0xff)/* From here to next blank line, s_flags for ufs_sb_info *//* directory entry encoding */#define UFS_DE_MASK		0x00000010	/* mask for the following */#define UFS_DE_OLD		0x00000000#define UFS_DE_44BSD		0x00000010/* uid encoding */#define UFS_UID_MASK		0x00000060	/* mask for the following */#define UFS_UID_OLD		0x00000000#define UFS_UID_44BSD		0x00000020#define UFS_UID_EFT		0x00000040/* superblock state encoding */#define UFS_ST_MASK		0x00000700	/* mask for the following */#define UFS_ST_OLD		0x00000000#define UFS_ST_44BSD		0x00000100#define UFS_ST_SUN		0x00000200 /* Solaris */#define UFS_ST_SUNOS		0x00000300#define UFS_ST_SUNx86		0x00000400 /* Solaris x86 *//*cylinder group encoding */#define UFS_CG_MASK		0x00003000	/* mask for the following */#define UFS_CG_OLD		0x00000000#define UFS_CG_44BSD		0x00002000#define UFS_CG_SUN		0x00001000/* filesystem type encoding */#define UFS_TYPE_MASK		0x00010000	/* mask for the following */#define UFS_TYPE_UFS1		0x00000000#define UFS_TYPE_UFS2		0x00010000/* fs_inodefmt options */#define UFS_42INODEFMT	-1#define UFS_44INODEFMT	2/* * MINFREE gives the minimum acceptable percentage of file system * blocks which may be free. If the freelist drops below this level * only the superuser may continue to allocate blocks. This may * be set to 0 if no reserve of free blocks is deemed necessary, * however throughput drops by fifty percent if the file system * is run at between 95% and 100% full; thus the minimum default * value of fs_minfree is 5%. However, to get good clustering * performance, 10% is a better choice. hence we use 10% as our * default value. With 10% free space, fragmentation is not a * problem, so we choose to optimize for time. */#define UFS_MINFREE         5#define UFS_DEFAULTOPT      UFS_OPTTIME/* * Turn file system block numbers into disk block addresses. * This maps file system blocks to device size blocks. */#define ufs_fsbtodb(uspi, b)	((b) << (uspi)->s_fsbtodb)#define	ufs_dbtofsb(uspi, b)	((b) >> (uspi)->s_fsbtodb)/* * Cylinder group macros to locate things in cylinder groups. * They calc file system addresses of cylinder group data structures. */#define	ufs_cgbase(c)	(uspi->s_fpg * (c))#define ufs_cgstart(c)	((uspi)->fs_magic == UFS2_MAGIC ?  ufs_cgbase(c) : \	(ufs_cgbase(c)  + uspi->s_cgoffset * ((c) & ~uspi->s_cgmask)))#define	ufs_cgsblock(c)	(ufs_cgstart(c) + uspi->s_sblkno)	/* super blk */#define	ufs_cgcmin(c)	(ufs_cgstart(c) + uspi->s_cblkno)	/* cg block */#define	ufs_cgimin(c)	(ufs_cgstart(c) + uspi->s_iblkno)	/* inode blk */#define	ufs_cgdmin(c)	(ufs_cgstart(c) + uspi->s_dblkno)	/* 1st data *//* * Macros for handling inode numbers: *     inode number to file system block offset. *     inode number to cylinder group number. *     inode number to file system block address. */#define	ufs_inotocg(x)		((x) / uspi->s_ipg)#define	ufs_inotocgoff(x)	((x) % uspi->s_ipg)#define	ufs_inotofsba(x)	(((u64)ufs_cgimin(ufs_inotocg(x))) + ufs_inotocgoff(x) / uspi->s_inopf)#define	ufs_inotofsbo(x)	((x) % uspi->s_inopf)/* * Compute the cylinder and rotational position of a cyl block addr. */#define ufs_cbtocylno(bno) \	((bno) * uspi->s_nspf / uspi->s_spc)#define ufs_cbtorpos(bno) \	((((bno) * uspi->s_nspf % uspi->s_spc / uspi->s_nsect \	* uspi->s_trackskew + (bno) * uspi->s_nspf % uspi->s_spc \	% uspi->s_nsect * uspi->s_interleave) % uspi->s_nsect \	* uspi->s_nrpos) / uspi->s_npsect)/* * The following macros optimize certain frequently calculated * quantities by using shifts and masks in place of divisions * modulos and multiplications. */#define ufs_blkoff(loc)		((loc) & uspi->s_qbmask)#define ufs_fragoff(loc)	((loc) & uspi->s_qfmask)#define ufs_lblktosize(blk)	((blk) << uspi->s_bshift)#define ufs_lblkno(loc)		((loc) >> uspi->s_bshift)#define ufs_numfrags(loc)	((loc) >> uspi->s_fshift)#define ufs_blkroundup(size)	(((size) + uspi->s_qbmask) & uspi->s_bmask)#define ufs_fragroundup(size)	(((size) + uspi->s_qfmask) & uspi->s_fmask)#define ufs_fragstoblks(frags)	((frags) >> uspi->s_fpbshift)#define ufs_blkstofrags(blks)	((blks) << uspi->s_fpbshift)#define ufs_fragnum(fsb)	((fsb) & uspi->s_fpbmask)#define ufs_blknum(fsb)		((fsb) & ~uspi->s_fpbmask)#define	UFS_MAXNAMLEN 255#define UFS_MAXMNTLEN 512#define UFS2_MAXMNTLEN 468#define UFS2_MAXVOLLEN 32#define UFS_MAXCSBUFS 31#define UFS_LINK_MAX 32000/*#define	UFS2_NOCSPTRS	((128 / sizeof(void *)) - 4)*/#define	UFS2_NOCSPTRS	28/* * UFS_DIR_PAD defines the directory entries boundaries * (must be a multiple of 4) */#define UFS_DIR_PAD			4#define UFS_DIR_ROUND			(UFS_DIR_PAD - 1)#define UFS_DIR_REC_LEN(name_len)	(((name_len) + 1 + 8 + UFS_DIR_ROUND) & ~UFS_DIR_ROUND)struct ufs_timeval {	__fs32	tv_sec;	__fs32	tv_usec;};struct ufs_dir_entry {	__fs32  d_ino;			/* inode number of this entry */	__fs16  d_reclen;		/* length of this entry */	union {		__fs16	d_namlen;		/* actual length of d_name */		struct {			__u8	d_type;		/* file type */			__u8	d_namlen;	/* length of string in d_name */		} d_44;	} d_u;	__u8	d_name[UFS_MAXNAMLEN + 1];	/* file name */};struct ufs_csum {	__fs32	cs_ndir;	/* number of directories */	__fs32	cs_nbfree;	/* number of free blocks */	__fs32	cs_nifree;	/* number of free inodes */	__fs32	cs_nffree;	/* number of free frags */};struct ufs2_csum_total {	__fs64	cs_ndir;	/* number of directories */	__fs64	cs_nbfree;	/* number of free blocks */	__fs64	cs_nifree;	/* number of free inodes */	__fs64	cs_nffree;	/* number of free frags */	__fs64   cs_numclusters;	/* number of free clusters */	__fs64   cs_spare[3];	/* future expansion */};struct ufs_csum_core {	__u64	cs_ndir;	/* number of directories */	__u64	cs_nbfree;	/* number of free blocks */	__u64	cs_nifree;	/* number of free inodes */	__u64	cs_nffree;	/* number of free frags */	__u64   cs_numclusters;	/* number of free clusters */};/* * File system flags */#define UFS_UNCLEAN      0x01    /* file system not clean at mount (unused) */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -