15b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 25b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Copyright (C) 2004 Free Software Foundation, Inc. 35b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Copyright (c) 2002 Networks Associates Technology, Inc. 45b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * All rights reserved. 55b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * 65b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * This software was developed for the FreeBSD Project by Marshall 75b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Kirk McKusick and Network Associates Laboratories, the Security 85b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Research Division of Network Associates, Inc. under DARPA/SPAWAR 95b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * contract N66001-01-C-8035 ("CBOSS"), as part of the DARPA CHATS 105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * research program 115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * 125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Copyright (c) 1982, 1989, 1993 135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * The Regents of the University of California. All rights reserved. 145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * (c) UNIX System Laboratories, Inc. 155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * All or some portions of this file are derived from material licensed 165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * to the University of California by American Telephone and Telegraph 175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Co. or Unix System Laboratories, Inc. and are reproduced herein with 185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * the permission of UNIX System Laboratories, Inc. 195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * 205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Redistribution and use in source and binary forms, with or without 215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * modification, are permitted provided that the following conditions 225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * are met: 235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * notice, this list of conditions and the following disclaimer. 255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * documentation and/or other materials provided with the distribution. 285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * 3. The names of the authors may not be used to endorse or promote 295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * products derived from this software without specific prior written 305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * permission. 315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * 325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * SUCH DAMAGE. 435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * 445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * @(#)dinode.h 8.3 (Berkeley) 1/21/94 455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * $FreeBSD: src/sys/ufs/ufs/dinode.h,v 1.11 2002/07/16 22:36:00 mckusick Exp $ 465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef _GRUB_UFS2_H_ 495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define _GRUB_UFS2_H_ 505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef signed char grub_int8_t; 525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef signed short grub_int16_t; 535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef signed int grub_int32_t; 545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef signed long long int grub_int64_t; 555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef unsigned char grub_uint8_t; 565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef unsigned short grub_uint16_t; 575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef unsigned int grub_uint32_t; 585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef unsigned long long int grub_uint64_t; 595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef grub_uint8_t grub_u_char; 615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef grub_uint32_t grub_u_int; 625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef grub_uint8_t grub_u_int8_t; 645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef grub_uint16_t grub_u_int16_t; 655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef grub_uint32_t grub_u_int32_t; 665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef grub_uint64_t grub_u_int64_t; 675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define i_size di_size 695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DEV_BSIZE 512 725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * The root inode is the root of the filesystem. Inode 0 can't be used for 755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * normal purposes and historically bad blocks were linked to inode 1, thus 765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * the root inode is 2. (Inode 1 is no longer used for this purpose, however 775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * numerous dump tapes make this assumption, so we are stuck with it). 785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ROOTINO ((grub_ino_t)2) 805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * The size of physical and logical block numbers and time fields in UFS. 835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef grub_int32_t ufs1_daddr_t; 855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef grub_int64_t ufs2_daddr_t; 865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef grub_int64_t ufs_lbn_t; 875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef grub_int64_t ufs_time_t; 885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* inode number */ 905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef grub_uint32_t grub_ino_t; 915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* File permissions. */ 935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IEXEC 0000100 /* Executable. */ 945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IWRITE 0000200 /* Writeable. */ 955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IREAD 0000400 /* Readable. */ 965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ISVTX 0001000 /* Sticky bit. */ 975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ISGID 0002000 /* Set-gid. */ 985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ISUID 0004000 /* Set-uid. */ 995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* File types. */ 1015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IFMT 0170000 /* Mask of file type. */ 1025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IFIFO 0010000 /* Named pipe (fifo). */ 1035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IFCHR 0020000 /* Character device. */ 1045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IFDIR 0040000 /* Directory file. */ 1055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IFBLK 0060000 /* Block device. */ 1065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IFREG 0100000 /* Regular file. */ 1075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IFLNK 0120000 /* Symbolic link. */ 1085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IFSOCK 0140000 /* UNIX domain socket. */ 1095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IFWHT 0160000 /* Whiteout. */ 1105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 1125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * A dinode contains all the meta-data associated with a UFS2 file. 1135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * This structure defines the on-disk format of a dinode. Since 1145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * this structure describes an on-disk structure, all its fields 1155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * are defined by types with precise widths. 1165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 1175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define NXADDR 2 /* External addresses in inode. */ 1195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define NDADDR 12 /* Direct addresses in inode. */ 1205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define NIADDR 3 /* Indirect addresses in inode. */ 1215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct ufs1_dinode { 1235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int16_t di_mode; /* 0: IFMT, permissions; see below. */ 1245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int16_t di_nlink; /* 2: File link count. */ 1255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project union { 1265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int16_t oldids[2]; /* 4: Ffs: old user and group ids. */ 1275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } di_u; 1285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int64_t di_size; /* 8: File byte count. */ 1295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_atime; /* 16: Last access time. */ 1305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_atimensec; /* 20: Last access time. */ 1315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_mtime; /* 24: Last modified time. */ 1325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_mtimensec; /* 28: Last modified time. */ 1335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_ctime; /* 32: Last inode change time. */ 1345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_ctimensec; /* 36: Last inode change time. */ 1355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ufs1_daddr_t di_db[NDADDR]; /* 40: Direct disk blocks. */ 1365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ufs1_daddr_t di_ib[NIADDR]; /* 88: Indirect disk blocks. */ 1375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int32_t di_flags; /* 100: Status flags (chflags). */ 1385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_blocks; /* 104: Blocks actually held. */ 1395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_gen; /* 108: Generation number. */ 1405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int32_t di_uid; /* 112: File owner. */ 1415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int32_t di_gid; /* 116: File group. */ 1425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_spare[2]; /* 120: Reserved; currently unused */ 1435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}; 1445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct ufs2_dinode { 1465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int16_t di_mode; /* 0: IFMT, permissions; see below. */ 1475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int16_t di_nlink; /* 2: File link count. */ 1485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int32_t di_uid; /* 4: File owner. */ 1495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int32_t di_gid; /* 8: File group. */ 1505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int32_t di_blksize; /* 12: Inode blocksize. */ 1515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int64_t di_size; /* 16: File byte count. */ 1525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int64_t di_blocks; /* 24: Bytes actually held. */ 1535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ufs_time_t di_atime; /* 32: Last access time. */ 1545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ufs_time_t di_mtime; /* 40: Last modified time. */ 1555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ufs_time_t di_ctime; /* 48: Last inode change time. */ 1565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ufs_time_t di_birthtime; /* 56: Inode creation time. */ 1575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_mtimensec; /* 64: Last modified time. */ 1585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_atimensec; /* 68: Last access time. */ 1595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_ctimensec; /* 72: Last inode change time. */ 1605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_birthnsec; /* 76: Inode creation time. */ 1615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_gen; /* 80: Generation number. */ 1625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int32_t di_kernflags; /* 84: Kernel flags. */ 1635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int32_t di_flags; /* 88: Status flags (chflags). */ 1645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t di_extsize; /* 92: External attributes block. */ 1655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ufs2_daddr_t di_extb[NXADDR];/* 96: External attributes block. */ 1665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ufs2_daddr_t di_db[NDADDR]; /* 112: Direct disk blocks. */ 1675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ufs2_daddr_t di_ib[NIADDR]; /* 208: Indirect disk blocks. */ 1685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t di_spare[3]; /* 232: Reserved; currently unused */ 1695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}; 1705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define MAXNAMLEN 255 1725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct direct { 1745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int32_t d_ino; /* inode number of entry */ 1755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int16_t d_reclen; /* length of this record */ 1765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int8_t d_type; /* file type, see below */ 1775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int8_t d_namlen; /* length of string in d_name */ 1785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project char d_name[MAXNAMLEN + 1];/* name with length <= MAXNAMLEN */ 1795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}; 1805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 1825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * File types 1835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 1845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DT_UNKNOWN 0 1855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DT_FIFO 1 1865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DT_CHR 2 1875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DT_DIR 4 1885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DT_BLK 6 1895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DT_REG 8 1905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DT_LNK 10 1915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DT_SOCK 12 1925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DT_WHT 14 1935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 1955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Superblock offsets 1965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 1975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define SBLOCK_FLOPPY 0 1985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define SBLOCK_UFS1 8192 1995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define SBLOCK_UFS2 65536 2005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define SBLOCK_PIGGY 262144 2015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define SBLOCKSIZE 8192 2025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define SBLOCKSEARCH \ 2035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project { SBLOCK_UFS2, SBLOCK_UFS1, SBLOCK_FLOPPY, SBLOCK_PIGGY, -1 } 2045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define MAXMNTLEN 512 2065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define NOCSPTRS ((128 / sizeof(void *)) - 4) 2085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 2105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * The maximum number of snapshot nodes that can be associated 2115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * with each filesystem. This limit affects only the number of 2125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * snapshot files that can be recorded within the superblock so 2135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * that they can be found when the filesystem is mounted. However, 2145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * maintaining too many will slow the filesystem performance, so 2155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * having this limit is a good idea. 2165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 2175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSMAXSNAP 20 2185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 2205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Per cylinder group information; summarized in blocks allocated 2215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * from first cylinder group data blocks. These blocks have to be 2225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * read in from fs_csaddr (size fs_cssize) in addition to the 2235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * super block. 2245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 2255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct csum { 2265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t cs_ndir; /* number of directories */ 2275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t cs_nbfree; /* number of free blocks */ 2285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t cs_nifree; /* number of free inodes */ 2295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t cs_nffree; /* number of free frags */ 2305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}; 2315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct csum_total { 2335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t cs_ndir; /* number of directories */ 2345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t cs_nbfree; /* number of free blocks */ 2355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t cs_nifree; /* number of free inodes */ 2365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t cs_nffree; /* number of free frags */ 2375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t cs_numclusters; /* number of free clusters */ 2385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t cs_spare[3]; /* future expansion */ 2395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}; 2405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 2425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Super block for an FFS filesystem. 2435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 2445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct fs { 2455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_firstfield; /* historic filesystem linked list, */ 2465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_unused_1; /* used for incore super blocks */ 2475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_sblkno; /* offset of super-block in filesys */ 2485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_cblkno; /* offset of cyl-block in filesys */ 2495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_iblkno; /* offset of inode-blocks in filesys */ 2505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_dblkno; /* offset of first data after cg */ 2515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_cgoffset; /* cylinder group offset in cylinder */ 2525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_cgmask; /* used to calc mod fs_ntrak */ 2535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_time; /* last time written */ 2545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_size; /* number of blocks in fs */ 2555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_dsize; /* number of data blocks in fs */ 2565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_ncg; /* number of cylinder groups */ 2575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_bsize; /* size of basic blocks in fs */ 2585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_fsize; /* size of frag blocks in fs */ 2595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_frag; /* number of frags in a block in fs */ 2605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* these are configuration parameters */ 2615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_minfree; /* minimum percentage of free blocks */ 2625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_rotdelay; /* num of ms for optimal next block */ 2635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_rps; /* disk revolutions per second */ 2645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* these fields can be computed from the others */ 2655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_bmask; /* ``blkoff'' calc of blk offsets */ 2665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_fmask; /* ``fragoff'' calc of frag offsets */ 2675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_bshift; /* ``lblkno'' calc of logical blkno */ 2685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_fshift; /* ``numfrags'' calc number of frags */ 2695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* these are configuration parameters */ 2705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_maxcontig; /* max number of contiguous blks */ 2715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_maxbpg; /* max number of blks per cyl group */ 2725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* these fields can be computed from the others */ 2735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_fragshift; /* block to frag shift */ 2745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_fsbtodb; /* fsbtodb and dbtofsb shift constant */ 2755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_sbsize; /* actual size of super block */ 2765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_spare1[2]; /* old fs_csmask */ 2775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* old fs_csshift */ 2785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_nindir; /* value of NINDIR */ 2795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_inopb; /* value of INOPB */ 2805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_nspf; /* value of NSPF */ 2815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* yet another configuration parameter */ 2825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_optim; /* optimization preference, see below */ 2835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_npsect; /* # sectors/track including spares */ 2845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_interleave; /* hardware sector interleave */ 2855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_trackskew; /* sector 0 skew, per track */ 2865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_id[2]; /* unique filesystem id */ 2875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* sizes determined by number of cylinder groups and their sizes */ 2885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_csaddr; /* blk addr of cyl grp summary area */ 2895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_cssize; /* size of cyl grp summary area */ 2905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_cgsize; /* cylinder group size */ 2915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_spare2; /* old fs_ntrak */ 2925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_nsect; /* sectors per track */ 2935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_spc; /* sectors per cylinder */ 2945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_ncyl; /* cylinders in filesystem */ 2955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_cpg; /* cylinders per group */ 2965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_ipg; /* inodes per group */ 2975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_fpg; /* blocks per group * fs_frag */ 2985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* this data must be re-computed after crashes */ 2995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct csum fs_old_cstotal; /* cylinder summary information */ 3005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* these fields are cleared at mount time */ 3015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int8_t fs_fmod; /* super block modified flag */ 3025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int8_t fs_clean; /* filesystem is clean flag */ 3035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int8_t fs_ronly; /* mounted read-only flag */ 3045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int8_t fs_old_flags; /* old FS_ flags */ 3055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_char fs_fsmnt[MAXMNTLEN]; /* name mounted on */ 3065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* these fields retain the current block allocation info */ 3075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_cgrotor; /* last cg searched */ 3085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project void *fs_ocsp[NOCSPTRS]; /* padding; was list of fs_cs buffers */ 3095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int8_t *fs_contigdirs; /* # of contiguously allocated dirs */ 3105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct csum *fs_csp; /* cg summary info buffer for fs_cs */ 3115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t *fs_maxcluster; /* max cluster in each cyl group */ 3125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int *fs_active; /* used by snapshots to track fs */ 3135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_cpc; /* cyl per cycle in postbl */ 3145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_maxbsize; /* maximum blocking factor permitted */ 3155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t fs_sparecon64[17]; /* old rotation block list head */ 3165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t fs_sblockloc; /* byte offset of standard superblock */ 3175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct csum_total fs_cstotal; /* cylinder summary information */ 3185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ufs_time_t fs_time; /* last time written */ 3195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t fs_size; /* number of blocks in fs */ 3205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t fs_dsize; /* number of data blocks in fs */ 3215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ufs2_daddr_t fs_csaddr; /* blk addr of cyl grp summary area */ 3225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t fs_pendingblocks; /* blocks in process of being freed */ 3235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_pendinginodes; /* inodes in process of being freed */ 3245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_snapinum[FSMAXSNAP];/* list of snapshot inode numbers */ 3255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_avgfilesize; /* expected average file size */ 3265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_avgfpdir; /* expected # of files per directory */ 3275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_save_cgsize; /* save real cg size to use fs_bsize */ 3285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_sparecon32[26]; /* reserved for future constants */ 3295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_flags; /* see FS_ flags below */ 3305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_contigsumsize; /* size of cluster summary array */ 3315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_maxsymlinklen; /* max length of an internal symlink */ 3325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_inodefmt; /* format of on-disk inodes */ 3335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_u_int64_t fs_maxfilesize; /* maximum representable file size */ 3345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t fs_qbmask; /* ~fs_bmask for use with 64-bit size */ 3355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int64_t fs_qfmask; /* ~fs_fmask for use with 64-bit size */ 3365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_state; /* validate fs_clean field */ 3375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_postblformat; /* format of positional layout tables */ 3385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_old_nrpos; /* number of rotational positions */ 3395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_spare5[2]; /* old fs_postbloff */ 3405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* old fs_rotbloff */ 3415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project grub_int32_t fs_magic; /* magic number */ 3425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}; 3435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 3455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Filesystem identification 3465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 3475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FS_UFS1_MAGIC 0x011954 /* UFS1 fast filesystem magic number */ 3485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FS_UFS2_MAGIC 0x19540119 /* UFS2 fast filesystem magic number */ 3495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 3515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Turn filesystem block numbers into disk block addresses. 3525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * This maps filesystem blocks to device size blocks. 3535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 3545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define fsbtodb(fs, b) ((b) << (fs)->fs_fsbtodb) 3555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define dbtofsb(fs, b) ((b) >> (fs)->fs_fsbtodb) 3565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 3585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Cylinder group macros to locate things in cylinder groups. 3595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * They calc filesystem addresses of cylinder group data structures. 3605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 3615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define cgbase(fs, c) ((ufs2_daddr_t)((fs)->fs_fpg * (c))) 3625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define cgimin(fs, c) (cgstart(fs, c) + (fs)->fs_iblkno) /* inode blk */ 3635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define cgstart(fs, c) \ 3645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ((fs)->fs_magic == FS_UFS2_MAGIC ? cgbase(fs, c) : \ 3655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project (cgbase(fs, c) + (fs)->fs_old_cgoffset * ((c) & ~((fs)->fs_old_cgmask)))) 3665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 3685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Macros for handling inode numbers: 3695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * inode number to filesystem block offset. 3705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * inode number to cylinder group number. 3715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * inode number to filesystem block address. 3725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 3735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ino_to_cg(fs, x) ((x) / (fs)->fs_ipg) 3745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ino_to_fsba(fs, x) \ 3755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ((ufs2_daddr_t)(cgimin(fs, ino_to_cg(fs, x)) + \ 3765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project (blkstofrags((fs), (((x) % (fs)->fs_ipg) / INOPB(fs)))))) 3775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ino_to_fsbo(fs, x) ((x) % INOPB(fs)) 3785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 3805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * The following macros optimize certain frequently calculated 3815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * quantities by using shifts and masks in place of divisions 3825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * modulos and multiplications. 3835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 3845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define blkoff(fs, loc) /* calculates (loc % fs->fs_bsize) */ \ 3855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ((loc) & (fs)->fs_qbmask) 3865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Use this only when `blk' is known to be small, e.g., < NDADDR. */ 3885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define smalllblktosize(fs, blk) /* calculates (blk * fs->fs_bsize) */ \ 3895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ((blk) << (fs)->fs_bshift) 3905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define lblkno(fs, loc) /* calculates (loc / fs->fs_bsize) */ \ 3935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ((loc) >> (fs)->fs_bshift) 3945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define fragroundup(fs, size) /* calculates roundup(size, fs->fs_fsize) */ \ 3965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project (((size) + (fs)->fs_qfmask) & (fs)->fs_fmask) 3975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define fragstoblks(fs, frags) /* calculates (frags / fs->fs_frag) */ \ 3995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ((frags) >> (fs)->fs_fragshift) 4005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define blkstofrags(fs, blks) /* calculates (blks * fs->fs_frag) */ \ 4015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ((blks) << (fs)->fs_fragshift) 4025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define fragnum(fs, fsb) /* calculates (fsb % fs->fs_frag) */ \ 4035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ((fsb) & ((fs)->fs_frag - 1)) 4045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define blknum(fs, fsb) /* calculates rounddown(fsb, fs->fs_frag) */ \ 4055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ((fsb) &~ ((fs)->fs_frag - 1)) 4065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 4085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Determining the size of a file block in the filesystem. 4095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 4105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define blksize(fs, ip, lbn) \ 4115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project (((lbn) >= NDADDR || (ip)->i_size >= smalllblktosize(fs, (lbn) + 1)) \ 4125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ? (fs)->fs_bsize \ 4135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project : (fragroundup(fs, blkoff(fs, (ip)->i_size)))) 4145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define sblksize(fs, size, lbn) \ 4155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project (((lbn) >= NDADDR || (size) >= ((lbn) + 1) << (fs)->fs_bshift) \ 4165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ? (fs)->fs_bsize \ 4175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project : (fragroundup(fs, blkoff(fs, (size))))) 4185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 4215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Number of inodes in a secondary storage block/fragment. 4225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 4235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define INOPB(fs) ((fs)->fs_inopb) 4245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define INOPF(fs) ((fs)->fs_inopb >> (fs)->fs_fragshift) 4255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 4275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Number of indirects in a filesystem block. 4285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 4295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define NINDIR(fs) ((fs)->fs_nindir) 4305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FS_UNCLEAN 0x01 /* filesystem not clean at mount */ 4325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FS_DOSOFTDEP 0x02 /* filesystem using soft dependencies */ 4335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FS_NEEDSFSCK 0x04 /* filesystem needs sync fsck before mount */ 4345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FS_INDEXDIRS 0x08 /* kernel supports indexed directories */ 4355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FS_ACLS 0x10 /* file system has ACLs enabled */ 4365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FS_MULTILABEL 0x20 /* file system is MAC multi-label */ 4375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FS_FLAGS_UPDATED 0x80 /* flags have been moved to new location */ 4385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* _GRUB_UFS2_H_ */ 440