[BACK]Return to xfs_dinode.h CVS log [TXT][DIR] Up to [Development] / xfs-linux-nodel

File: [Development] / xfs-linux-nodel / xfs_dinode.h (download)

Revision 1.2, Sat Nov 6 22:03:23 1993 UTC (23 years, 11 months ago) by doucette
Branch: MAIN
Changes since 1.1: +22 -20 lines

Get rid of nested includes.  Get rid of dummy freelist structure.
Move some fields around for alignment.  Clean up union members.  Add
xfs_dinode_fmt_t.

#ifndef _FS_XFS_DINODE_H
#define	_FS_XFS_DINODE_H

#ident "$Revision$"

#define	XFS_DINODE_VERSION	1
#define	XFS_DINODE_MAGIC	0x494e4f44	/* 'INOD' */

/*
 * Disk inode structure.
 * This is just the header; the inode is expanded to fill a variable size
 * with the last field expanding.
 */
typedef struct xfs_dinode
{
	__uint32_t	di_magic;	/* inode magic # = XFS_DINODE_MAGIC */
	__uint16_t	di_mode;	/* mode and type of file */
	__int8_t	di_version;	/* inode version */
	__int8_t	di_format;	/* format of di_c data */
	__int16_t	di_nlink;	/* number of links to file */
	__uint16_t	di_uid;		/* owner's user id */
	__uint16_t	di_gid;		/* owner's group id */
	__int64_t	di_size;	/* number of bytes in file */
	xfs_uuid_t	di_uuid;	/* file unique id */
	/*
	 * Should these be timestruc_t's??
	 * efs makes them __int32_t's.
	 */
	time_t		di_atime;	/* time last accessed */
	time_t		di_mtime;	/* time last modified */
	time_t		di_ctime;	/* time created/inode modified */
	/*
	 * Should this be 64 bits? What does nfs3.0 want?
	 */
	__uint32_t	di_gen;		/* generation number */
	union {
		xfs_agino_t	di_next;/* next inode for freelist inodes */
		dev_t		di_dev;	/* device for IFCHR/IFBLK */
		char		di_c[1];/* local contents */
		xfs_bmx_t	di_bmx; /* extent list */
		xfs_btree_block_t di_bmbt;/* btree root */
		xfs_uuid_t	di_uuid;/* mount point value */
	}		di_u;
} xfs_dinode_t;

/*
 * Values for di_format
 */
typedef enum xfs_dinode_fmt
{
	XFS_DINODE_FMT_AGINO,		/* free inodes: di_next */
	XFS_DINODE_FMT_DEV,		/* CHR, BLK: di_dev */
	XFS_DINODE_FMT_LOCAL,		/* DIR, REG, LNK: di_c */
	XFS_DINODE_FMT_EXTENTS,		/* DIR, REG, LNK: di_bmx */
	XFS_DINODE_FMT_BTREE,		/* DIR, REG, LNK: di_bmbt */
	XFS_DINODE_FMT_UUID 		/* MNT: di_uuid */
} xfs_dinode_fmt_t;

/*
 * File types (mode field)
 */
#define	IFMT		0170000		/* type of file */
#define	IFIFO		0010000		/* named pipe (fifo) */
#define	IFCHR		0020000		/* character special */
#define	IFDIR		0040000		/* directory */
#define	IFBLK		0060000		/* block special */
#define	IFREG		0100000		/* regular */
#define	IFLNK		0120000		/* symbolic link */
#define	IFSOCK		0140000		/* socket */
#define	IFMNT		0160000		/* mount point */

/*
 * File execution and access modes.
 */
#define	ISUID		04000		/* set user id on execution */
#define	ISGID		02000		/* set group id on execution */
#define	ISVTX		01000		/* sticky directory */
#define	IREAD		0400		/* read, write, execute permissions */
#define	IWRITE		0200
#define	IEXEC		0100

#define	xfs_buf_to_dinode(buf)	((xfs_dinode_t *)(buf->b_un.b_addr))

#endif	/* _FS_XFS_DINODE_H */