Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ filesystem(F) — Xenix 2.3.4g

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

fsck(C)

mkfs(C)

inode(F)



     FILESYSTEM(F)            XENIX System V             FILESYSTEM(F)



     Name
          file system - Format of a system volume.

     Syntax
          #include <sys/filsys.h>
          #include <sys/types.h>
          #include <sys/param.h>

     Description
          Every file system storage volume (for example, a hard disk)
          has a common format for certain vital information.  Every
          such volume is divided into a certain number of 256 word
          (512 byte) blocks.  Block 0 is unused and is available to
          contain a bootstrap program or other information.

          Block 1 is the super-block.  The format of a super-block is
          described in /usr/include/sys/filesys.h.  In that include
          file, S_isize is the address of the first data block after
          the i-list.  The i-list starts just after the super-block in
          block 2; thus the i-list is s_isize-2 blocks long.  S_fsize
          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 diagnostic is
          written on the 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
          s_free array contains, in s_free[1], ..., s_free[s_nfree-1],
          up to 49 numbers of free blocks.  S_free[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 s_nfree, and the new block is
          s_free[s_nfree].  If the new block number is 0, there are no
          blocks left, so give an error.  If s_nfree becomes 0, read
          in the block named by the new block number, replace s_nfree
          by its first word, and copy the block numbers in the next 50
          longs into the s_free array.  To free a block, check if
          s_nfree is 50; if so, copy s_nfree and the s_free array into
          it, write it out, and set s_nfree to 0.  In any event set
          s_free[s_nfree] to the freed block's number and increment
          s_nfree.

          S_tfree is the total free blocks available in the file
          system.

          S_ninode is the number of free i-numbers in the s_inode
          array.  To allocate an inode: if s_ninode is greater than 0,



     Page 1                                           (printed 8/7/87)





     FILESYSTEM(F)            XENIX System V             FILESYSTEM(F)



          decrement it and return s_inode[s_ninode].  If it was 0,
          read the i-list and place the numbers of all free inodes (up
          to 100) into the s_inode array, then try again.  To free an
          inode, provided s_ninode is less than 100, place its number
          into s_inode[s_ninode] and increment s_ninode.  If s_ninode
          is already 100, do not bother to enter the freed inode into
          any table.  This list of inodes only speeds up the
          allocation process. The information about whether the inode
          is really free is maintained in the inode itself.

          S_tinode is the total free inodes available in the file
          system.

          S_flock and s_ilock 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 s_fmod on disk is also
          immaterial, and 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.

          S_ronly is a read-only flag to indicate write-protection.

          S_time is the last time the super-block of the file system
          was changed, and is a double precision representation of the
          number of seconds that have elapsed since 00:00 Jan. 1, 1970
          (GMT).  During a reboot, the s_time of the super-block for
          the root file system is used to set the system's idea of the
          time.

          I-numbers begin at 1, and the storage for inodes begins in
          block 2.  Also, inodes are 64 bytes long, so 8 of them fit
          into a block.  Therefore, inode i is located in block
          (i+15)/8, and begins 64x((i+15) (mod 8)) bytes from its
          start.  Inode 1 is reserved for future use.  Inode 2 is
          reserved for the root directory of the file system, but no
          other i-number has a built-in meaning.  Each inode
          represents one file.  For the format of an inode and its
          flags, see inode(F).

     Files
          /usr/include/sys/filsys.h

          /usr/include/sys/stat.h

     See Also
          fsck(C), mkfs(C), inode(F)









     Page 2                                           (printed 8/7/87)



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026