root/include/linux/ufs_fs.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  *  linux/include/linux/ufs_fs.h
   3  *
   4  * Copyright (C) 1996
   5  * Adrian Rodriguez (adrian@franklins-tower.rutgers.edu)
   6  * Laboratory for Computer Science Research Computing Facility
   7  * Rutgers, The State University of New Jersey
   8  *
   9  * $Id: ufs_fs.h,v 1.1 1996/04/21 14:45:11 davem Exp $
  10  *
  11  */
  12 
  13 #ifndef __LINUX_UFS_FS_H
  14 #define __LINUX_UFS_FS_H
  15 
  16 #include <linux/types.h>
  17 #include <linux/kernel.h>
  18 #include <linux/time.h>
  19 #include <linux/stat.h>
  20 
  21 #define UFS_BBLOCK 0
  22 #define UFS_BBSIZE 8192
  23 #define UFS_SBLOCK 8192
  24 #define UFS_SBSIZE 8192
  25 
  26 #define UFS_MAGIC 0x00011954
  27 
  28 #define UFS_FSIZE 1024
  29 #define UFS_BSIZE 8192
  30 
  31 #define UFS_NDADDR 12
  32 #define UFS_NINDIR 3
  33 
  34 #define UFS_ROOTINO 2
  35 
  36 #define UFS_USEEFT  ((__u16)65535)
  37 
  38 #define UFS_FSOK      0x7c269d38
  39 #define UFS_FSACTIVE  ((char)0x00)
  40 #define UFS_FSCLEAN   ((char)0x01)
  41 #define UFS_FSSTABLE  ((char)0x02)
  42 #define UFS_FSBAD     ((char)0xff)
  43 
  44 /* Flags for ufs_sb_info */
  45 #define UFS_DEBUG       0x00000001
  46 #define UFS_DEBUG_INODE 0x00000002
  47 #define UFS_DEBUG_NAMEI 0x00000004
  48 #define UFS_DEBUG_LINKS 0x00000008
  49 
  50 
  51 /* Test if the inode number is valid. */
  52 #define ufs_ino_ok(inode)  ((inode->i_ino < 2) &&  \
  53                             (inode->i_ino > (inode->i_sb->u.ufs_sb.s_ncg * inode->i_sb->u.ufs_sb.s_ipg - 1)))
  54 
  55 /* Convert (sb,cg) to the first physical block number for that cg. */
  56 #define ufs_cgstart(sb, cg)   \
  57   (((sb)->u.ufs_sb.s_fpg * (cg)) + (sb)->u.ufs_sb.s_cgoffset * ((cg) & ~((sb)->u.ufs_sb.s_cgmask)))
  58 
  59 /* Convert (sb,cg) to the first phys. block number for inodes in that cg. */
  60 #define ufs_cgimin(sb, cg) (ufs_cgstart((sb), (cg)) + (sb)->u.ufs_sb.s_iblkno)
  61 #define ufs_cgdmin(sb, cg) (ufs_cgstart((sb), (cg)) + (sb)->u.ufs_sb.s_dblkno)
  62 
  63 /* Convert an inode number to a cg number. */
  64 /* XXX - this can be optimized if s_ipg is a power of 2. */
  65 #define ufs_ino2cg(inode)  ((inode)->i_ino/(inode)->i_sb->u.ufs_sb.s_ipg)
  66 
  67 #define MAXNAMLEN 255
  68 
  69 struct direct {
  70         __u32  d_ino;                   /* inode number of this entry */
  71         __u16  d_reclen;                /* length of this entry */
  72         __u16  d_namlen;                /* actual length of d_name */
  73         char   d_name[MAXNAMLEN + 1];   /* file name */
  74 };
  75 
  76 #define MAXMNTLEN 512
  77 #define MAXCSBUFS 32
  78 
  79 struct csum {
  80         __u32   cs_ndir;        /* number of directories */
  81         __u32   cs_nbfree;      /* number of free blocks */
  82         __u32   cs_nifree;      /* number of free inodes */
  83         __u32   cs_nffree;      /* number of free frags */
  84 };
  85 
  86 typedef struct _ufsquad {
  87         __u32 val[2];
  88 } ufsquad;
  89 
  90 /*
  91  * This is the actual superblock, as it is laid out on the disk.
  92  */
  93 struct ufs_superblock {
  94         __u32   fs_link;        /* UNUSED */
  95         __u32   fs_rlink;       /* UNUSED */
  96         __u32   fs_sblkno;
  97         __u32   fs_cblkno;
  98         __u32   fs_iblkno;
  99         __u32   fs_dblkno;
 100         __u32   fs_cgoffset;
 101         __u32   fs_cgmask;
 102         time_t  fs_time;        /* XXX - check type */
 103         __u32   fs_size;
 104         __u32   fs_dsize;
 105         __u32   fs_ncg;
 106         __u32   fs_bsize;
 107         __u32   fs_fsize;
 108         __u32   fs_frag;
 109         __u32   fs_minfree;
 110         __u32   fs_rotdelay;
 111         __u32   fs_rps;
 112         __u32   fs_bmask;
 113         __u32   fs_fmask;
 114         __u32   fs_bshift;
 115         __u32   fs_fshift;
 116         __u32   fs_maxcontig;
 117         __u32   fs_maxbpg;
 118         __u32   fs_fragshift;
 119         __u32   fs_fsbtodb;
 120         __u32   fs_sbsize;
 121         __u32   fs_csmask;
 122         __u32   fs_csshift;
 123         __u32   fs_nindir;
 124         __u32   fs_inopb;
 125         __u32   fs_nspf;
 126         __u32   fs_optim;
 127         __u32   fs_XXX1;
 128         __u32   fs_interleave;
 129         __u32   fs_trackskew;
 130         __u32   fs_id[2];
 131         __u32   fs_csaddr;
 132         __u32   fs_cssize;
 133         __u32   fs_cgsize;
 134         __u32   fs_ntrak;
 135         __u32   fs_nsect;
 136         __u32   fs_spc;
 137         __u32   fs_ncyl;
 138         __u32   fs_cpg;
 139         __u32   fs_ipg;
 140         __u32   fs_fpg;
 141         struct csum fs_cstotal;
 142         __u8    fs_fmod;
 143         __u8    fs_clean;
 144         __u8    fs_ronly;
 145         __u8    fs_flags;
 146         __u8    fs_fsmnt[MAXMNTLEN];
 147         __u32   fs_cgrotor;
 148         struct csum * fs_csp[MAXCSBUFS];
 149         __u32   fs_cpc;
 150         __u16   fs_opostbl[16][8];      /* old rotation block list head */
 151         __s32   fs_sparecon[55];        /* reserved for future constants */
 152         __s32   fs_state;               /* file system state time stamp */
 153         ufsquad fs_qbmask;              /* ~usb_bmask - for use with __s64 size */
 154         ufsquad fs_qfmask;              /* ~usb_fmask - for use with __s64 size */
 155         __s32   fs_postblformat;        /* format of positional layout tables */
 156         __s32   fs_nrpos;               /* number of rotaional positions */
 157         __s32   fs_postbloff;           /* (__s16) rotation block list head */
 158         __s32   fs_rotbloff;            /* (__u8) blocks for each rotation */
 159         __s32   fs_magic;               /* magic number */
 160         __u8    fs_space[1];            /* list of blocks for each rotation */
 161 
 162 };
 163 
 164 /*
 165  * structure of an on-disk inode
 166  */
 167 struct ufs_inode {
 168         __u16   ui_mode;                /*  0x0 */
 169         __u16   ui_nlink;               /*  0x2 */
 170         __u16   ui_suid;                /*  0x4 */
 171         __u16   ui_sgid;                /*  0x6 */
 172         ufsquad ui_size;                /*  0x8 */  /* XXX - should be __u64 */
 173         struct timeval ui_atime;        /* 0x10 */
 174         struct timeval ui_mtime;        /* 0x18 */
 175         struct timeval ui_ctime;        /* 0x20 */
 176         __u32   ui_db[UFS_NDADDR];              /* 0x28 data blocks */
 177         __u32   ui_ib[UFS_NINDIR];              /* 0x58 indirect blocks */
 178         __u32   ui_flags;               /* 0x64 unused */
 179         __u32   ui_blocks;              /* 0x68 blocks in use */
 180         __u32   ui_gen;                 /* 0x6c generation number XXX - what is this? */
 181         __u32   ui_shadow;              /* 0x70 shadow inode XXX - what is this?*/
 182         __u32   ui_uid;                 /* 0x74 long EFT version of uid */
 183         __u32   ui_gid;                 /* 0x78 long EFT version of gid */
 184         __u32   ui_oeftflag;            /* 0x7c reserved */
 185 };
 186 
 187 extern int init_ufs_fs(void);
 188 
 189 #endif /* __LINUX_UFS_FS_H */
 190 /*
 191  * Local Variables: ***
 192  * c-indent-level: 8 ***
 193  * c-continued-statement-offset: 8 ***
 194  * c-brace-offset: -8 ***
 195  * c-argdecl-indent: 0 ***
 196  * c-label-offset: -8 ***
 197  * End: ***
 198  */

/* [previous][next][first][last][top][bottom][index][help] */