usr.sbin/mkfs.mfs/type.h
#ifndef __MFS_TYPE_H__
#define __MFS_TYPE_H__

/* Declaration of the V1 inode as it is on the disk (not in core). */
typedef struct {		/* V1.x disk inode */
  uint16_t d1_mode;		/* file type, protection, etc. */
  int16_t d1_uid;		/* user id of the file's owner */
  int32_t d1_size;		/* current file size in bytes */
  int32_t d1_mtime;		/* when was file data last changed */
  uint8_t d1_gid;		/* group number */
  uint8_t d1_nlinks;		/* how many links to this file */
  uint16_t d1_zone[V1_NR_TZONES];/* block nums for direct, ind, and dbl ind */
} d1_inode;

/* Declaration of the V2 inode as it is on the disk (not in core). */
typedef struct {		/* V2.x disk inode */
  uint16_t d2_mode;		/* file type, protection, etc. */
  uint16_t d2_nlinks;		/* how many links to this file. HACK! */
  int16_t d2_uid;		/* user id of the file's owner. */
  uint16_t d2_gid;		/* group number HACK! */
  int32_t d2_size;		/* current file size in bytes */
  int32_t d2_atime;		/* when was file data last accessed */
  int32_t d2_mtime;		/* when was file data last changed */
  int32_t d2_ctime;		/* when was inode data last changed */
  uint32_t d2_zone[V2_NR_TZONES];/* block nums for direct, ind, and dbl ind */
} d2_inode;

struct buf {
  /* Data portion of the buffer. */
  union fsdata_u *bp;

  /* Header portion of the buffer. */
  struct buf *b_next;		/* used to link all free bufs in a chain */
  struct buf *b_prev;		/* used to link all free bufs the other way */
  struct buf *b_hash;		/* used to link bufs on hash chains */
  uint32_t b_blocknr;		/* block number of its (minor) device */
  dev_t b_dev;			/* major | minor device where block resides */
  char b_dirt;			/* BP_CLEAN or BP_DIRTY */
  char b_count;			/* number of users of this buffer */
  unsigned int b_bytes;		/* Number of bytes allocated in bp */
};

#endif

