xref: /netbsd-src/sys/fs/efs/efs_sb.h (revision 6912898dc82543aac449c76f31f2c2ea14792b83)
1 /*	$NetBSD: efs_sb.h,v 1.1 2007/06/29 23:30:29 rumble Exp $	*/
2 
3 /*
4  * Copyright (c) 2006 Stephen M. Rumble <rumble@ephemeral.org>
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /*
20  * See IRIX efs(4)
21  */
22 
23 #ifndef _FS_EFS_EFS_SB_H_
24 #define _FS_EFS_EFS_SB_H_
25 
26 /*
27  * EFS superblock (92 bytes)
28  *
29  * Notes:
30  *   [0] - Values can either be EFS_SB_MAGIC, or EFS_SB_NEWMAGIC (IRIX 3.3+).
31  *   [1] - Only used in a grown filesystem. Original bitmap is unused.
32  *   [2] - Only exists in IRIX3.3+. (XXX - IRIX man pages say 3.3+ fsck
33  *         creates a replicated superblock if space free. Does it update magic?)
34  *   [3] - According to IRIX kernel elf headers, two checksum routines exist.
35  *   [4] - New at some point (in IRIX 5, but apparently not in IRIX 4).
36  */
37 struct efs_sb {
38 	int32_t		sb_size;	/* 0:   fs size incl. bb 0 (in bb) */
39 	int32_t		sb_firstcg;	/* 4:   first cg offset (in bb) */
40 	int32_t		sb_cgfsize;	/* 8:   cg size (in bb) */
41 	int16_t		sb_cgisize;	/* 12:  inodes/cg (in bb) */
42 	int16_t		sb_sectors;	/* 14:  geom: sectors/track */
43 	int16_t		sb_heads;	/* 16:  geom: heads/cylinder (unused) */
44 	int16_t		sb_ncg;		/* 18:  num of cg's in the filesystem */
45 	int16_t		sb_dirty;	/* 20:  non-0 indicates fsck required */
46 	int16_t		sb_pad0;	/* 22:  */
47 	int32_t		sb_time;	/* 24:  superblock ctime */
48 	int32_t		sb_magic;	/* 28:  magic [0] */
49 	char		sb_fname[6];	/* 32:  name of filesystem */
50 	char		sb_fpack[6];	/* 38:  name of filesystem pack */
51 	int32_t		sb_bmsize;	/* 44:  bitmap size (in bytes) */
52 	int32_t		sb_tfree;	/* 48:  total free data blocks */
53 	int32_t		sb_tinode;	/* 52:  total free inodes */
54 	int32_t		sb_bmblock;	/* 56:  bitmap offset (grown fs) [1] */
55 	int32_t		sb_replsb;	/* 62:  repl. superblock offset [2] */
56 	int32_t		sb_lastinode;	/* 64:  last allocated inode [4] */
57 	int8_t		sb_spare[20];	/* 68:  unused */
58 	int32_t		sb_checksum;	/* 88:  checksum (all above) [3] */
59 } __packed;
60 
61 #define EFS_SB_SIZE		(sizeof(struct efs_sb))
62 #define EFS_SB_CHECKSUM_SIZE	(EFS_SB_SIZE - 4)
63 
64 #define EFS_SB_MAGIC		0x00072959	/* original, ungrown layout */
65 #define EFS_SB_NEWMAGIC		0x0007295A	/* grown fs (IRIX >= 3.3) */
66 
67 /* sb_dirty values */
68 #define EFS_SB_CLEAN		0		/* filesystem is clean */
69 
70 #endif /* !_FS_EFS_EFS_SB_H_ */
71