0001
0002
0003
0004
0005
0006 #ifndef _VXFS_SUPER_H_
0007 #define _VXFS_SUPER_H_
0008
0009
0010
0011
0012
0013
0014
0015 #include <linux/types.h>
0016
0017
0018
0019
0020 #define VXFS_SUPER_MAGIC 0xa501FCF5
0021
0022
0023
0024
0025 #define VXFS_ROOT_INO 2
0026
0027
0028
0029
0030 #define VXFS_NEFREE 32
0031
0032 enum vxfs_byte_order {
0033 VXFS_BO_LE,
0034 VXFS_BO_BE,
0035 };
0036
0037 typedef __u16 __bitwise __fs16;
0038 typedef __u32 __bitwise __fs32;
0039 typedef __u64 __bitwise __fs64;
0040
0041
0042
0043
0044 struct vxfs_sb {
0045
0046
0047
0048
0049
0050
0051 __fs32 vs_magic;
0052 __fs32 vs_version;
0053 __fs32 vs_ctime;
0054 __fs32 vs_cutime;
0055 __fs32 __unused1;
0056 __fs32 __unused2;
0057 __fs32 vs_old_logstart;
0058 __fs32 vs_old_logend;
0059 __fs32 vs_bsize;
0060 __fs32 vs_size;
0061 __fs32 vs_dsize;
0062 __fs32 vs_old_ninode;
0063 __fs32 vs_old_nau;
0064 __fs32 __unused3;
0065 __fs32 vs_old_defiextsize;
0066 __fs32 vs_old_ilbsize;
0067 __fs32 vs_immedlen;
0068 __fs32 vs_ndaddr;
0069 __fs32 vs_firstau;
0070 __fs32 vs_emap;
0071 __fs32 vs_imap;
0072 __fs32 vs_iextop;
0073 __fs32 vs_istart;
0074 __fs32 vs_bstart;
0075 __fs32 vs_femap;
0076 __fs32 vs_fimap;
0077 __fs32 vs_fiextop;
0078 __fs32 vs_fistart;
0079 __fs32 vs_fbstart;
0080 __fs32 vs_nindir;
0081 __fs32 vs_aulen;
0082 __fs32 vs_auimlen;
0083 __fs32 vs_auemlen;
0084 __fs32 vs_auilen;
0085 __fs32 vs_aupad;
0086 __fs32 vs_aublocks;
0087 __fs32 vs_maxtier;
0088 __fs32 vs_inopb;
0089 __fs32 vs_old_inopau;
0090 __fs32 vs_old_inopilb;
0091 __fs32 vs_old_ndiripau;
0092 __fs32 vs_iaddrlen;
0093 __fs32 vs_bshift;
0094 __fs32 vs_inoshift;
0095 __fs32 vs_bmask;
0096 __fs32 vs_boffmask;
0097 __fs32 vs_old_inomask;
0098 __fs32 vs_checksum;
0099
0100
0101
0102
0103 __fs32 vs_free;
0104 __fs32 vs_ifree;
0105 __fs32 vs_efree[VXFS_NEFREE];
0106 __fs32 vs_flags;
0107 __u8 vs_mod;
0108 __u8 vs_clean;
0109 __fs16 __unused4;
0110 __fs32 vs_firstlogid;
0111 __fs32 vs_wtime;
0112 __fs32 vs_wutime;
0113 __u8 vs_fname[6];
0114 __u8 vs_fpack[6];
0115 __fs32 vs_logversion;
0116 __u32 __unused5;
0117
0118
0119
0120
0121 __fs32 vs_oltext[2];
0122 __fs32 vs_oltsize;
0123 __fs32 vs_iauimlen;
0124 __fs32 vs_iausize;
0125 __fs32 vs_dinosize;
0126 __fs32 vs_old_dniaddr;
0127 __fs32 vs_checksum2;
0128
0129
0130
0131
0132 };
0133
0134
0135
0136
0137
0138 struct vxfs_sb_info {
0139 struct vxfs_sb *vsi_raw;
0140 struct buffer_head *vsi_bp;
0141 struct inode *vsi_fship;
0142 struct inode *vsi_ilist;
0143 struct inode *vsi_stilist;
0144 u_long vsi_iext;
0145 ino_t vsi_fshino;
0146 daddr_t vsi_oltext;
0147 daddr_t vsi_oltsize;
0148 enum vxfs_byte_order byte_order;
0149 };
0150
0151 static inline u16 fs16_to_cpu(struct vxfs_sb_info *sbi, __fs16 a)
0152 {
0153 if (sbi->byte_order == VXFS_BO_BE)
0154 return be16_to_cpu((__force __be16)a);
0155 else
0156 return le16_to_cpu((__force __le16)a);
0157 }
0158
0159 static inline u32 fs32_to_cpu(struct vxfs_sb_info *sbi, __fs32 a)
0160 {
0161 if (sbi->byte_order == VXFS_BO_BE)
0162 return be32_to_cpu((__force __be32)a);
0163 else
0164 return le32_to_cpu((__force __le32)a);
0165 }
0166
0167 static inline u64 fs64_to_cpu(struct vxfs_sb_info *sbi, __fs64 a)
0168 {
0169 if (sbi->byte_order == VXFS_BO_BE)
0170 return be64_to_cpu((__force __be64)a);
0171 else
0172 return le64_to_cpu((__force __le64)a);
0173 }
0174
0175
0176
0177
0178
0179
0180 enum vxfs_mode {
0181 VXFS_ISUID = 0x00000800,
0182 VXFS_ISGID = 0x00000400,
0183 VXFS_ISVTX = 0x00000200,
0184 VXFS_IREAD = 0x00000100,
0185 VXFS_IWRITE = 0x00000080,
0186 VXFS_IEXEC = 0x00000040,
0187
0188 VXFS_IFIFO = 0x00001000,
0189 VXFS_IFCHR = 0x00002000,
0190 VXFS_IFDIR = 0x00004000,
0191 VXFS_IFNAM = 0x00005000,
0192 VXFS_IFBLK = 0x00006000,
0193 VXFS_IFREG = 0x00008000,
0194 VXFS_IFCMP = 0x00009000,
0195 VXFS_IFLNK = 0x0000a000,
0196 VXFS_IFSOC = 0x0000c000,
0197
0198
0199 VXFS_IFFSH = 0x10000000,
0200 VXFS_IFILT = 0x20000000,
0201 VXFS_IFIAU = 0x30000000,
0202 VXFS_IFCUT = 0x40000000,
0203 VXFS_IFATT = 0x50000000,
0204 VXFS_IFLCT = 0x60000000,
0205 VXFS_IFIAT = 0x70000000,
0206 VXFS_IFEMR = 0x80000000,
0207 VXFS_IFQUO = 0x90000000,
0208 VXFS_IFPTI = 0xa0000000,
0209 VXFS_IFLAB = 0x11000000,
0210 VXFS_IFOLT = 0x12000000,
0211 VXFS_IFLOG = 0x13000000,
0212 VXFS_IFEMP = 0x14000000,
0213 VXFS_IFEAU = 0x15000000,
0214 VXFS_IFAUS = 0x16000000,
0215 VXFS_IFDEV = 0x17000000,
0216
0217 };
0218
0219 #define VXFS_TYPE_MASK 0xfffff000
0220
0221 #define VXFS_IS_TYPE(ip,type) (((ip)->vii_mode & VXFS_TYPE_MASK) == (type))
0222 #define VXFS_ISFIFO(x) VXFS_IS_TYPE((x),VXFS_IFIFO)
0223 #define VXFS_ISCHR(x) VXFS_IS_TYPE((x),VXFS_IFCHR)
0224 #define VXFS_ISDIR(x) VXFS_IS_TYPE((x),VXFS_IFDIR)
0225 #define VXFS_ISNAM(x) VXFS_IS_TYPE((x),VXFS_IFNAM)
0226 #define VXFS_ISBLK(x) VXFS_IS_TYPE((x),VXFS_IFBLK)
0227 #define VXFS_ISLNK(x) VXFS_IS_TYPE((x),VXFS_IFLNK)
0228 #define VXFS_ISREG(x) VXFS_IS_TYPE((x),VXFS_IFREG)
0229 #define VXFS_ISCMP(x) VXFS_IS_TYPE((x),VXFS_IFCMP)
0230 #define VXFS_ISSOC(x) VXFS_IS_TYPE((x),VXFS_IFSOC)
0231
0232 #define VXFS_ISFSH(x) VXFS_IS_TYPE((x),VXFS_IFFSH)
0233 #define VXFS_ISILT(x) VXFS_IS_TYPE((x),VXFS_IFILT)
0234
0235
0236
0237
0238 enum {
0239 VXFS_ORG_NONE = 0,
0240 VXFS_ORG_EXT4 = 1,
0241 VXFS_ORG_IMMED = 2,
0242 VXFS_ORG_TYPED = 3,
0243 };
0244
0245 #define VXFS_IS_ORG(ip,org) ((ip)->vii_orgtype == (org))
0246 #define VXFS_ISNONE(ip) VXFS_IS_ORG((ip), VXFS_ORG_NONE)
0247 #define VXFS_ISEXT4(ip) VXFS_IS_ORG((ip), VXFS_ORG_EXT4)
0248 #define VXFS_ISIMMED(ip) VXFS_IS_ORG((ip), VXFS_ORG_IMMED)
0249 #define VXFS_ISTYPED(ip) VXFS_IS_ORG((ip), VXFS_ORG_TYPED)
0250
0251
0252
0253
0254 #define VXFS_SBI(sbp) \
0255 ((struct vxfs_sb_info *)(sbp)->s_fs_info)
0256
0257 #endif