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