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

📄 ufs_fs.h

📁 linux得一些常用命令,以及linux环境下的c编程
💻 H
📖 第 1 页 / 共 2 页
字号:
/* *  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 * */#ifndef __LINUX_UFS_FS_H#define __LINUX_UFS_FS_H#include <linux/types.h>#include <linux/kernel.h>#include <linux/time.h>#include <linux/stat.h>#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 UFS_CIGAM 0x54190100 /* byteswapped MAGIC *//* 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  ((char)0x00)#define UFS_FSCLEAN   ((char)0x01)#define UFS_FSSTABLE  ((char)0x02)#define UFS_FSOSF1    ((char)0x03)	/* is this correct for DEC OSF/1? */#define UFS_FSBAD     ((char)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#define UFS_ST_SUNx86		0x00000400/*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/* fs_inodefmt options */#define UFS_42INODEFMT	-1#define UFS_44INODEFMT	2/* mount options */#define UFS_MOUNT_ONERROR		0x0000000F#define UFS_MOUNT_ONERROR_PANIC		0x00000001#define UFS_MOUNT_ONERROR_LOCK		0x00000002#define UFS_MOUNT_ONERROR_UMOUNT	0x00000004#define UFS_MOUNT_ONERROR_REPAIR	0x00000008#define UFS_MOUNT_UFSTYPE		0x00000FF0#define UFS_MOUNT_UFSTYPE_OLD		0x00000010#define UFS_MOUNT_UFSTYPE_44BSD		0x00000020#define UFS_MOUNT_UFSTYPE_SUN		0x00000040#define UFS_MOUNT_UFSTYPE_NEXTSTEP	0x00000080#define UFS_MOUNT_UFSTYPE_NEXTSTEP_CD	0x00000100#define UFS_MOUNT_UFSTYPE_OPENSTEP	0x00000200#define UFS_MOUNT_UFSTYPE_SUNx86	0x00000400#define UFS_MOUNT_UFSTYPE_HP	        0x00000800#define ufs_clear_opt(o,opt)	o &= ~UFS_MOUNT_##opt#define ufs_set_opt(o,opt)	o |= UFS_MOUNT_##opt#define ufs_test_opt(o,opt)	((o) & UFS_MOUNT_##opt)/* * 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)	(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)	(ufs_cgimin(ufs_inotocg(x)) + ufs_inotocgoff(x) / uspi->s_inopf)#define	ufs_inotofsbo(x)	((x) % uspi->s_inopf)/* * Give cylinder group number for a file system block. * Give cylinder group block number for a file system block. */#define	ufs_dtog(d)	((d) / uspi->s_fpg)#define	ufs_dtogd(d)	((d) % uspi->s_fpg)/* * 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 UFS_MAXCSBUFS 31#define UFS_LINK_MAX 32000/* * 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 {	__s32	tv_sec;	__s32	tv_usec;};struct ufs_dir_entry {	__u32  d_ino;			/* inode number of this entry */	__u16  d_reclen;		/* length of this entry */	union {		__u16	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 {	__u32	cs_ndir;	/* number of directories */	__u32	cs_nbfree;	/* number of free blocks */	__u32	cs_nifree;	/* number of free inodes */	__u32	cs_nffree;	/* number of free frags */};/* * This is the actual superblock, as it is laid out on the disk. */struct ufs_super_block {	__u32	fs_link;	/* UNUSED */	__u32	fs_rlink;	/* UNUSED */	__u32	fs_sblkno;	/* addr of super-block in filesys */	__u32	fs_cblkno;	/* offset of cyl-block in filesys */	__u32	fs_iblkno;	/* offset of inode-blocks in filesys */	__u32	fs_dblkno;	/* offset of first data after cg */	__u32	fs_cgoffset;	/* cylinder group offset in cylinder */	__u32	fs_cgmask;	/* used to calc mod fs_ntrak */	__u32	fs_time;	/* last time written -- time_t */	__u32	fs_size;	/* number of blocks in fs */	__u32	fs_dsize;	/* number of data blocks in fs */	__u32	fs_ncg;		/* number of cylinder groups */	__u32	fs_bsize;	/* size of basic blocks in fs */	__u32	fs_fsize;	/* size of frag blocks in fs */	__u32	fs_frag;	/* number of frags in a block in fs *//* these are configuration parameters */	__u32	fs_minfree;	/* minimum percentage of free blocks */	__u32	fs_rotdelay;	/* num of ms for optimal next block */	__u32	fs_rps;		/* disk revolutions per second *//* these fields can be computed from the others */	__u32	fs_bmask;	/* ``blkoff'' calc of blk offsets */	__u32	fs_fmask;	/* ``fragoff'' calc of frag offsets */

⌨️ 快捷键说明

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