^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * Copyright (c) 2000-2001 Christoph Hellwig.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Redistribution and use in source and binary forms, with or without
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * modification, are permitted provided that the following conditions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * are met:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * 1. Redistributions of source code must retain the above copyright
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * notice, this list of conditions, and the following disclaimer,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * without modification.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * 2. The name of the author may not be used to endorse or promote products
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * derived from this software without specific prior written permission.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * Alternatively, this software may be distributed under the terms of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * GNU General Public License ("GPL").
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * SUCH DAMAGE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #ifndef _VXFS_OLT_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define _VXFS_OLT_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) * Veritas filesystem driver - Object Location Table data structures.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) * This file contains definitions for the Object Location Table used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) * by the Veritas Filesystem version 2 and newer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) * OLT magic number (vxfs_olt->olt_magic).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define VXFS_OLT_MAGIC 0xa504FCF5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) * VxFS OLT entry types.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) VXFS_OLT_FREE = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) VXFS_OLT_FSHEAD = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) VXFS_OLT_CUT = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) VXFS_OLT_ILIST = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) VXFS_OLT_DEV = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) VXFS_OLT_SB = 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) * VxFS OLT header.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) * The Object Location Table header is placed at the beginning of each
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) * OLT extent. It is used to fing certain filesystem-wide metadata, e.g.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) * the initial inode list, the fileset header or the device configuration.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) struct vxfs_olt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) __fs32 olt_magic; /* magic number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) __fs32 olt_size; /* size of this entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) __fs32 olt_checksum; /* checksum of extent */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) __u32 __unused1; /* ??? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) __fs32 olt_mtime; /* time of last mod. (sec) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) __fs32 olt_mutime; /* time of last mod. (usec) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) __fs32 olt_totfree; /* free space in OLT extent */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) __fs32 olt_extents[2]; /* addr of this extent, replica */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) __fs32 olt_esize; /* size of this extent */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) __fs32 olt_next[2]; /* addr of next extent, replica */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) __fs32 olt_nsize; /* size of next extent */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) __u32 __unused2; /* align to 8 byte boundary */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) * VxFS common OLT entry (on disk).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) struct vxfs_oltcommon {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) __fs32 olt_type; /* type of this record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) __fs32 olt_size; /* size of this record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) * VxFS free OLT entry (on disk).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) struct vxfs_oltfree {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) __fs32 olt_type; /* type of this record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) __fs32 olt_fsize; /* size of this free record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) * VxFS initial-inode list (on disk).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) struct vxfs_oltilist {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) __fs32 olt_type; /* type of this record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) __fs32 olt_size; /* size of this record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) __fs32 olt_iext[2]; /* initial inode list, replica */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) * Current Usage Table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) struct vxfs_oltcut {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) __fs32 olt_type; /* type of this record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) __fs32 olt_size; /* size of this record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) __fs32 olt_cutino; /* inode of current usage table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) __u8 __pad; /* unused, 8 byte align */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) * Inodes containing Superblock, Intent log and OLTs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) struct vxfs_oltsb {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) __fs32 olt_type; /* type of this record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) __fs32 olt_size; /* size of this record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) __fs32 olt_sbino; /* inode of superblock file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) __u32 __unused1; /* ??? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) __fs32 olt_logino[2]; /* inode of log file,replica */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) __fs32 olt_oltino[2]; /* inode of OLT, replica */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) * Inode containing device configuration + it's replica
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) struct vxfs_oltdev {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) __fs32 olt_type; /* type of this record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) __fs32 olt_size; /* size of this record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) __fs32 olt_devino[2]; /* inode of device config files */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) * Fileset header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) struct vxfs_oltfshead {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) __fs32 olt_type; /* type number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) __fs32 olt_size; /* size of this record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) __fs32 olt_fsino[2]; /* inodes of fileset header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #endif /* _VXFS_OLT_H_ */