fs(4) FILE FORMATS fs(4)
NAME
fs (s5) - format of s5 file system volume
SYNOPSIS
#include <sys/types.h>
#include <sys/param.h>
#include <sys/fs/s5filsys.h>
DESCRIPTION
Every file system storage volume has a common format for
certain vital information. Every such volume is divided
into a certain number of 512-byte long sectors. Sector 0 is
unused and is available to contain a bootstrap program or
other information.
Sector 1 is the super-block. The format of a super-block
is:
l3 l2 l2 l. struct filsys {
ushort sisize; /* size in blocks of i-list */
daddrt sfsize; /* size in blocks of entire volume */
short snfree; /* number of addresses in sfree */
daddrt sfree[NICFREE]; /* free block list */
short sninode; /* number of i-nodes in sinode */
oinot sinode[NICINOD]; /* free i-node list */
char sflock; /* lock during free list */
/* manipulation */
char silock; /* lock during i-list manipulation */
char sfmod; /* super block modified flag */
char sronly; /* mounted read-only flag */
timet stime; /* last super block update */
short sdinfo[4]; /* device information */
daddrt stfree; /* total free blocks*/
oinot stinode; /* total free i-nodes */
char sfname[6]; /* file system name */
char sfpack[6]; /* file system pack name */
long sfill[12]; /* ADJUST to make */
/* sizeof filsys be 512 */
long sstate; /* file system state */
long smagic; /* magic number to denote new file
/* system */
long stype; /* type of new file system */ }; l3 l3
l3 l. #define FsMAGIC 0xfd187e20 /* smagic number
*/
#define Fs1b 1 /* 512-byte block */
#define Fs2b 2 /* 1024-byte block */
#define Fs4b 3 /* 2048-byte block */
#define FsOKAY 0x7c269d38 /* sstate: clean */
#define FsACTIVE 0x5e72d81a /* sstate: active */
#define FsBAD 0xcb096f43 /* sstate: bad root */
#define FsBADBLK 0xbadbc14b /* sstate: bad block */
/* corrupted it */
1
fs(4) FILE FORMATS fs(4)
stype indicates the file system type. Currently, three
types of file systems are supported: the original 512-byte
logical block, the 1024-byte logical block, and the 2048-
byte logical block. smagic is used to distinguish the s5
file system from other FSTypes. The stype field is used to
determine the blocksize of the file system; 512-bytes, 1K,
or 2K. The operating system takes care of all conversions
from logical block numbers to physical sector numbers.
sstate indicates the state of the file system. A cleanly
unmounted, not damaged file system is indicated by the
FsOKAY state. After a file system has been mounted for
update, the state changes to FsACTIVE. A special case is
used for the root file system. If the root file system
appears damaged at boot time, it is mounted but marked
FsBAD. Lastly, after a file system has been unmounted, the
state reverts to FsOKAY.
sisize is the address of the first data block after the i-
list; the i-list starts just after the super-block, namely
in block 2; thus the i-list is sisize-2 blocks long.
sfsize is the first block not potentially available for
allocation to a file. These numbers are used by the system
to check for bad block numbers; if an ``impossible'' block
number is allocated from the free list or is freed, a diag-
nostic is written on the on-line console. Moreover, the
free array is cleared, so as to prevent further allocation
from a presumably corrupted free list.
The free list for each volume is maintained as follows. The
sfree array contains, in sfree[1], ..., sfree[snfree-1],
up to 49 numbers of free blocks. sfree[0] is the block
number of the head of a chain of blocks constituting the
free list. The first long in each free-chain block is the
number (up to 50) of free-block numbers listed in the next
50 longs of this chain member. The first of these 50 blocks
is the link to the next member of the chain. To allocate a
block: decrement snfree, and the new block is
sfree[snfree]. If the new block number is 0, there are no
blocks left, so give an error. If snfree became 0, read in
the block named by the new block number, replace snfree by
its first word, and copy the block numbers in the next 50
longs into the sfree array. To free a block, check if
snfree is 50; if so, copy snfree and the sfree array into
it, write it out, and set snfree to 0. In any event set
sfree[snfree] to the freed block's number and increment
snfree.
stfree is the total free blocks available in the file sys-
tem.
2
fs(4) FILE FORMATS fs(4)
sninode is the number of free i-numbers in the sinode
array. To allocate an i-node: if sninode is greater than
0, decrement it and return sinode[sninode]. If it was 0,
read the i-list and place the numbers of all free i-nodes
(up to 100) into the sinode array, then try again. To free
an i-node, provided sninode is less than 100, place its
number into sinode[sninode] and increment sninode. If
sninode is already 100, do not bother to enter the freed
i-node into any table. This list of i-nodes is only to
speed up the allocation process; the information as to
whether the i-node is really free or not is maintained in
the i-node itself.
stinode is the total free i-nodes available in the file
system.
sflock and silock are flags maintained in the core copy of
the file system while it is mounted and their values on disk
are immaterial. The value of sfmod on disk is likewise
immaterial; it is used as a flag to indicate that the
super-block has changed and should be copied to the disk
during the next periodic update of file system information.
sronly is a read-only flag to indicate write-protection.
stime is the last time the super-block of the file system
was changed, and is the number of seconds that have elapsed
since 00:00 Jan. 1, 1970 (UTC). During a reboot, the stime
of the super-block for the root file system is used to set
the system's idea of the time.
sfname is the name of the file system and sfpack is the
name of the pack.
I-numbers begin at 1, and the storage for i-nodes begins in
block 2. Also, i-nodes are 64 bytes long. I-node 1 is
reserved for future use. I-node 2 is reserved for the root
directory of the file system, but no other i-number has a
built-in meaning. Each i-node represents one file. For the
format of an i-node and its flags, see inode(4).
SEE ALSO
mount(2).
fsck(1M), fsdb(1M), mkfs(1M), s5-specific inode(4)
3