/*
|
/*
|
* linux/include/linux/ufs_fs.h
|
* linux/include/linux/ufs_fs.h
|
*
|
*
|
* Copyright (C) 1996
|
* Copyright (C) 1996
|
* Adrian Rodriguez (adrian@franklins-tower.rutgers.edu)
|
* Adrian Rodriguez (adrian@franklins-tower.rutgers.edu)
|
* Laboratory for Computer Science Research Computing Facility
|
* Laboratory for Computer Science Research Computing Facility
|
* Rutgers, The State University of New Jersey
|
* Rutgers, The State University of New Jersey
|
*
|
*
|
* $Id: ufs_fs.h,v 1.1 2005-12-20 11:32:27 jcastillo Exp $
|
* $Id: ufs_fs.h,v 1.1 2005-12-20 11:32:27 jcastillo Exp $
|
*
|
*
|
*/
|
*/
|
|
|
#ifndef __LINUX_UFS_FS_H
|
#ifndef __LINUX_UFS_FS_H
|
#define __LINUX_UFS_FS_H
|
#define __LINUX_UFS_FS_H
|
|
|
#include <linux/types.h>
|
#include <linux/types.h>
|
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
#include <linux/time.h>
|
#include <linux/time.h>
|
#include <linux/stat.h>
|
#include <linux/stat.h>
|
|
|
#define UFS_BBLOCK 0
|
#define UFS_BBLOCK 0
|
#define UFS_BBSIZE 8192
|
#define UFS_BBSIZE 8192
|
#define UFS_SBLOCK 8192
|
#define UFS_SBLOCK 8192
|
#define UFS_SBSIZE 8192
|
#define UFS_SBSIZE 8192
|
|
|
#define UFS_MAGIC 0x00011954
|
#define UFS_MAGIC 0x00011954
|
|
|
#define UFS_FSIZE 1024
|
#define UFS_FSIZE 1024
|
#define UFS_BSIZE 8192
|
#define UFS_BSIZE 8192
|
|
|
#define UFS_NDADDR 12
|
#define UFS_NDADDR 12
|
#define UFS_NINDIR 3
|
#define UFS_NINDIR 3
|
|
|
#define UFS_ROOTINO 2
|
#define UFS_ROOTINO 2
|
|
|
#define UFS_USEEFT ((__u16)65535)
|
#define UFS_USEEFT ((__u16)65535)
|
|
|
#define UFS_FSOK 0x7c269d38
|
#define UFS_FSOK 0x7c269d38
|
#define UFS_FSACTIVE ((char)0x00)
|
#define UFS_FSACTIVE ((char)0x00)
|
#define UFS_FSCLEAN ((char)0x01)
|
#define UFS_FSCLEAN ((char)0x01)
|
#define UFS_FSSTABLE ((char)0x02)
|
#define UFS_FSSTABLE ((char)0x02)
|
#define UFS_FSBAD ((char)0xff)
|
#define UFS_FSBAD ((char)0xff)
|
|
|
/* Flags for ufs_sb_info */
|
/* Flags for ufs_sb_info */
|
#define UFS_DEBUG 0x00000001
|
#define UFS_DEBUG 0x00000001
|
#define UFS_DEBUG_INODE 0x00000002
|
#define UFS_DEBUG_INODE 0x00000002
|
#define UFS_DEBUG_NAMEI 0x00000004
|
#define UFS_DEBUG_NAMEI 0x00000004
|
#define UFS_DEBUG_LINKS 0x00000008
|
#define UFS_DEBUG_LINKS 0x00000008
|
|
|
|
|
/* Test if the inode number is valid. */
|
/* Test if the inode number is valid. */
|
#define ufs_ino_ok(inode) ((inode->i_ino < 2) && \
|
#define ufs_ino_ok(inode) ((inode->i_ino < 2) && \
|
(inode->i_ino > (inode->i_sb->u.ufs_sb.s_ncg * inode->i_sb->u.ufs_sb.s_ipg - 1)))
|
(inode->i_ino > (inode->i_sb->u.ufs_sb.s_ncg * inode->i_sb->u.ufs_sb.s_ipg - 1)))
|
|
|
/* Convert (sb,cg) to the first physical block number for that cg. */
|
/* Convert (sb,cg) to the first physical block number for that cg. */
|
#define ufs_cgstart(sb, cg) \
|
#define ufs_cgstart(sb, cg) \
|
(((sb)->u.ufs_sb.s_fpg * (cg)) + (sb)->u.ufs_sb.s_cgoffset * ((cg) & ~((sb)->u.ufs_sb.s_cgmask)))
|
(((sb)->u.ufs_sb.s_fpg * (cg)) + (sb)->u.ufs_sb.s_cgoffset * ((cg) & ~((sb)->u.ufs_sb.s_cgmask)))
|
|
|
/* Convert (sb,cg) to the first phys. block number for inodes in that cg. */
|
/* Convert (sb,cg) to the first phys. block number for inodes in that cg. */
|
#define ufs_cgimin(sb, cg) (ufs_cgstart((sb), (cg)) + (sb)->u.ufs_sb.s_iblkno)
|
#define ufs_cgimin(sb, cg) (ufs_cgstart((sb), (cg)) + (sb)->u.ufs_sb.s_iblkno)
|
#define ufs_cgdmin(sb, cg) (ufs_cgstart((sb), (cg)) + (sb)->u.ufs_sb.s_dblkno)
|
#define ufs_cgdmin(sb, cg) (ufs_cgstart((sb), (cg)) + (sb)->u.ufs_sb.s_dblkno)
|
|
|
/* Convert an inode number to a cg number. */
|
/* Convert an inode number to a cg number. */
|
/* XXX - this can be optimized if s_ipg is a power of 2. */
|
/* XXX - this can be optimized if s_ipg is a power of 2. */
|
#define ufs_ino2cg(inode) ((inode)->i_ino/(inode)->i_sb->u.ufs_sb.s_ipg)
|
#define ufs_ino2cg(inode) ((inode)->i_ino/(inode)->i_sb->u.ufs_sb.s_ipg)
|
|
|
#define UFS_MAXNAMLEN 255
|
#define UFS_MAXNAMLEN 255
|
|
|
struct ufs_direct {
|
struct ufs_direct {
|
__u32 d_ino; /* inode number of this entry */
|
__u32 d_ino; /* inode number of this entry */
|
__u16 d_reclen; /* length of this entry */
|
__u16 d_reclen; /* length of this entry */
|
__u16 d_namlen; /* actual length of d_name */
|
__u16 d_namlen; /* actual length of d_name */
|
char d_name[UFS_MAXNAMLEN + 1]; /* file name */
|
char d_name[UFS_MAXNAMLEN + 1]; /* file name */
|
};
|
};
|
|
|
#define MAXMNTLEN 512
|
#define MAXMNTLEN 512
|
#define MAXCSBUFS 32
|
#define MAXCSBUFS 32
|
|
|
struct ufs_csum {
|
struct ufs_csum {
|
__u32 cs_ndir; /* number of directories */
|
__u32 cs_ndir; /* number of directories */
|
__u32 cs_nbfree; /* number of free blocks */
|
__u32 cs_nbfree; /* number of free blocks */
|
__u32 cs_nifree; /* number of free inodes */
|
__u32 cs_nifree; /* number of free inodes */
|
__u32 cs_nffree; /* number of free frags */
|
__u32 cs_nffree; /* number of free frags */
|
};
|
};
|
|
|
typedef struct _ufsquad {
|
typedef struct _ufsquad {
|
__u32 val[2];
|
__u32 val[2];
|
} ufsquad;
|
} ufsquad;
|
|
|
/*
|
/*
|
* This is the actual superblock, as it is laid out on the disk.
|
* This is the actual superblock, as it is laid out on the disk.
|
*/
|
*/
|
struct ufs_superblock {
|
struct ufs_superblock {
|
__u32 fs_link; /* UNUSED */
|
__u32 fs_link; /* UNUSED */
|
__u32 fs_rlink; /* UNUSED */
|
__u32 fs_rlink; /* UNUSED */
|
__u32 fs_sblkno;
|
__u32 fs_sblkno;
|
__u32 fs_cblkno;
|
__u32 fs_cblkno;
|
__u32 fs_iblkno;
|
__u32 fs_iblkno;
|
__u32 fs_dblkno;
|
__u32 fs_dblkno;
|
__u32 fs_cgoffset;
|
__u32 fs_cgoffset;
|
__u32 fs_cgmask;
|
__u32 fs_cgmask;
|
time_t fs_time; /* XXX - check type */
|
time_t fs_time; /* XXX - check type */
|
__u32 fs_size;
|
__u32 fs_size;
|
__u32 fs_dsize;
|
__u32 fs_dsize;
|
__u32 fs_ncg;
|
__u32 fs_ncg;
|
__u32 fs_bsize;
|
__u32 fs_bsize;
|
__u32 fs_fsize;
|
__u32 fs_fsize;
|
__u32 fs_frag;
|
__u32 fs_frag;
|
__u32 fs_minfree;
|
__u32 fs_minfree;
|
__u32 fs_rotdelay;
|
__u32 fs_rotdelay;
|
__u32 fs_rps;
|
__u32 fs_rps;
|
__u32 fs_bmask;
|
__u32 fs_bmask;
|
__u32 fs_fmask;
|
__u32 fs_fmask;
|
__u32 fs_bshift;
|
__u32 fs_bshift;
|
__u32 fs_fshift;
|
__u32 fs_fshift;
|
__u32 fs_maxcontig;
|
__u32 fs_maxcontig;
|
__u32 fs_maxbpg;
|
__u32 fs_maxbpg;
|
__u32 fs_fragshift;
|
__u32 fs_fragshift;
|
__u32 fs_fsbtodb;
|
__u32 fs_fsbtodb;
|
__u32 fs_sbsize;
|
__u32 fs_sbsize;
|
__u32 fs_csmask;
|
__u32 fs_csmask;
|
__u32 fs_csshift;
|
__u32 fs_csshift;
|
__u32 fs_nindir;
|
__u32 fs_nindir;
|
__u32 fs_inopb;
|
__u32 fs_inopb;
|
__u32 fs_nspf;
|
__u32 fs_nspf;
|
__u32 fs_optim;
|
__u32 fs_optim;
|
__u32 fs_XXX1;
|
__u32 fs_XXX1;
|
__u32 fs_interleave;
|
__u32 fs_interleave;
|
__u32 fs_trackskew;
|
__u32 fs_trackskew;
|
__u32 fs_id[2];
|
__u32 fs_id[2];
|
__u32 fs_csaddr;
|
__u32 fs_csaddr;
|
__u32 fs_cssize;
|
__u32 fs_cssize;
|
__u32 fs_cgsize;
|
__u32 fs_cgsize;
|
__u32 fs_ntrak;
|
__u32 fs_ntrak;
|
__u32 fs_nsect;
|
__u32 fs_nsect;
|
__u32 fs_spc;
|
__u32 fs_spc;
|
__u32 fs_ncyl;
|
__u32 fs_ncyl;
|
__u32 fs_cpg;
|
__u32 fs_cpg;
|
__u32 fs_ipg;
|
__u32 fs_ipg;
|
__u32 fs_fpg;
|
__u32 fs_fpg;
|
struct ufs_csum fs_cstotal;
|
struct ufs_csum fs_cstotal;
|
__u8 fs_fmod;
|
__u8 fs_fmod;
|
__u8 fs_clean;
|
__u8 fs_clean;
|
__u8 fs_ronly;
|
__u8 fs_ronly;
|
__u8 fs_flags;
|
__u8 fs_flags;
|
__u8 fs_fsmnt[MAXMNTLEN];
|
__u8 fs_fsmnt[MAXMNTLEN];
|
__u32 fs_cgrotor;
|
__u32 fs_cgrotor;
|
struct ufs_csum * fs_csp[MAXCSBUFS];
|
struct ufs_csum * fs_csp[MAXCSBUFS];
|
__u32 fs_cpc;
|
__u32 fs_cpc;
|
__u16 fs_opostbl[16][8]; /* old rotation block list head */
|
__u16 fs_opostbl[16][8]; /* old rotation block list head */
|
__s32 fs_sparecon[55]; /* reserved for future constants */
|
__s32 fs_sparecon[55]; /* reserved for future constants */
|
__s32 fs_state; /* file system state time stamp */
|
__s32 fs_state; /* file system state time stamp */
|
ufsquad fs_qbmask; /* ~usb_bmask - for use with __s64 size */
|
ufsquad fs_qbmask; /* ~usb_bmask - for use with __s64 size */
|
ufsquad fs_qfmask; /* ~usb_fmask - for use with __s64 size */
|
ufsquad fs_qfmask; /* ~usb_fmask - for use with __s64 size */
|
__s32 fs_postblformat; /* format of positional layout tables */
|
__s32 fs_postblformat; /* format of positional layout tables */
|
__s32 fs_nrpos; /* number of rotational positions */
|
__s32 fs_nrpos; /* number of rotational positions */
|
__s32 fs_postbloff; /* (__s16) rotation block list head */
|
__s32 fs_postbloff; /* (__s16) rotation block list head */
|
__s32 fs_rotbloff; /* (__u8) blocks for each rotation */
|
__s32 fs_rotbloff; /* (__u8) blocks for each rotation */
|
__s32 fs_magic; /* magic number */
|
__s32 fs_magic; /* magic number */
|
__u8 fs_space[1]; /* list of blocks for each rotation */
|
__u8 fs_space[1]; /* list of blocks for each rotation */
|
|
|
};
|
};
|
|
|
/*
|
/*
|
* structure of an on-disk inode
|
* structure of an on-disk inode
|
*/
|
*/
|
struct ufs_inode {
|
struct ufs_inode {
|
__u16 ui_mode; /* 0x0 */
|
__u16 ui_mode; /* 0x0 */
|
__u16 ui_nlink; /* 0x2 */
|
__u16 ui_nlink; /* 0x2 */
|
__u16 ui_suid; /* 0x4 */
|
__u16 ui_suid; /* 0x4 */
|
__u16 ui_sgid; /* 0x6 */
|
__u16 ui_sgid; /* 0x6 */
|
ufsquad ui_size; /* 0x8 */ /* XXX - should be __u64 */
|
ufsquad ui_size; /* 0x8 */ /* XXX - should be __u64 */
|
struct timeval ui_atime; /* 0x10 */
|
struct timeval ui_atime; /* 0x10 */
|
struct timeval ui_mtime; /* 0x18 */
|
struct timeval ui_mtime; /* 0x18 */
|
struct timeval ui_ctime; /* 0x20 */
|
struct timeval ui_ctime; /* 0x20 */
|
__u32 ui_db[UFS_NDADDR]; /* 0x28 data blocks */
|
__u32 ui_db[UFS_NDADDR]; /* 0x28 data blocks */
|
__u32 ui_ib[UFS_NINDIR]; /* 0x58 indirect blocks */
|
__u32 ui_ib[UFS_NINDIR]; /* 0x58 indirect blocks */
|
__u32 ui_flags; /* 0x64 unused */
|
__u32 ui_flags; /* 0x64 unused */
|
__u32 ui_blocks; /* 0x68 blocks in use */
|
__u32 ui_blocks; /* 0x68 blocks in use */
|
__u32 ui_gen; /* 0x6c generation number XXX - what is this? */
|
__u32 ui_gen; /* 0x6c generation number XXX - what is this? */
|
__u32 ui_shadow; /* 0x70 shadow inode XXX - what is this?*/
|
__u32 ui_shadow; /* 0x70 shadow inode XXX - what is this?*/
|
__u32 ui_uid; /* 0x74 long EFT version of uid */
|
__u32 ui_uid; /* 0x74 long EFT version of uid */
|
__u32 ui_gid; /* 0x78 long EFT version of gid */
|
__u32 ui_gid; /* 0x78 long EFT version of gid */
|
__u32 ui_oeftflag; /* 0x7c reserved */
|
__u32 ui_oeftflag; /* 0x7c reserved */
|
};
|
};
|
|
|
extern int init_ufs_fs(void);
|
extern int init_ufs_fs(void);
|
|
|
#endif /* __LINUX_UFS_FS_H */
|
#endif /* __LINUX_UFS_FS_H */
|
/*
|
/*
|
* Local Variables: ***
|
* Local Variables: ***
|
* c-indent-level: 8 ***
|
* c-indent-level: 8 ***
|
* c-continued-statement-offset: 8 ***
|
* c-continued-statement-offset: 8 ***
|
* c-brace-offset: -8 ***
|
* c-brace-offset: -8 ***
|
* c-argdecl-indent: 0 ***
|
* c-argdecl-indent: 0 ***
|
* c-label-offset: -8 ***
|
* c-label-offset: -8 ***
|
* End: ***
|
* End: ***
|
*/
|
*/
|
|
|