130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * include/linux/bfs_fs.h - BFS data structures on disk. 330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (C) 1999 Tigran Aivazian <tigran@veritas.com> 430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _LINUX_BFS_FS_H 730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _LINUX_BFS_FS_H 830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h> 1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_BSIZE_BITS 9 1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_BSIZE (1<<BFS_BSIZE_BITS) 1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_MAGIC 0x1BADFACE 1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_ROOT_INO 2 1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_INODES_PER_BLOCK 8 1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* SVR4 vnode type values (bfs_inode->i_vtype) */ 1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_VDIR 2L 2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_VREG 1L 2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* BFS inode layout on disk */ 2330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct bfs_inode { 2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 i_ino; 2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u16 i_unused; 2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 i_sblock; 2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 i_eblock; 2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 i_eoffset; 2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 i_vtype; 3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 i_mode; 3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 i_uid; 3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 i_gid; 3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 i_nlink; 3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 i_atime; 3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 i_mtime; 3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 i_ctime; 3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 i_padding[4]; 3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_NAMELEN 14 4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_DIRENT_SIZE 16 4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_DIRS_PER_BLOCK 32 4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct bfs_dirent { 4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 ino; 4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng char name[BFS_NAMELEN]; 4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* BFS superblock layout on disk */ 5030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct bfs_super_block { 5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 s_magic; 5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 s_start; 5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 s_end; 5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 s_from; 5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 s_to; 5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __s32 s_bfrom; 5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __s32 s_bto; 5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng char s_fsname[6]; 5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng char s_volume[6]; 6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 s_padding[118]; 6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_OFF2INO(offset) \ 6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng ((((offset) - BFS_BSIZE) / sizeof(struct bfs_inode)) + BFS_ROOT_INO) 6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_INO2OFF(ino) \ 6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng ((__u32)(((ino) - BFS_ROOT_INO) * sizeof(struct bfs_inode)) + BFS_BSIZE) 6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_NZFILESIZE(ip) \ 7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng ((le32_to_cpu((ip)->i_eoffset) + 1) - le32_to_cpu((ip)->i_sblock) * BFS_BSIZE) 7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_FILESIZE(ip) \ 7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng ((ip)->i_sblock == 0 ? 0 : BFS_NZFILESIZE(ip)) 7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_FILEBLOCKS(ip) \ 7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng ((ip)->i_sblock == 0 ? 0 : (le32_to_cpu((ip)->i_eblock) + 1) - le32_to_cpu((ip)->i_sblock)) 7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define BFS_UNCLEAN(bfs_sb, sb) \ 7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng ((le32_to_cpu(bfs_sb->s_from) != -1) && (le32_to_cpu(bfs_sb->s_to) != -1) && !(sb->s_flags & MS_RDONLY)) 7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* _LINUX_BFS_FS_H */ 82