^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) * Copyright (c) 2016 Krzysztof Blaszkowski
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Redistribution and use in source and binary forms, with or without
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * modification, are permitted provided that the following conditions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * are met:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * 1. Redistributions of source code must retain the above copyright
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * notice, this list of conditions, and the following disclaimer,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * without modification.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * 2. The name of the author may not be used to endorse or promote products
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * derived from this software without specific prior written permission.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * Alternatively, this software may be distributed under the terms of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * GNU General Public License ("GPL").
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * SUCH DAMAGE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #ifndef _VXFS_SUPER_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define _VXFS_SUPER_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) * Veritas filesystem driver - superblock structure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) * This file contains the definition of the disk and core
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) * superblocks of the Veritas Filesystem.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) * Superblock magic number (vxfs_super->vs_magic).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define VXFS_SUPER_MAGIC 0xa501FCF5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) * The root inode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define VXFS_ROOT_INO 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) * Num of entries in free extent array
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define VXFS_NEFREE 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) enum vxfs_byte_order {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) VXFS_BO_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) VXFS_BO_BE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) typedef __u16 __bitwise __fs16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) typedef __u32 __bitwise __fs32;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) typedef __u64 __bitwise __fs64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) * VxFS superblock (disk).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) struct vxfs_sb {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) * Readonly fields for the version 1 superblock.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) * Lots of this fields are no more used by version 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) * and never filesystems.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) __fs32 vs_magic; /* Magic number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) __fs32 vs_version; /* VxFS version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) __fs32 vs_ctime; /* create time - secs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) __fs32 vs_cutime; /* create time - usecs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) __fs32 __unused1; /* unused */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) __fs32 __unused2; /* unused */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) __fs32 vs_old_logstart; /* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) __fs32 vs_old_logend; /* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) __fs32 vs_bsize; /* block size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) __fs32 vs_size; /* number of blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) __fs32 vs_dsize; /* number of data blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) __fs32 vs_old_ninode; /* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) __fs32 vs_old_nau; /* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) __fs32 __unused3; /* unused */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) __fs32 vs_old_defiextsize; /* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) __fs32 vs_old_ilbsize; /* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) __fs32 vs_immedlen; /* size of immediate data area */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) __fs32 vs_ndaddr; /* number of direct extentes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) __fs32 vs_firstau; /* address of first AU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) __fs32 vs_emap; /* offset of extent map in AU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) __fs32 vs_imap; /* offset of inode map in AU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) __fs32 vs_iextop; /* offset of ExtOp. map in AU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) __fs32 vs_istart; /* offset of inode list in AU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) __fs32 vs_bstart; /* offset of fdblock in AU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) __fs32 vs_femap; /* aufirst + emap */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) __fs32 vs_fimap; /* aufirst + imap */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) __fs32 vs_fiextop; /* aufirst + iextop */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) __fs32 vs_fistart; /* aufirst + istart */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) __fs32 vs_fbstart; /* aufirst + bstart */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) __fs32 vs_nindir; /* number of entries in indir */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) __fs32 vs_aulen; /* length of AU in blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) __fs32 vs_auimlen; /* length of imap in blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) __fs32 vs_auemlen; /* length of emap in blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) __fs32 vs_auilen; /* length of ilist in blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) __fs32 vs_aupad; /* length of pad in blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) __fs32 vs_aublocks; /* data blocks in AU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) __fs32 vs_maxtier; /* log base 2 of aublocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) __fs32 vs_inopb; /* number of inodes per blk */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) __fs32 vs_old_inopau; /* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) __fs32 vs_old_inopilb; /* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) __fs32 vs_old_ndiripau; /* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) __fs32 vs_iaddrlen; /* size of indirect addr ext. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) __fs32 vs_bshift; /* log base 2 of bsize */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) __fs32 vs_inoshift; /* log base 2 of inobp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) __fs32 vs_bmask; /* ~( bsize - 1 ) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) __fs32 vs_boffmask; /* bsize - 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) __fs32 vs_old_inomask; /* old_inopilb - 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) __fs32 vs_checksum; /* checksum of V1 data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) * Version 1, writable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) __fs32 vs_free; /* number of free blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) __fs32 vs_ifree; /* number of free inodes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) __fs32 vs_efree[VXFS_NEFREE]; /* number of free extents by size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) __fs32 vs_flags; /* flags ?!? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) __u8 vs_mod; /* filesystem has been changed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) __u8 vs_clean; /* clean FS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) __fs16 __unused4; /* unused */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) __fs32 vs_firstlogid; /* mount time log ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) __fs32 vs_wtime; /* last time written - sec */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) __fs32 vs_wutime; /* last time written - usec */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) __u8 vs_fname[6]; /* FS name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) __u8 vs_fpack[6]; /* FS pack name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) __fs32 vs_logversion; /* log format version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) __u32 __unused5; /* unused */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) * Version 2, Read-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) __fs32 vs_oltext[2]; /* OLT extent and replica */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) __fs32 vs_oltsize; /* OLT extent size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) __fs32 vs_iauimlen; /* size of inode map */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) __fs32 vs_iausize; /* size of IAU in blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) __fs32 vs_dinosize; /* size of inode in bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) __fs32 vs_old_dniaddr; /* indir levels per inode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) __fs32 vs_checksum2; /* checksum of V2 RO */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) * Actually much more...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) * In core superblock filesystem private data for VxFS.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) struct vxfs_sb_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) struct vxfs_sb *vsi_raw; /* raw (on disk) superblock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) struct buffer_head *vsi_bp; /* buffer for raw superblock*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) struct inode *vsi_fship; /* fileset header inode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) struct inode *vsi_ilist; /* inode list inode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) struct inode *vsi_stilist; /* structural inode list inode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) u_long vsi_iext; /* initial inode list */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) ino_t vsi_fshino; /* fileset header inode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) daddr_t vsi_oltext; /* OLT extent */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) daddr_t vsi_oltsize; /* OLT size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) enum vxfs_byte_order byte_order;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) static inline u16 fs16_to_cpu(struct vxfs_sb_info *sbi, __fs16 a)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) if (sbi->byte_order == VXFS_BO_BE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) return be16_to_cpu((__force __be16)a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) return le16_to_cpu((__force __le16)a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) static inline u32 fs32_to_cpu(struct vxfs_sb_info *sbi, __fs32 a)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) if (sbi->byte_order == VXFS_BO_BE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) return be32_to_cpu((__force __be32)a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) return le32_to_cpu((__force __le32)a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) static inline u64 fs64_to_cpu(struct vxfs_sb_info *sbi, __fs64 a)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) if (sbi->byte_order == VXFS_BO_BE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) return be64_to_cpu((__force __be64)a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) return le64_to_cpu((__force __le64)a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) * File modes. File types above 0xf000 are vxfs internal only, they should
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) * not be passed back to higher levels of the system. vxfs file types must
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) * never have one of the regular file type bits set.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) enum vxfs_mode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) VXFS_ISUID = 0x00000800, /* setuid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) VXFS_ISGID = 0x00000400, /* setgid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) VXFS_ISVTX = 0x00000200, /* sticky bit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) VXFS_IREAD = 0x00000100, /* read */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) VXFS_IWRITE = 0x00000080, /* write */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) VXFS_IEXEC = 0x00000040, /* exec */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) VXFS_IFIFO = 0x00001000, /* Named pipe */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) VXFS_IFCHR = 0x00002000, /* Character device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) VXFS_IFDIR = 0x00004000, /* Directory */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) VXFS_IFNAM = 0x00005000, /* Xenix device ?? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) VXFS_IFBLK = 0x00006000, /* Block device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) VXFS_IFREG = 0x00008000, /* Regular file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) VXFS_IFCMP = 0x00009000, /* Compressed file ?!? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) VXFS_IFLNK = 0x0000a000, /* Symlink */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) VXFS_IFSOC = 0x0000c000, /* Socket */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) /* VxFS internal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) VXFS_IFFSH = 0x10000000, /* Fileset header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) VXFS_IFILT = 0x20000000, /* Inode list */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) VXFS_IFIAU = 0x30000000, /* Inode allocation unit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) VXFS_IFCUT = 0x40000000, /* Current usage table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) VXFS_IFATT = 0x50000000, /* Attr. inode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) VXFS_IFLCT = 0x60000000, /* Link count table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) VXFS_IFIAT = 0x70000000, /* Indirect attribute file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) VXFS_IFEMR = 0x80000000, /* Extent map reorg file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) VXFS_IFQUO = 0x90000000, /* BSD quota file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) VXFS_IFPTI = 0xa0000000, /* "Pass through" inode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) VXFS_IFLAB = 0x11000000, /* Device label file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) VXFS_IFOLT = 0x12000000, /* OLT file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) VXFS_IFLOG = 0x13000000, /* Log file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) VXFS_IFEMP = 0x14000000, /* Extent map file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) VXFS_IFEAU = 0x15000000, /* Extent AU file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) VXFS_IFAUS = 0x16000000, /* Extent AU summary file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) VXFS_IFDEV = 0x17000000, /* Device config file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) #define VXFS_TYPE_MASK 0xfffff000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) #define VXFS_IS_TYPE(ip,type) (((ip)->vii_mode & VXFS_TYPE_MASK) == (type))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) #define VXFS_ISFIFO(x) VXFS_IS_TYPE((x),VXFS_IFIFO)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) #define VXFS_ISCHR(x) VXFS_IS_TYPE((x),VXFS_IFCHR)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) #define VXFS_ISDIR(x) VXFS_IS_TYPE((x),VXFS_IFDIR)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) #define VXFS_ISNAM(x) VXFS_IS_TYPE((x),VXFS_IFNAM)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) #define VXFS_ISBLK(x) VXFS_IS_TYPE((x),VXFS_IFBLK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) #define VXFS_ISLNK(x) VXFS_IS_TYPE((x),VXFS_IFLNK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) #define VXFS_ISREG(x) VXFS_IS_TYPE((x),VXFS_IFREG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) #define VXFS_ISCMP(x) VXFS_IS_TYPE((x),VXFS_IFCMP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) #define VXFS_ISSOC(x) VXFS_IS_TYPE((x),VXFS_IFSOC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) #define VXFS_ISFSH(x) VXFS_IS_TYPE((x),VXFS_IFFSH)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) #define VXFS_ISILT(x) VXFS_IS_TYPE((x),VXFS_IFILT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) * Inmode organisation types.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) VXFS_ORG_NONE = 0, /* Inode has *no* format ?!? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) VXFS_ORG_EXT4 = 1, /* Ext4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) VXFS_ORG_IMMED = 2, /* All data stored in inode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) VXFS_ORG_TYPED = 3, /* Typed extents */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) #define VXFS_IS_ORG(ip,org) ((ip)->vii_orgtype == (org))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) #define VXFS_ISNONE(ip) VXFS_IS_ORG((ip), VXFS_ORG_NONE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) #define VXFS_ISEXT4(ip) VXFS_IS_ORG((ip), VXFS_ORG_EXT4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) #define VXFS_ISIMMED(ip) VXFS_IS_ORG((ip), VXFS_ORG_IMMED)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) #define VXFS_ISTYPED(ip) VXFS_IS_ORG((ip), VXFS_ORG_TYPED)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) * Get filesystem private data from VFS superblock.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) #define VXFS_SBI(sbp) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) ((struct vxfs_sb_info *)(sbp)->s_fs_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) #endif /* _VXFS_SUPER_H_ */