root/fs/xfs/libxfs/xfs_format.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. xfs_sb_good_v4_features
  2. xfs_sb_good_version
  3. xfs_sb_version_hasrealtime
  4. xfs_sb_has_mismatched_features2
  5. xfs_sb_version_hasattr
  6. xfs_sb_version_addattr
  7. xfs_sb_version_hasquota
  8. xfs_sb_version_addquota
  9. xfs_sb_version_hasalign
  10. xfs_sb_version_hasdalign
  11. xfs_sb_version_haslogv2
  12. xfs_sb_version_hassector
  13. xfs_sb_version_hasasciici
  14. xfs_sb_version_hasmorebits
  15. xfs_sb_version_haslazysbcount
  16. xfs_sb_version_hasattr2
  17. xfs_sb_version_addattr2
  18. xfs_sb_version_removeattr2
  19. xfs_sb_version_hasprojid32bit
  20. xfs_sb_version_addprojid32bit
  21. xfs_sb_has_compat_feature
  22. xfs_sb_has_ro_compat_feature
  23. xfs_sb_has_incompat_feature
  24. xfs_sb_has_incompat_log_feature
  25. xfs_sb_version_hascrc
  26. xfs_sb_version_has_pquotino
  27. xfs_sb_version_hasftype
  28. xfs_sb_version_hasfinobt
  29. xfs_sb_version_hassparseinodes
  30. xfs_sb_version_hasmetauuid
  31. xfs_sb_version_hasrmapbt
  32. xfs_sb_version_hasreflink
  33. xfs_is_quota_inode
  34. xfs_dinode_size
  35. xfs_dinode_get_rdev
  36. xfs_dinode_put_rdev
  37. xfs_inobt_maskn
  38. xfs_inobt_issparse
  39. isnullstartblock
  40. nullstartblock
  41. startblockval

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * Copyright (c) 2000-2005 Silicon Graphics, Inc.
   4  * All Rights Reserved.
   5  */
   6 #ifndef __XFS_FORMAT_H__
   7 #define __XFS_FORMAT_H__
   8 
   9 /*
  10  * XFS On Disk Format Definitions
  11  *
  12  * This header file defines all the on-disk format definitions for 
  13  * general XFS objects. Directory and attribute related objects are defined in
  14  * xfs_da_format.h, which log and log item formats are defined in
  15  * xfs_log_format.h. Everything else goes here.
  16  */
  17 
  18 struct xfs_mount;
  19 struct xfs_trans;
  20 struct xfs_inode;
  21 struct xfs_buf;
  22 struct xfs_ifork;
  23 
  24 /*
  25  * Super block
  26  * Fits into a sector-sized buffer at address 0 of each allocation group.
  27  * Only the first of these is ever updated except during growfs.
  28  */
  29 #define XFS_SB_MAGIC            0x58465342      /* 'XFSB' */
  30 #define XFS_SB_VERSION_1        1               /* 5.3, 6.0.1, 6.1 */
  31 #define XFS_SB_VERSION_2        2               /* 6.2 - attributes */
  32 #define XFS_SB_VERSION_3        3               /* 6.2 - new inode version */
  33 #define XFS_SB_VERSION_4        4               /* 6.2+ - bitmask version */
  34 #define XFS_SB_VERSION_5        5               /* CRC enabled filesystem */
  35 #define XFS_SB_VERSION_NUMBITS          0x000f
  36 #define XFS_SB_VERSION_ALLFBITS         0xfff0
  37 #define XFS_SB_VERSION_ATTRBIT          0x0010
  38 #define XFS_SB_VERSION_NLINKBIT         0x0020
  39 #define XFS_SB_VERSION_QUOTABIT         0x0040
  40 #define XFS_SB_VERSION_ALIGNBIT         0x0080
  41 #define XFS_SB_VERSION_DALIGNBIT        0x0100
  42 #define XFS_SB_VERSION_SHAREDBIT        0x0200
  43 #define XFS_SB_VERSION_LOGV2BIT         0x0400
  44 #define XFS_SB_VERSION_SECTORBIT        0x0800
  45 #define XFS_SB_VERSION_EXTFLGBIT        0x1000
  46 #define XFS_SB_VERSION_DIRV2BIT         0x2000
  47 #define XFS_SB_VERSION_BORGBIT          0x4000  /* ASCII only case-insens. */
  48 #define XFS_SB_VERSION_MOREBITSBIT      0x8000
  49 
  50 /*
  51  * The size of a single extended attribute on disk is limited by
  52  * the size of index values within the attribute entries themselves.
  53  * These are be16 fields, so we can only support attribute data
  54  * sizes up to 2^16 bytes in length.
  55  */
  56 #define XFS_XATTR_SIZE_MAX (1 << 16)
  57 
  58 /*
  59  * Supported feature bit list is just all bits in the versionnum field because
  60  * we've used them all up and understand them all. Except, of course, for the
  61  * shared superblock bit, which nobody knows what it does and so is unsupported.
  62  */
  63 #define XFS_SB_VERSION_OKBITS           \
  64         ((XFS_SB_VERSION_NUMBITS | XFS_SB_VERSION_ALLFBITS) & \
  65                 ~XFS_SB_VERSION_SHAREDBIT)
  66 
  67 /*
  68  * There are two words to hold XFS "feature" bits: the original
  69  * word, sb_versionnum, and sb_features2.  Whenever a bit is set in
  70  * sb_features2, the feature bit XFS_SB_VERSION_MOREBITSBIT must be set.
  71  *
  72  * These defines represent bits in sb_features2.
  73  */
  74 #define XFS_SB_VERSION2_RESERVED1BIT    0x00000001
  75 #define XFS_SB_VERSION2_LAZYSBCOUNTBIT  0x00000002      /* Superblk counters */
  76 #define XFS_SB_VERSION2_RESERVED4BIT    0x00000004
  77 #define XFS_SB_VERSION2_ATTR2BIT        0x00000008      /* Inline attr rework */
  78 #define XFS_SB_VERSION2_PARENTBIT       0x00000010      /* parent pointers */
  79 #define XFS_SB_VERSION2_PROJID32BIT     0x00000080      /* 32 bit project id */
  80 #define XFS_SB_VERSION2_CRCBIT          0x00000100      /* metadata CRCs */
  81 #define XFS_SB_VERSION2_FTYPE           0x00000200      /* inode type in dir */
  82 
  83 #define XFS_SB_VERSION2_OKBITS          \
  84         (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \
  85          XFS_SB_VERSION2_ATTR2BIT       | \
  86          XFS_SB_VERSION2_PROJID32BIT    | \
  87          XFS_SB_VERSION2_FTYPE)
  88 
  89 /* Maximum size of the xfs filesystem label, no terminating NULL */
  90 #define XFSLABEL_MAX                    12
  91 
  92 /*
  93  * Superblock - in core version.  Must match the ondisk version below.
  94  * Must be padded to 64 bit alignment.
  95  */
  96 typedef struct xfs_sb {
  97         uint32_t        sb_magicnum;    /* magic number == XFS_SB_MAGIC */
  98         uint32_t        sb_blocksize;   /* logical block size, bytes */
  99         xfs_rfsblock_t  sb_dblocks;     /* number of data blocks */
 100         xfs_rfsblock_t  sb_rblocks;     /* number of realtime blocks */
 101         xfs_rtblock_t   sb_rextents;    /* number of realtime extents */
 102         uuid_t          sb_uuid;        /* user-visible file system unique id */
 103         xfs_fsblock_t   sb_logstart;    /* starting block of log if internal */
 104         xfs_ino_t       sb_rootino;     /* root inode number */
 105         xfs_ino_t       sb_rbmino;      /* bitmap inode for realtime extents */
 106         xfs_ino_t       sb_rsumino;     /* summary inode for rt bitmap */
 107         xfs_agblock_t   sb_rextsize;    /* realtime extent size, blocks */
 108         xfs_agblock_t   sb_agblocks;    /* size of an allocation group */
 109         xfs_agnumber_t  sb_agcount;     /* number of allocation groups */
 110         xfs_extlen_t    sb_rbmblocks;   /* number of rt bitmap blocks */
 111         xfs_extlen_t    sb_logblocks;   /* number of log blocks */
 112         uint16_t        sb_versionnum;  /* header version == XFS_SB_VERSION */
 113         uint16_t        sb_sectsize;    /* volume sector size, bytes */
 114         uint16_t        sb_inodesize;   /* inode size, bytes */
 115         uint16_t        sb_inopblock;   /* inodes per block */
 116         char            sb_fname[XFSLABEL_MAX]; /* file system name */
 117         uint8_t         sb_blocklog;    /* log2 of sb_blocksize */
 118         uint8_t         sb_sectlog;     /* log2 of sb_sectsize */
 119         uint8_t         sb_inodelog;    /* log2 of sb_inodesize */
 120         uint8_t         sb_inopblog;    /* log2 of sb_inopblock */
 121         uint8_t         sb_agblklog;    /* log2 of sb_agblocks (rounded up) */
 122         uint8_t         sb_rextslog;    /* log2 of sb_rextents */
 123         uint8_t         sb_inprogress;  /* mkfs is in progress, don't mount */
 124         uint8_t         sb_imax_pct;    /* max % of fs for inode space */
 125                                         /* statistics */
 126         /*
 127          * These fields must remain contiguous.  If you really
 128          * want to change their layout, make sure you fix the
 129          * code in xfs_trans_apply_sb_deltas().
 130          */
 131         uint64_t        sb_icount;      /* allocated inodes */
 132         uint64_t        sb_ifree;       /* free inodes */
 133         uint64_t        sb_fdblocks;    /* free data blocks */
 134         uint64_t        sb_frextents;   /* free realtime extents */
 135         /*
 136          * End contiguous fields.
 137          */
 138         xfs_ino_t       sb_uquotino;    /* user quota inode */
 139         xfs_ino_t       sb_gquotino;    /* group quota inode */
 140         uint16_t        sb_qflags;      /* quota flags */
 141         uint8_t         sb_flags;       /* misc. flags */
 142         uint8_t         sb_shared_vn;   /* shared version number */
 143         xfs_extlen_t    sb_inoalignmt;  /* inode chunk alignment, fsblocks */
 144         uint32_t        sb_unit;        /* stripe or raid unit */
 145         uint32_t        sb_width;       /* stripe or raid width */
 146         uint8_t         sb_dirblklog;   /* log2 of dir block size (fsbs) */
 147         uint8_t         sb_logsectlog;  /* log2 of the log sector size */
 148         uint16_t        sb_logsectsize; /* sector size for the log, bytes */
 149         uint32_t        sb_logsunit;    /* stripe unit size for the log */
 150         uint32_t        sb_features2;   /* additional feature bits */
 151 
 152         /*
 153          * bad features2 field as a result of failing to pad the sb structure to
 154          * 64 bits. Some machines will be using this field for features2 bits.
 155          * Easiest just to mark it bad and not use it for anything else.
 156          *
 157          * This is not kept up to date in memory; it is always overwritten by
 158          * the value in sb_features2 when formatting the incore superblock to
 159          * the disk buffer.
 160          */
 161         uint32_t        sb_bad_features2;
 162 
 163         /* version 5 superblock fields start here */
 164 
 165         /* feature masks */
 166         uint32_t        sb_features_compat;
 167         uint32_t        sb_features_ro_compat;
 168         uint32_t        sb_features_incompat;
 169         uint32_t        sb_features_log_incompat;
 170 
 171         uint32_t        sb_crc;         /* superblock crc */
 172         xfs_extlen_t    sb_spino_align; /* sparse inode chunk alignment */
 173 
 174         xfs_ino_t       sb_pquotino;    /* project quota inode */
 175         xfs_lsn_t       sb_lsn;         /* last write sequence */
 176         uuid_t          sb_meta_uuid;   /* metadata file system unique id */
 177 
 178         /* must be padded to 64 bit alignment */
 179 } xfs_sb_t;
 180 
 181 #define XFS_SB_CRC_OFF          offsetof(struct xfs_sb, sb_crc)
 182 
 183 /*
 184  * Superblock - on disk version.  Must match the in core version above.
 185  * Must be padded to 64 bit alignment.
 186  */
 187 typedef struct xfs_dsb {
 188         __be32          sb_magicnum;    /* magic number == XFS_SB_MAGIC */
 189         __be32          sb_blocksize;   /* logical block size, bytes */
 190         __be64          sb_dblocks;     /* number of data blocks */
 191         __be64          sb_rblocks;     /* number of realtime blocks */
 192         __be64          sb_rextents;    /* number of realtime extents */
 193         uuid_t          sb_uuid;        /* user-visible file system unique id */
 194         __be64          sb_logstart;    /* starting block of log if internal */
 195         __be64          sb_rootino;     /* root inode number */
 196         __be64          sb_rbmino;      /* bitmap inode for realtime extents */
 197         __be64          sb_rsumino;     /* summary inode for rt bitmap */
 198         __be32          sb_rextsize;    /* realtime extent size, blocks */
 199         __be32          sb_agblocks;    /* size of an allocation group */
 200         __be32          sb_agcount;     /* number of allocation groups */
 201         __be32          sb_rbmblocks;   /* number of rt bitmap blocks */
 202         __be32          sb_logblocks;   /* number of log blocks */
 203         __be16          sb_versionnum;  /* header version == XFS_SB_VERSION */
 204         __be16          sb_sectsize;    /* volume sector size, bytes */
 205         __be16          sb_inodesize;   /* inode size, bytes */
 206         __be16          sb_inopblock;   /* inodes per block */
 207         char            sb_fname[XFSLABEL_MAX]; /* file system name */
 208         __u8            sb_blocklog;    /* log2 of sb_blocksize */
 209         __u8            sb_sectlog;     /* log2 of sb_sectsize */
 210         __u8            sb_inodelog;    /* log2 of sb_inodesize */
 211         __u8            sb_inopblog;    /* log2 of sb_inopblock */
 212         __u8            sb_agblklog;    /* log2 of sb_agblocks (rounded up) */
 213         __u8            sb_rextslog;    /* log2 of sb_rextents */
 214         __u8            sb_inprogress;  /* mkfs is in progress, don't mount */
 215         __u8            sb_imax_pct;    /* max % of fs for inode space */
 216                                         /* statistics */
 217         /*
 218          * These fields must remain contiguous.  If you really
 219          * want to change their layout, make sure you fix the
 220          * code in xfs_trans_apply_sb_deltas().
 221          */
 222         __be64          sb_icount;      /* allocated inodes */
 223         __be64          sb_ifree;       /* free inodes */
 224         __be64          sb_fdblocks;    /* free data blocks */
 225         __be64          sb_frextents;   /* free realtime extents */
 226         /*
 227          * End contiguous fields.
 228          */
 229         __be64          sb_uquotino;    /* user quota inode */
 230         __be64          sb_gquotino;    /* group quota inode */
 231         __be16          sb_qflags;      /* quota flags */
 232         __u8            sb_flags;       /* misc. flags */
 233         __u8            sb_shared_vn;   /* shared version number */
 234         __be32          sb_inoalignmt;  /* inode chunk alignment, fsblocks */
 235         __be32          sb_unit;        /* stripe or raid unit */
 236         __be32          sb_width;       /* stripe or raid width */
 237         __u8            sb_dirblklog;   /* log2 of dir block size (fsbs) */
 238         __u8            sb_logsectlog;  /* log2 of the log sector size */
 239         __be16          sb_logsectsize; /* sector size for the log, bytes */
 240         __be32          sb_logsunit;    /* stripe unit size for the log */
 241         __be32          sb_features2;   /* additional feature bits */
 242         /*
 243          * bad features2 field as a result of failing to pad the sb
 244          * structure to 64 bits. Some machines will be using this field
 245          * for features2 bits. Easiest just to mark it bad and not use
 246          * it for anything else.
 247          */
 248         __be32          sb_bad_features2;
 249 
 250         /* version 5 superblock fields start here */
 251 
 252         /* feature masks */
 253         __be32          sb_features_compat;
 254         __be32          sb_features_ro_compat;
 255         __be32          sb_features_incompat;
 256         __be32          sb_features_log_incompat;
 257 
 258         __le32          sb_crc;         /* superblock crc */
 259         __be32          sb_spino_align; /* sparse inode chunk alignment */
 260 
 261         __be64          sb_pquotino;    /* project quota inode */
 262         __be64          sb_lsn;         /* last write sequence */
 263         uuid_t          sb_meta_uuid;   /* metadata file system unique id */
 264 
 265         /* must be padded to 64 bit alignment */
 266 } xfs_dsb_t;
 267 
 268 
 269 /*
 270  * Misc. Flags - warning - these will be cleared by xfs_repair unless
 271  * a feature bit is set when the flag is used.
 272  */
 273 #define XFS_SBF_NOFLAGS         0x00    /* no flags set */
 274 #define XFS_SBF_READONLY        0x01    /* only read-only mounts allowed */
 275 
 276 /*
 277  * define max. shared version we can interoperate with
 278  */
 279 #define XFS_SB_MAX_SHARED_VN    0
 280 
 281 #define XFS_SB_VERSION_NUM(sbp) ((sbp)->sb_versionnum & XFS_SB_VERSION_NUMBITS)
 282 
 283 /*
 284  * The first XFS version we support is a v4 superblock with V2 directories.
 285  */
 286 static inline bool xfs_sb_good_v4_features(struct xfs_sb *sbp)
 287 {
 288         if (!(sbp->sb_versionnum & XFS_SB_VERSION_DIRV2BIT))
 289                 return false;
 290         if (!(sbp->sb_versionnum & XFS_SB_VERSION_EXTFLGBIT))
 291                 return false;
 292 
 293         /* check for unknown features in the fs */
 294         if ((sbp->sb_versionnum & ~XFS_SB_VERSION_OKBITS) ||
 295             ((sbp->sb_versionnum & XFS_SB_VERSION_MOREBITSBIT) &&
 296              (sbp->sb_features2 & ~XFS_SB_VERSION2_OKBITS)))
 297                 return false;
 298 
 299         return true;
 300 }
 301 
 302 static inline bool xfs_sb_good_version(struct xfs_sb *sbp)
 303 {
 304         if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5)
 305                 return true;
 306         if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4)
 307                 return xfs_sb_good_v4_features(sbp);
 308         return false;
 309 }
 310 
 311 static inline bool xfs_sb_version_hasrealtime(struct xfs_sb *sbp)
 312 {
 313         return sbp->sb_rblocks > 0;
 314 }
 315 
 316 /*
 317  * Detect a mismatched features2 field.  Older kernels read/wrote
 318  * this into the wrong slot, so to be safe we keep them in sync.
 319  */
 320 static inline bool xfs_sb_has_mismatched_features2(struct xfs_sb *sbp)
 321 {
 322         return sbp->sb_bad_features2 != sbp->sb_features2;
 323 }
 324 
 325 static inline bool xfs_sb_version_hasattr(struct xfs_sb *sbp)
 326 {
 327         return (sbp->sb_versionnum & XFS_SB_VERSION_ATTRBIT);
 328 }
 329 
 330 static inline void xfs_sb_version_addattr(struct xfs_sb *sbp)
 331 {
 332         sbp->sb_versionnum |= XFS_SB_VERSION_ATTRBIT;
 333 }
 334 
 335 static inline bool xfs_sb_version_hasquota(struct xfs_sb *sbp)
 336 {
 337         return (sbp->sb_versionnum & XFS_SB_VERSION_QUOTABIT);
 338 }
 339 
 340 static inline void xfs_sb_version_addquota(struct xfs_sb *sbp)
 341 {
 342         sbp->sb_versionnum |= XFS_SB_VERSION_QUOTABIT;
 343 }
 344 
 345 static inline bool xfs_sb_version_hasalign(struct xfs_sb *sbp)
 346 {
 347         return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 ||
 348                 (sbp->sb_versionnum & XFS_SB_VERSION_ALIGNBIT));
 349 }
 350 
 351 static inline bool xfs_sb_version_hasdalign(struct xfs_sb *sbp)
 352 {
 353         return (sbp->sb_versionnum & XFS_SB_VERSION_DALIGNBIT);
 354 }
 355 
 356 static inline bool xfs_sb_version_haslogv2(struct xfs_sb *sbp)
 357 {
 358         return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 ||
 359                (sbp->sb_versionnum & XFS_SB_VERSION_LOGV2BIT);
 360 }
 361 
 362 static inline bool xfs_sb_version_hassector(struct xfs_sb *sbp)
 363 {
 364         return (sbp->sb_versionnum & XFS_SB_VERSION_SECTORBIT);
 365 }
 366 
 367 static inline bool xfs_sb_version_hasasciici(struct xfs_sb *sbp)
 368 {
 369         return (sbp->sb_versionnum & XFS_SB_VERSION_BORGBIT);
 370 }
 371 
 372 static inline bool xfs_sb_version_hasmorebits(struct xfs_sb *sbp)
 373 {
 374         return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 ||
 375                (sbp->sb_versionnum & XFS_SB_VERSION_MOREBITSBIT);
 376 }
 377 
 378 /*
 379  * sb_features2 bit version macros.
 380  */
 381 static inline bool xfs_sb_version_haslazysbcount(struct xfs_sb *sbp)
 382 {
 383         return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) ||
 384                (xfs_sb_version_hasmorebits(sbp) &&
 385                 (sbp->sb_features2 & XFS_SB_VERSION2_LAZYSBCOUNTBIT));
 386 }
 387 
 388 static inline bool xfs_sb_version_hasattr2(struct xfs_sb *sbp)
 389 {
 390         return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) ||
 391                (xfs_sb_version_hasmorebits(sbp) &&
 392                 (sbp->sb_features2 & XFS_SB_VERSION2_ATTR2BIT));
 393 }
 394 
 395 static inline void xfs_sb_version_addattr2(struct xfs_sb *sbp)
 396 {
 397         sbp->sb_versionnum |= XFS_SB_VERSION_MOREBITSBIT;
 398         sbp->sb_features2 |= XFS_SB_VERSION2_ATTR2BIT;
 399 }
 400 
 401 static inline void xfs_sb_version_removeattr2(struct xfs_sb *sbp)
 402 {
 403         sbp->sb_features2 &= ~XFS_SB_VERSION2_ATTR2BIT;
 404         if (!sbp->sb_features2)
 405                 sbp->sb_versionnum &= ~XFS_SB_VERSION_MOREBITSBIT;
 406 }
 407 
 408 static inline bool xfs_sb_version_hasprojid32bit(struct xfs_sb *sbp)
 409 {
 410         return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) ||
 411                (xfs_sb_version_hasmorebits(sbp) &&
 412                 (sbp->sb_features2 & XFS_SB_VERSION2_PROJID32BIT));
 413 }
 414 
 415 static inline void xfs_sb_version_addprojid32bit(struct xfs_sb *sbp)
 416 {
 417         sbp->sb_versionnum |= XFS_SB_VERSION_MOREBITSBIT;
 418         sbp->sb_features2 |= XFS_SB_VERSION2_PROJID32BIT;
 419 }
 420 
 421 /*
 422  * Extended v5 superblock feature masks. These are to be used for new v5
 423  * superblock features only.
 424  *
 425  * Compat features are new features that old kernels will not notice or affect
 426  * and so can mount read-write without issues.
 427  *
 428  * RO-Compat (read only) are features that old kernels can read but will break
 429  * if they write. Hence only read-only mounts of such filesystems are allowed on
 430  * kernels that don't support the feature bit.
 431  *
 432  * InCompat features are features which old kernels will not understand and so
 433  * must not mount.
 434  *
 435  * Log-InCompat features are for changes to log formats or new transactions that
 436  * can't be replayed on older kernels. The fields are set when the filesystem is
 437  * mounted, and a clean unmount clears the fields.
 438  */
 439 #define XFS_SB_FEAT_COMPAT_ALL 0
 440 #define XFS_SB_FEAT_COMPAT_UNKNOWN      ~XFS_SB_FEAT_COMPAT_ALL
 441 static inline bool
 442 xfs_sb_has_compat_feature(
 443         struct xfs_sb   *sbp,
 444         uint32_t        feature)
 445 {
 446         return (sbp->sb_features_compat & feature) != 0;
 447 }
 448 
 449 #define XFS_SB_FEAT_RO_COMPAT_FINOBT   (1 << 0)         /* free inode btree */
 450 #define XFS_SB_FEAT_RO_COMPAT_RMAPBT   (1 << 1)         /* reverse map btree */
 451 #define XFS_SB_FEAT_RO_COMPAT_REFLINK  (1 << 2)         /* reflinked files */
 452 #define XFS_SB_FEAT_RO_COMPAT_ALL \
 453                 (XFS_SB_FEAT_RO_COMPAT_FINOBT | \
 454                  XFS_SB_FEAT_RO_COMPAT_RMAPBT | \
 455                  XFS_SB_FEAT_RO_COMPAT_REFLINK)
 456 #define XFS_SB_FEAT_RO_COMPAT_UNKNOWN   ~XFS_SB_FEAT_RO_COMPAT_ALL
 457 static inline bool
 458 xfs_sb_has_ro_compat_feature(
 459         struct xfs_sb   *sbp,
 460         uint32_t        feature)
 461 {
 462         return (sbp->sb_features_ro_compat & feature) != 0;
 463 }
 464 
 465 #define XFS_SB_FEAT_INCOMPAT_FTYPE      (1 << 0)        /* filetype in dirent */
 466 #define XFS_SB_FEAT_INCOMPAT_SPINODES   (1 << 1)        /* sparse inode chunks */
 467 #define XFS_SB_FEAT_INCOMPAT_META_UUID  (1 << 2)        /* metadata UUID */
 468 #define XFS_SB_FEAT_INCOMPAT_ALL \
 469                 (XFS_SB_FEAT_INCOMPAT_FTYPE|    \
 470                  XFS_SB_FEAT_INCOMPAT_SPINODES| \
 471                  XFS_SB_FEAT_INCOMPAT_META_UUID)
 472 
 473 #define XFS_SB_FEAT_INCOMPAT_UNKNOWN    ~XFS_SB_FEAT_INCOMPAT_ALL
 474 static inline bool
 475 xfs_sb_has_incompat_feature(
 476         struct xfs_sb   *sbp,
 477         uint32_t        feature)
 478 {
 479         return (sbp->sb_features_incompat & feature) != 0;
 480 }
 481 
 482 #define XFS_SB_FEAT_INCOMPAT_LOG_ALL 0
 483 #define XFS_SB_FEAT_INCOMPAT_LOG_UNKNOWN        ~XFS_SB_FEAT_INCOMPAT_LOG_ALL
 484 static inline bool
 485 xfs_sb_has_incompat_log_feature(
 486         struct xfs_sb   *sbp,
 487         uint32_t        feature)
 488 {
 489         return (sbp->sb_features_log_incompat & feature) != 0;
 490 }
 491 
 492 /*
 493  * V5 superblock specific feature checks
 494  */
 495 static inline bool xfs_sb_version_hascrc(struct xfs_sb *sbp)
 496 {
 497         return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5;
 498 }
 499 
 500 static inline bool xfs_sb_version_has_pquotino(struct xfs_sb *sbp)
 501 {
 502         return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5;
 503 }
 504 
 505 static inline int xfs_sb_version_hasftype(struct xfs_sb *sbp)
 506 {
 507         return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 &&
 508                 xfs_sb_has_incompat_feature(sbp, XFS_SB_FEAT_INCOMPAT_FTYPE)) ||
 509                (xfs_sb_version_hasmorebits(sbp) &&
 510                  (sbp->sb_features2 & XFS_SB_VERSION2_FTYPE));
 511 }
 512 
 513 static inline bool xfs_sb_version_hasfinobt(xfs_sb_t *sbp)
 514 {
 515         return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) &&
 516                 (sbp->sb_features_ro_compat & XFS_SB_FEAT_RO_COMPAT_FINOBT);
 517 }
 518 
 519 static inline bool xfs_sb_version_hassparseinodes(struct xfs_sb *sbp)
 520 {
 521         return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 &&
 522                 xfs_sb_has_incompat_feature(sbp, XFS_SB_FEAT_INCOMPAT_SPINODES);
 523 }
 524 
 525 /*
 526  * XFS_SB_FEAT_INCOMPAT_META_UUID indicates that the metadata UUID
 527  * is stored separately from the user-visible UUID; this allows the
 528  * user-visible UUID to be changed on V5 filesystems which have a
 529  * filesystem UUID stamped into every piece of metadata.
 530  */
 531 static inline bool xfs_sb_version_hasmetauuid(struct xfs_sb *sbp)
 532 {
 533         return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) &&
 534                 (sbp->sb_features_incompat & XFS_SB_FEAT_INCOMPAT_META_UUID);
 535 }
 536 
 537 static inline bool xfs_sb_version_hasrmapbt(struct xfs_sb *sbp)
 538 {
 539         return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) &&
 540                 (sbp->sb_features_ro_compat & XFS_SB_FEAT_RO_COMPAT_RMAPBT);
 541 }
 542 
 543 static inline bool xfs_sb_version_hasreflink(struct xfs_sb *sbp)
 544 {
 545         return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 &&
 546                 (sbp->sb_features_ro_compat & XFS_SB_FEAT_RO_COMPAT_REFLINK);
 547 }
 548 
 549 /*
 550  * end of superblock version macros
 551  */
 552 
 553 static inline bool
 554 xfs_is_quota_inode(struct xfs_sb *sbp, xfs_ino_t ino)
 555 {
 556         return (ino == sbp->sb_uquotino ||
 557                 ino == sbp->sb_gquotino ||
 558                 ino == sbp->sb_pquotino);
 559 }
 560 
 561 #define XFS_SB_DADDR            ((xfs_daddr_t)0) /* daddr in filesystem/ag */
 562 #define XFS_SB_BLOCK(mp)        XFS_HDR_BLOCK(mp, XFS_SB_DADDR)
 563 #define XFS_BUF_TO_SBP(bp)      ((xfs_dsb_t *)((bp)->b_addr))
 564 
 565 #define XFS_HDR_BLOCK(mp,d)     ((xfs_agblock_t)XFS_BB_TO_FSBT(mp,d))
 566 #define XFS_DADDR_TO_FSB(mp,d)  XFS_AGB_TO_FSB(mp, \
 567                         xfs_daddr_to_agno(mp,d), xfs_daddr_to_agbno(mp,d))
 568 #define XFS_FSB_TO_DADDR(mp,fsbno)      XFS_AGB_TO_DADDR(mp, \
 569                         XFS_FSB_TO_AGNO(mp,fsbno), XFS_FSB_TO_AGBNO(mp,fsbno))
 570 
 571 /*
 572  * File system sector to basic block conversions.
 573  */
 574 #define XFS_FSS_TO_BB(mp,sec)   ((sec) << (mp)->m_sectbb_log)
 575 
 576 /*
 577  * File system block to basic block conversions.
 578  */
 579 #define XFS_FSB_TO_BB(mp,fsbno) ((fsbno) << (mp)->m_blkbb_log)
 580 #define XFS_BB_TO_FSB(mp,bb)    \
 581         (((bb) + (XFS_FSB_TO_BB(mp,1) - 1)) >> (mp)->m_blkbb_log)
 582 #define XFS_BB_TO_FSBT(mp,bb)   ((bb) >> (mp)->m_blkbb_log)
 583 
 584 /*
 585  * File system block to byte conversions.
 586  */
 587 #define XFS_FSB_TO_B(mp,fsbno)  ((xfs_fsize_t)(fsbno) << (mp)->m_sb.sb_blocklog)
 588 #define XFS_B_TO_FSB(mp,b)      \
 589         ((((uint64_t)(b)) + (mp)->m_blockmask) >> (mp)->m_sb.sb_blocklog)
 590 #define XFS_B_TO_FSBT(mp,b)     (((uint64_t)(b)) >> (mp)->m_sb.sb_blocklog)
 591 #define XFS_B_FSB_OFFSET(mp,b)  ((b) & (mp)->m_blockmask)
 592 
 593 /*
 594  * Allocation group header
 595  *
 596  * This is divided into three structures, placed in sequential 512-byte
 597  * buffers after a copy of the superblock (also in a 512-byte buffer).
 598  */
 599 #define XFS_AGF_MAGIC   0x58414746      /* 'XAGF' */
 600 #define XFS_AGI_MAGIC   0x58414749      /* 'XAGI' */
 601 #define XFS_AGFL_MAGIC  0x5841464c      /* 'XAFL' */
 602 #define XFS_AGF_VERSION 1
 603 #define XFS_AGI_VERSION 1
 604 
 605 #define XFS_AGF_GOOD_VERSION(v) ((v) == XFS_AGF_VERSION)
 606 #define XFS_AGI_GOOD_VERSION(v) ((v) == XFS_AGI_VERSION)
 607 
 608 /*
 609  * Btree number 0 is bno, 1 is cnt, 2 is rmap. This value gives the size of the
 610  * arrays below.
 611  */
 612 #define XFS_BTNUM_AGF   ((int)XFS_BTNUM_RMAPi + 1)
 613 
 614 /*
 615  * The second word of agf_levels in the first a.g. overlaps the EFS
 616  * superblock's magic number.  Since the magic numbers valid for EFS
 617  * are > 64k, our value cannot be confused for an EFS superblock's.
 618  */
 619 
 620 typedef struct xfs_agf {
 621         /*
 622          * Common allocation group header information
 623          */
 624         __be32          agf_magicnum;   /* magic number == XFS_AGF_MAGIC */
 625         __be32          agf_versionnum; /* header version == XFS_AGF_VERSION */
 626         __be32          agf_seqno;      /* sequence # starting from 0 */
 627         __be32          agf_length;     /* size in blocks of a.g. */
 628         /*
 629          * Freespace and rmap information
 630          */
 631         __be32          agf_roots[XFS_BTNUM_AGF];       /* root blocks */
 632         __be32          agf_levels[XFS_BTNUM_AGF];      /* btree levels */
 633 
 634         __be32          agf_flfirst;    /* first freelist block's index */
 635         __be32          agf_fllast;     /* last freelist block's index */
 636         __be32          agf_flcount;    /* count of blocks in freelist */
 637         __be32          agf_freeblks;   /* total free blocks */
 638 
 639         __be32          agf_longest;    /* longest free space */
 640         __be32          agf_btreeblks;  /* # of blocks held in AGF btrees */
 641         uuid_t          agf_uuid;       /* uuid of filesystem */
 642 
 643         __be32          agf_rmap_blocks;        /* rmapbt blocks used */
 644         __be32          agf_refcount_blocks;    /* refcountbt blocks used */
 645 
 646         __be32          agf_refcount_root;      /* refcount tree root block */
 647         __be32          agf_refcount_level;     /* refcount btree levels */
 648 
 649         /*
 650          * reserve some contiguous space for future logged fields before we add
 651          * the unlogged fields. This makes the range logging via flags and
 652          * structure offsets much simpler.
 653          */
 654         __be64          agf_spare64[14];
 655 
 656         /* unlogged fields, written during buffer writeback. */
 657         __be64          agf_lsn;        /* last write sequence */
 658         __be32          agf_crc;        /* crc of agf sector */
 659         __be32          agf_spare2;
 660 
 661         /* structure must be padded to 64 bit alignment */
 662 } xfs_agf_t;
 663 
 664 #define XFS_AGF_CRC_OFF         offsetof(struct xfs_agf, agf_crc)
 665 
 666 #define XFS_AGF_MAGICNUM        0x00000001
 667 #define XFS_AGF_VERSIONNUM      0x00000002
 668 #define XFS_AGF_SEQNO           0x00000004
 669 #define XFS_AGF_LENGTH          0x00000008
 670 #define XFS_AGF_ROOTS           0x00000010
 671 #define XFS_AGF_LEVELS          0x00000020
 672 #define XFS_AGF_FLFIRST         0x00000040
 673 #define XFS_AGF_FLLAST          0x00000080
 674 #define XFS_AGF_FLCOUNT         0x00000100
 675 #define XFS_AGF_FREEBLKS        0x00000200
 676 #define XFS_AGF_LONGEST         0x00000400
 677 #define XFS_AGF_BTREEBLKS       0x00000800
 678 #define XFS_AGF_UUID            0x00001000
 679 #define XFS_AGF_RMAP_BLOCKS     0x00002000
 680 #define XFS_AGF_REFCOUNT_BLOCKS 0x00004000
 681 #define XFS_AGF_REFCOUNT_ROOT   0x00008000
 682 #define XFS_AGF_REFCOUNT_LEVEL  0x00010000
 683 #define XFS_AGF_SPARE64         0x00020000
 684 #define XFS_AGF_NUM_BITS        18
 685 #define XFS_AGF_ALL_BITS        ((1 << XFS_AGF_NUM_BITS) - 1)
 686 
 687 #define XFS_AGF_FLAGS \
 688         { XFS_AGF_MAGICNUM,     "MAGICNUM" }, \
 689         { XFS_AGF_VERSIONNUM,   "VERSIONNUM" }, \
 690         { XFS_AGF_SEQNO,        "SEQNO" }, \
 691         { XFS_AGF_LENGTH,       "LENGTH" }, \
 692         { XFS_AGF_ROOTS,        "ROOTS" }, \
 693         { XFS_AGF_LEVELS,       "LEVELS" }, \
 694         { XFS_AGF_FLFIRST,      "FLFIRST" }, \
 695         { XFS_AGF_FLLAST,       "FLLAST" }, \
 696         { XFS_AGF_FLCOUNT,      "FLCOUNT" }, \
 697         { XFS_AGF_FREEBLKS,     "FREEBLKS" }, \
 698         { XFS_AGF_LONGEST,      "LONGEST" }, \
 699         { XFS_AGF_BTREEBLKS,    "BTREEBLKS" }, \
 700         { XFS_AGF_UUID,         "UUID" }, \
 701         { XFS_AGF_RMAP_BLOCKS,  "RMAP_BLOCKS" }, \
 702         { XFS_AGF_REFCOUNT_BLOCKS,      "REFCOUNT_BLOCKS" }, \
 703         { XFS_AGF_REFCOUNT_ROOT,        "REFCOUNT_ROOT" }, \
 704         { XFS_AGF_REFCOUNT_LEVEL,       "REFCOUNT_LEVEL" }, \
 705         { XFS_AGF_SPARE64,      "SPARE64" }
 706 
 707 /* disk block (xfs_daddr_t) in the AG */
 708 #define XFS_AGF_DADDR(mp)       ((xfs_daddr_t)(1 << (mp)->m_sectbb_log))
 709 #define XFS_AGF_BLOCK(mp)       XFS_HDR_BLOCK(mp, XFS_AGF_DADDR(mp))
 710 #define XFS_BUF_TO_AGF(bp)      ((xfs_agf_t *)((bp)->b_addr))
 711 
 712 /*
 713  * Size of the unlinked inode hash table in the agi.
 714  */
 715 #define XFS_AGI_UNLINKED_BUCKETS        64
 716 
 717 typedef struct xfs_agi {
 718         /*
 719          * Common allocation group header information
 720          */
 721         __be32          agi_magicnum;   /* magic number == XFS_AGI_MAGIC */
 722         __be32          agi_versionnum; /* header version == XFS_AGI_VERSION */
 723         __be32          agi_seqno;      /* sequence # starting from 0 */
 724         __be32          agi_length;     /* size in blocks of a.g. */
 725         /*
 726          * Inode information
 727          * Inodes are mapped by interpreting the inode number, so no
 728          * mapping data is needed here.
 729          */
 730         __be32          agi_count;      /* count of allocated inodes */
 731         __be32          agi_root;       /* root of inode btree */
 732         __be32          agi_level;      /* levels in inode btree */
 733         __be32          agi_freecount;  /* number of free inodes */
 734 
 735         __be32          agi_newino;     /* new inode just allocated */
 736         __be32          agi_dirino;     /* last directory inode chunk */
 737         /*
 738          * Hash table of inodes which have been unlinked but are
 739          * still being referenced.
 740          */
 741         __be32          agi_unlinked[XFS_AGI_UNLINKED_BUCKETS];
 742         /*
 743          * This marks the end of logging region 1 and start of logging region 2.
 744          */
 745         uuid_t          agi_uuid;       /* uuid of filesystem */
 746         __be32          agi_crc;        /* crc of agi sector */
 747         __be32          agi_pad32;
 748         __be64          agi_lsn;        /* last write sequence */
 749 
 750         __be32          agi_free_root; /* root of the free inode btree */
 751         __be32          agi_free_level;/* levels in free inode btree */
 752 
 753         /* structure must be padded to 64 bit alignment */
 754 } xfs_agi_t;
 755 
 756 #define XFS_AGI_CRC_OFF         offsetof(struct xfs_agi, agi_crc)
 757 
 758 #define XFS_AGI_MAGICNUM        (1 << 0)
 759 #define XFS_AGI_VERSIONNUM      (1 << 1)
 760 #define XFS_AGI_SEQNO           (1 << 2)
 761 #define XFS_AGI_LENGTH          (1 << 3)
 762 #define XFS_AGI_COUNT           (1 << 4)
 763 #define XFS_AGI_ROOT            (1 << 5)
 764 #define XFS_AGI_LEVEL           (1 << 6)
 765 #define XFS_AGI_FREECOUNT       (1 << 7)
 766 #define XFS_AGI_NEWINO          (1 << 8)
 767 #define XFS_AGI_DIRINO          (1 << 9)
 768 #define XFS_AGI_UNLINKED        (1 << 10)
 769 #define XFS_AGI_NUM_BITS_R1     11      /* end of the 1st agi logging region */
 770 #define XFS_AGI_ALL_BITS_R1     ((1 << XFS_AGI_NUM_BITS_R1) - 1)
 771 #define XFS_AGI_FREE_ROOT       (1 << 11)
 772 #define XFS_AGI_FREE_LEVEL      (1 << 12)
 773 #define XFS_AGI_NUM_BITS_R2     13
 774 
 775 /* disk block (xfs_daddr_t) in the AG */
 776 #define XFS_AGI_DADDR(mp)       ((xfs_daddr_t)(2 << (mp)->m_sectbb_log))
 777 #define XFS_AGI_BLOCK(mp)       XFS_HDR_BLOCK(mp, XFS_AGI_DADDR(mp))
 778 #define XFS_BUF_TO_AGI(bp)      ((xfs_agi_t *)((bp)->b_addr))
 779 
 780 /*
 781  * The third a.g. block contains the a.g. freelist, an array
 782  * of block pointers to blocks owned by the allocation btree code.
 783  */
 784 #define XFS_AGFL_DADDR(mp)      ((xfs_daddr_t)(3 << (mp)->m_sectbb_log))
 785 #define XFS_AGFL_BLOCK(mp)      XFS_HDR_BLOCK(mp, XFS_AGFL_DADDR(mp))
 786 #define XFS_BUF_TO_AGFL(bp)     ((xfs_agfl_t *)((bp)->b_addr))
 787 
 788 #define XFS_BUF_TO_AGFL_BNO(mp, bp) \
 789         (xfs_sb_version_hascrc(&((mp)->m_sb)) ? \
 790                 &(XFS_BUF_TO_AGFL(bp)->agfl_bno[0]) : \
 791                 (__be32 *)(bp)->b_addr)
 792 
 793 typedef struct xfs_agfl {
 794         __be32          agfl_magicnum;
 795         __be32          agfl_seqno;
 796         uuid_t          agfl_uuid;
 797         __be64          agfl_lsn;
 798         __be32          agfl_crc;
 799         __be32          agfl_bno[];     /* actually xfs_agfl_size(mp) */
 800 } __attribute__((packed)) xfs_agfl_t;
 801 
 802 #define XFS_AGFL_CRC_OFF        offsetof(struct xfs_agfl, agfl_crc)
 803 
 804 #define XFS_AGB_TO_FSB(mp,agno,agbno)   \
 805         (((xfs_fsblock_t)(agno) << (mp)->m_sb.sb_agblklog) | (agbno))
 806 #define XFS_FSB_TO_AGNO(mp,fsbno)       \
 807         ((xfs_agnumber_t)((fsbno) >> (mp)->m_sb.sb_agblklog))
 808 #define XFS_FSB_TO_AGBNO(mp,fsbno)      \
 809         ((xfs_agblock_t)((fsbno) & xfs_mask32lo((mp)->m_sb.sb_agblklog)))
 810 #define XFS_AGB_TO_DADDR(mp,agno,agbno) \
 811         ((xfs_daddr_t)XFS_FSB_TO_BB(mp, \
 812                 (xfs_fsblock_t)(agno) * (mp)->m_sb.sb_agblocks + (agbno)))
 813 #define XFS_AG_DADDR(mp,agno,d)         (XFS_AGB_TO_DADDR(mp, agno, 0) + (d))
 814 
 815 /*
 816  * For checking for bad ranges of xfs_daddr_t's, covering multiple
 817  * allocation groups or a single xfs_daddr_t that's a superblock copy.
 818  */
 819 #define XFS_AG_CHECK_DADDR(mp,d,len)    \
 820         ((len) == 1 ? \
 821             ASSERT((d) == XFS_SB_DADDR || \
 822                    xfs_daddr_to_agbno(mp, d) != XFS_SB_DADDR) : \
 823             ASSERT(xfs_daddr_to_agno(mp, d) == \
 824                    xfs_daddr_to_agno(mp, (d) + (len) - 1)))
 825 
 826 typedef struct xfs_timestamp {
 827         __be32          t_sec;          /* timestamp seconds */
 828         __be32          t_nsec;         /* timestamp nanoseconds */
 829 } xfs_timestamp_t;
 830 
 831 /*
 832  * On-disk inode structure.
 833  *
 834  * This is just the header or "dinode core", the inode is expanded to fill a
 835  * variable size the leftover area split into a data and an attribute fork.
 836  * The format of the data and attribute fork depends on the format of the
 837  * inode as indicated by di_format and di_aformat.  To access the data and
 838  * attribute use the XFS_DFORK_DPTR, XFS_DFORK_APTR, and XFS_DFORK_PTR macros
 839  * below.
 840  *
 841  * There is a very similar struct icdinode in xfs_inode which matches the
 842  * layout of the first 96 bytes of this structure, but is kept in native
 843  * format instead of big endian.
 844  *
 845  * Note: di_flushiter is only used by v1/2 inodes - it's effectively a zeroed
 846  * padding field for v3 inodes.
 847  */
 848 #define XFS_DINODE_MAGIC                0x494e  /* 'IN' */
 849 typedef struct xfs_dinode {
 850         __be16          di_magic;       /* inode magic # = XFS_DINODE_MAGIC */
 851         __be16          di_mode;        /* mode and type of file */
 852         __u8            di_version;     /* inode version */
 853         __u8            di_format;      /* format of di_c data */
 854         __be16          di_onlink;      /* old number of links to file */
 855         __be32          di_uid;         /* owner's user id */
 856         __be32          di_gid;         /* owner's group id */
 857         __be32          di_nlink;       /* number of links to file */
 858         __be16          di_projid_lo;   /* lower part of owner's project id */
 859         __be16          di_projid_hi;   /* higher part owner's project id */
 860         __u8            di_pad[6];      /* unused, zeroed space */
 861         __be16          di_flushiter;   /* incremented on flush */
 862         xfs_timestamp_t di_atime;       /* time last accessed */
 863         xfs_timestamp_t di_mtime;       /* time last modified */
 864         xfs_timestamp_t di_ctime;       /* time created/inode modified */
 865         __be64          di_size;        /* number of bytes in file */
 866         __be64          di_nblocks;     /* # of direct & btree blocks used */
 867         __be32          di_extsize;     /* basic/minimum extent size for file */
 868         __be32          di_nextents;    /* number of extents in data fork */
 869         __be16          di_anextents;   /* number of extents in attribute fork*/
 870         __u8            di_forkoff;     /* attr fork offs, <<3 for 64b align */
 871         __s8            di_aformat;     /* format of attr fork's data */
 872         __be32          di_dmevmask;    /* DMIG event mask */
 873         __be16          di_dmstate;     /* DMIG state info */
 874         __be16          di_flags;       /* random flags, XFS_DIFLAG_... */
 875         __be32          di_gen;         /* generation number */
 876 
 877         /* di_next_unlinked is the only non-core field in the old dinode */
 878         __be32          di_next_unlinked;/* agi unlinked list ptr */
 879 
 880         /* start of the extended dinode, writable fields */
 881         __le32          di_crc;         /* CRC of the inode */
 882         __be64          di_changecount; /* number of attribute changes */
 883         __be64          di_lsn;         /* flush sequence */
 884         __be64          di_flags2;      /* more random flags */
 885         __be32          di_cowextsize;  /* basic cow extent size for file */
 886         __u8            di_pad2[12];    /* more padding for future expansion */
 887 
 888         /* fields only written to during inode creation */
 889         xfs_timestamp_t di_crtime;      /* time created */
 890         __be64          di_ino;         /* inode number */
 891         uuid_t          di_uuid;        /* UUID of the filesystem */
 892 
 893         /* structure must be padded to 64 bit alignment */
 894 } xfs_dinode_t;
 895 
 896 #define XFS_DINODE_CRC_OFF      offsetof(struct xfs_dinode, di_crc)
 897 
 898 #define DI_MAX_FLUSH 0xffff
 899 
 900 /*
 901  * Size of the core inode on disk.  Version 1 and 2 inodes have
 902  * the same size, but version 3 has grown a few additional fields.
 903  */
 904 static inline uint xfs_dinode_size(int version)
 905 {
 906         if (version == 3)
 907                 return sizeof(struct xfs_dinode);
 908         return offsetof(struct xfs_dinode, di_crc);
 909 }
 910 
 911 /*
 912  * The 32 bit link count in the inode theoretically maxes out at UINT_MAX.
 913  * Since the pathconf interface is signed, we use 2^31 - 1 instead.
 914  */
 915 #define XFS_MAXLINK             ((1U << 31) - 1U)
 916 
 917 /*
 918  * Values for di_format
 919  *
 920  * This enum is used in string mapping in xfs_trace.h; please keep the
 921  * TRACE_DEFINE_ENUMs for it up to date.
 922  */
 923 typedef enum xfs_dinode_fmt {
 924         XFS_DINODE_FMT_DEV,             /* xfs_dev_t */
 925         XFS_DINODE_FMT_LOCAL,           /* bulk data */
 926         XFS_DINODE_FMT_EXTENTS,         /* struct xfs_bmbt_rec */
 927         XFS_DINODE_FMT_BTREE,           /* struct xfs_bmdr_block */
 928         XFS_DINODE_FMT_UUID             /* added long ago, but never used */
 929 } xfs_dinode_fmt_t;
 930 
 931 #define XFS_INODE_FORMAT_STR \
 932         { XFS_DINODE_FMT_DEV,           "dev" }, \
 933         { XFS_DINODE_FMT_LOCAL,         "local" }, \
 934         { XFS_DINODE_FMT_EXTENTS,       "extent" }, \
 935         { XFS_DINODE_FMT_BTREE,         "btree" }, \
 936         { XFS_DINODE_FMT_UUID,          "uuid" }
 937 
 938 /*
 939  * Inode minimum and maximum sizes.
 940  */
 941 #define XFS_DINODE_MIN_LOG      8
 942 #define XFS_DINODE_MAX_LOG      11
 943 #define XFS_DINODE_MIN_SIZE     (1 << XFS_DINODE_MIN_LOG)
 944 #define XFS_DINODE_MAX_SIZE     (1 << XFS_DINODE_MAX_LOG)
 945 
 946 /*
 947  * Inode size for given fs.
 948  */
 949 #define XFS_LITINO(mp, version) \
 950         ((int)(((mp)->m_sb.sb_inodesize) - xfs_dinode_size(version)))
 951 
 952 /*
 953  * Inode data & attribute fork sizes, per inode.
 954  */
 955 #define XFS_DFORK_Q(dip)                ((dip)->di_forkoff != 0)
 956 #define XFS_DFORK_BOFF(dip)             ((int)((dip)->di_forkoff << 3))
 957 
 958 #define XFS_DFORK_DSIZE(dip,mp) \
 959         (XFS_DFORK_Q(dip) ? \
 960                 XFS_DFORK_BOFF(dip) : \
 961                 XFS_LITINO(mp, (dip)->di_version))
 962 #define XFS_DFORK_ASIZE(dip,mp) \
 963         (XFS_DFORK_Q(dip) ? \
 964                 XFS_LITINO(mp, (dip)->di_version) - XFS_DFORK_BOFF(dip) : \
 965                 0)
 966 #define XFS_DFORK_SIZE(dip,mp,w) \
 967         ((w) == XFS_DATA_FORK ? \
 968                 XFS_DFORK_DSIZE(dip, mp) : \
 969                 XFS_DFORK_ASIZE(dip, mp))
 970 
 971 #define XFS_DFORK_MAXEXT(dip, mp, w) \
 972         (XFS_DFORK_SIZE(dip, mp, w) / sizeof(struct xfs_bmbt_rec))
 973 
 974 /*
 975  * Return pointers to the data or attribute forks.
 976  */
 977 #define XFS_DFORK_DPTR(dip) \
 978         ((char *)dip + xfs_dinode_size(dip->di_version))
 979 #define XFS_DFORK_APTR(dip)     \
 980         (XFS_DFORK_DPTR(dip) + XFS_DFORK_BOFF(dip))
 981 #define XFS_DFORK_PTR(dip,w)    \
 982         ((w) == XFS_DATA_FORK ? XFS_DFORK_DPTR(dip) : XFS_DFORK_APTR(dip))
 983 
 984 #define XFS_DFORK_FORMAT(dip,w) \
 985         ((w) == XFS_DATA_FORK ? \
 986                 (dip)->di_format : \
 987                 (dip)->di_aformat)
 988 #define XFS_DFORK_NEXTENTS(dip,w) \
 989         ((w) == XFS_DATA_FORK ? \
 990                 be32_to_cpu((dip)->di_nextents) : \
 991                 be16_to_cpu((dip)->di_anextents))
 992 
 993 /*
 994  * For block and character special files the 32bit dev_t is stored at the
 995  * beginning of the data fork.
 996  */
 997 static inline xfs_dev_t xfs_dinode_get_rdev(struct xfs_dinode *dip)
 998 {
 999         return be32_to_cpu(*(__be32 *)XFS_DFORK_DPTR(dip));
1000 }
1001 
1002 static inline void xfs_dinode_put_rdev(struct xfs_dinode *dip, xfs_dev_t rdev)
1003 {
1004         *(__be32 *)XFS_DFORK_DPTR(dip) = cpu_to_be32(rdev);
1005 }
1006 
1007 /*
1008  * Values for di_flags
1009  */
1010 #define XFS_DIFLAG_REALTIME_BIT  0      /* file's blocks come from rt area */
1011 #define XFS_DIFLAG_PREALLOC_BIT  1      /* file space has been preallocated */
1012 #define XFS_DIFLAG_NEWRTBM_BIT   2      /* for rtbitmap inode, new format */
1013 #define XFS_DIFLAG_IMMUTABLE_BIT 3      /* inode is immutable */
1014 #define XFS_DIFLAG_APPEND_BIT    4      /* inode is append-only */
1015 #define XFS_DIFLAG_SYNC_BIT      5      /* inode is written synchronously */
1016 #define XFS_DIFLAG_NOATIME_BIT   6      /* do not update atime */
1017 #define XFS_DIFLAG_NODUMP_BIT    7      /* do not dump */
1018 #define XFS_DIFLAG_RTINHERIT_BIT 8      /* create with realtime bit set */
1019 #define XFS_DIFLAG_PROJINHERIT_BIT   9  /* create with parents projid */
1020 #define XFS_DIFLAG_NOSYMLINKS_BIT   10  /* disallow symlink creation */
1021 #define XFS_DIFLAG_EXTSIZE_BIT      11  /* inode extent size allocator hint */
1022 #define XFS_DIFLAG_EXTSZINHERIT_BIT 12  /* inherit inode extent size */
1023 #define XFS_DIFLAG_NODEFRAG_BIT     13  /* do not reorganize/defragment */
1024 #define XFS_DIFLAG_FILESTREAM_BIT   14  /* use filestream allocator */
1025 /* Do not use bit 15, di_flags is legacy and unchanging now */
1026 
1027 #define XFS_DIFLAG_REALTIME      (1 << XFS_DIFLAG_REALTIME_BIT)
1028 #define XFS_DIFLAG_PREALLOC      (1 << XFS_DIFLAG_PREALLOC_BIT)
1029 #define XFS_DIFLAG_NEWRTBM       (1 << XFS_DIFLAG_NEWRTBM_BIT)
1030 #define XFS_DIFLAG_IMMUTABLE     (1 << XFS_DIFLAG_IMMUTABLE_BIT)
1031 #define XFS_DIFLAG_APPEND        (1 << XFS_DIFLAG_APPEND_BIT)
1032 #define XFS_DIFLAG_SYNC          (1 << XFS_DIFLAG_SYNC_BIT)
1033 #define XFS_DIFLAG_NOATIME       (1 << XFS_DIFLAG_NOATIME_BIT)
1034 #define XFS_DIFLAG_NODUMP        (1 << XFS_DIFLAG_NODUMP_BIT)
1035 #define XFS_DIFLAG_RTINHERIT     (1 << XFS_DIFLAG_RTINHERIT_BIT)
1036 #define XFS_DIFLAG_PROJINHERIT   (1 << XFS_DIFLAG_PROJINHERIT_BIT)
1037 #define XFS_DIFLAG_NOSYMLINKS    (1 << XFS_DIFLAG_NOSYMLINKS_BIT)
1038 #define XFS_DIFLAG_EXTSIZE       (1 << XFS_DIFLAG_EXTSIZE_BIT)
1039 #define XFS_DIFLAG_EXTSZINHERIT  (1 << XFS_DIFLAG_EXTSZINHERIT_BIT)
1040 #define XFS_DIFLAG_NODEFRAG      (1 << XFS_DIFLAG_NODEFRAG_BIT)
1041 #define XFS_DIFLAG_FILESTREAM    (1 << XFS_DIFLAG_FILESTREAM_BIT)
1042 
1043 #define XFS_DIFLAG_ANY \
1044         (XFS_DIFLAG_REALTIME | XFS_DIFLAG_PREALLOC | XFS_DIFLAG_NEWRTBM | \
1045          XFS_DIFLAG_IMMUTABLE | XFS_DIFLAG_APPEND | XFS_DIFLAG_SYNC | \
1046          XFS_DIFLAG_NOATIME | XFS_DIFLAG_NODUMP | XFS_DIFLAG_RTINHERIT | \
1047          XFS_DIFLAG_PROJINHERIT | XFS_DIFLAG_NOSYMLINKS | XFS_DIFLAG_EXTSIZE | \
1048          XFS_DIFLAG_EXTSZINHERIT | XFS_DIFLAG_NODEFRAG | XFS_DIFLAG_FILESTREAM)
1049 
1050 /*
1051  * Values for di_flags2 These start by being exposed to userspace in the upper
1052  * 16 bits of the XFS_XFLAG_s range.
1053  */
1054 #define XFS_DIFLAG2_DAX_BIT     0       /* use DAX for this inode */
1055 #define XFS_DIFLAG2_REFLINK_BIT 1       /* file's blocks may be shared */
1056 #define XFS_DIFLAG2_COWEXTSIZE_BIT   2  /* copy on write extent size hint */
1057 #define XFS_DIFLAG2_DAX         (1 << XFS_DIFLAG2_DAX_BIT)
1058 #define XFS_DIFLAG2_REFLINK     (1 << XFS_DIFLAG2_REFLINK_BIT)
1059 #define XFS_DIFLAG2_COWEXTSIZE  (1 << XFS_DIFLAG2_COWEXTSIZE_BIT)
1060 
1061 #define XFS_DIFLAG2_ANY \
1062         (XFS_DIFLAG2_DAX | XFS_DIFLAG2_REFLINK | XFS_DIFLAG2_COWEXTSIZE)
1063 
1064 /*
1065  * Inode number format:
1066  * low inopblog bits - offset in block
1067  * next agblklog bits - block number in ag
1068  * next agno_log bits - ag number
1069  * high agno_log-agblklog-inopblog bits - 0
1070  */
1071 #define XFS_INO_MASK(k)                 (uint32_t)((1ULL << (k)) - 1)
1072 #define XFS_INO_OFFSET_BITS(mp)         (mp)->m_sb.sb_inopblog
1073 #define XFS_INO_AGBNO_BITS(mp)          (mp)->m_sb.sb_agblklog
1074 #define XFS_INO_AGINO_BITS(mp)          ((mp)->m_ino_geo.agino_log)
1075 #define XFS_INO_AGNO_BITS(mp)           (mp)->m_agno_log
1076 #define XFS_INO_BITS(mp)                \
1077         XFS_INO_AGNO_BITS(mp) + XFS_INO_AGINO_BITS(mp)
1078 #define XFS_INO_TO_AGNO(mp,i)           \
1079         ((xfs_agnumber_t)((i) >> XFS_INO_AGINO_BITS(mp)))
1080 #define XFS_INO_TO_AGINO(mp,i)          \
1081         ((xfs_agino_t)(i) & XFS_INO_MASK(XFS_INO_AGINO_BITS(mp)))
1082 #define XFS_INO_TO_AGBNO(mp,i)          \
1083         (((xfs_agblock_t)(i) >> XFS_INO_OFFSET_BITS(mp)) & \
1084                 XFS_INO_MASK(XFS_INO_AGBNO_BITS(mp)))
1085 #define XFS_INO_TO_OFFSET(mp,i)         \
1086         ((int)(i) & XFS_INO_MASK(XFS_INO_OFFSET_BITS(mp)))
1087 #define XFS_INO_TO_FSB(mp,i)            \
1088         XFS_AGB_TO_FSB(mp, XFS_INO_TO_AGNO(mp,i), XFS_INO_TO_AGBNO(mp,i))
1089 #define XFS_AGINO_TO_INO(mp,a,i)        \
1090         (((xfs_ino_t)(a) << XFS_INO_AGINO_BITS(mp)) | (i))
1091 #define XFS_AGINO_TO_AGBNO(mp,i)        ((i) >> XFS_INO_OFFSET_BITS(mp))
1092 #define XFS_AGINO_TO_OFFSET(mp,i)       \
1093         ((i) & XFS_INO_MASK(XFS_INO_OFFSET_BITS(mp)))
1094 #define XFS_OFFBNO_TO_AGINO(mp,b,o)     \
1095         ((xfs_agino_t)(((b) << XFS_INO_OFFSET_BITS(mp)) | (o)))
1096 #define XFS_FSB_TO_INO(mp, b)   ((xfs_ino_t)((b) << XFS_INO_OFFSET_BITS(mp)))
1097 #define XFS_AGB_TO_AGINO(mp, b) ((xfs_agino_t)((b) << XFS_INO_OFFSET_BITS(mp)))
1098 
1099 #define XFS_MAXINUMBER          ((xfs_ino_t)((1ULL << 56) - 1ULL))
1100 #define XFS_MAXINUMBER_32       ((xfs_ino_t)((1ULL << 32) - 1ULL))
1101 
1102 /*
1103  * RealTime Device format definitions
1104  */
1105 
1106 /* Min and max rt extent sizes, specified in bytes */
1107 #define XFS_MAX_RTEXTSIZE       (1024 * 1024 * 1024)    /* 1GB */
1108 #define XFS_DFL_RTEXTSIZE       (64 * 1024)             /* 64kB */
1109 #define XFS_MIN_RTEXTSIZE       (4 * 1024)              /* 4kB */
1110 
1111 #define XFS_BLOCKSIZE(mp)       ((mp)->m_sb.sb_blocksize)
1112 #define XFS_BLOCKMASK(mp)       ((mp)->m_blockmask)
1113 #define XFS_BLOCKWSIZE(mp)      ((mp)->m_blockwsize)
1114 #define XFS_BLOCKWMASK(mp)      ((mp)->m_blockwmask)
1115 
1116 /*
1117  * RT Summary and bit manipulation macros.
1118  */
1119 #define XFS_SUMOFFS(mp,ls,bb)   ((int)((ls) * (mp)->m_sb.sb_rbmblocks + (bb)))
1120 #define XFS_SUMOFFSTOBLOCK(mp,s)        \
1121         (((s) * (uint)sizeof(xfs_suminfo_t)) >> (mp)->m_sb.sb_blocklog)
1122 #define XFS_SUMPTR(mp,bp,so)    \
1123         ((xfs_suminfo_t *)((bp)->b_addr + \
1124                 (((so) * (uint)sizeof(xfs_suminfo_t)) & XFS_BLOCKMASK(mp))))
1125 
1126 #define XFS_BITTOBLOCK(mp,bi)   ((bi) >> (mp)->m_blkbit_log)
1127 #define XFS_BLOCKTOBIT(mp,bb)   ((bb) << (mp)->m_blkbit_log)
1128 #define XFS_BITTOWORD(mp,bi)    \
1129         ((int)(((bi) >> XFS_NBWORDLOG) & XFS_BLOCKWMASK(mp)))
1130 
1131 #define XFS_RTMIN(a,b)  ((a) < (b) ? (a) : (b))
1132 #define XFS_RTMAX(a,b)  ((a) > (b) ? (a) : (b))
1133 
1134 #define XFS_RTLOBIT(w)  xfs_lowbit32(w)
1135 #define XFS_RTHIBIT(w)  xfs_highbit32(w)
1136 
1137 #define XFS_RTBLOCKLOG(b)       xfs_highbit64(b)
1138 
1139 /*
1140  * Dquot and dquot block format definitions
1141  */
1142 #define XFS_DQUOT_MAGIC         0x4451          /* 'DQ' */
1143 #define XFS_DQUOT_VERSION       (uint8_t)0x01   /* latest version number */
1144 
1145 /*
1146  * This is the main portion of the on-disk representation of quota
1147  * information for a user. This is the q_core of the xfs_dquot_t that
1148  * is kept in kernel memory. We pad this with some more expansion room
1149  * to construct the on disk structure.
1150  */
1151 typedef struct  xfs_disk_dquot {
1152         __be16          d_magic;        /* dquot magic = XFS_DQUOT_MAGIC */
1153         __u8            d_version;      /* dquot version */
1154         __u8            d_flags;        /* XFS_DQ_USER/PROJ/GROUP */
1155         __be32          d_id;           /* user,project,group id */
1156         __be64          d_blk_hardlimit;/* absolute limit on disk blks */
1157         __be64          d_blk_softlimit;/* preferred limit on disk blks */
1158         __be64          d_ino_hardlimit;/* maximum # allocated inodes */
1159         __be64          d_ino_softlimit;/* preferred inode limit */
1160         __be64          d_bcount;       /* disk blocks owned by the user */
1161         __be64          d_icount;       /* inodes owned by the user */
1162         __be32          d_itimer;       /* zero if within inode limits if not,
1163                                            this is when we refuse service */
1164         __be32          d_btimer;       /* similar to above; for disk blocks */
1165         __be16          d_iwarns;       /* warnings issued wrt num inodes */
1166         __be16          d_bwarns;       /* warnings issued wrt disk blocks */
1167         __be32          d_pad0;         /* 64 bit align */
1168         __be64          d_rtb_hardlimit;/* absolute limit on realtime blks */
1169         __be64          d_rtb_softlimit;/* preferred limit on RT disk blks */
1170         __be64          d_rtbcount;     /* realtime blocks owned */
1171         __be32          d_rtbtimer;     /* similar to above; for RT disk blocks */
1172         __be16          d_rtbwarns;     /* warnings issued wrt RT disk blocks */
1173         __be16          d_pad;
1174 } xfs_disk_dquot_t;
1175 
1176 /*
1177  * This is what goes on disk. This is separated from the xfs_disk_dquot because
1178  * carrying the unnecessary padding would be a waste of memory.
1179  */
1180 typedef struct xfs_dqblk {
1181         xfs_disk_dquot_t  dd_diskdq;    /* portion that lives incore as well */
1182         char              dd_fill[4];   /* filling for posterity */
1183 
1184         /*
1185          * These two are only present on filesystems with the CRC bits set.
1186          */
1187         __be32            dd_crc;       /* checksum */
1188         __be64            dd_lsn;       /* last modification in log */
1189         uuid_t            dd_uuid;      /* location information */
1190 } xfs_dqblk_t;
1191 
1192 #define XFS_DQUOT_CRC_OFF       offsetof(struct xfs_dqblk, dd_crc)
1193 
1194 /*
1195  * Remote symlink format and access functions.
1196  */
1197 #define XFS_SYMLINK_MAGIC       0x58534c4d      /* XSLM */
1198 
1199 struct xfs_dsymlink_hdr {
1200         __be32  sl_magic;
1201         __be32  sl_offset;
1202         __be32  sl_bytes;
1203         __be32  sl_crc;
1204         uuid_t  sl_uuid;
1205         __be64  sl_owner;
1206         __be64  sl_blkno;
1207         __be64  sl_lsn;
1208 };
1209 
1210 #define XFS_SYMLINK_CRC_OFF     offsetof(struct xfs_dsymlink_hdr, sl_crc)
1211 
1212 #define XFS_SYMLINK_MAXLEN      1024
1213 /*
1214  * The maximum pathlen is 1024 bytes. Since the minimum file system
1215  * blocksize is 512 bytes, we can get a max of 3 extents back from
1216  * bmapi when crc headers are taken into account.
1217  */
1218 #define XFS_SYMLINK_MAPS 3
1219 
1220 #define XFS_SYMLINK_BUF_SPACE(mp, bufsize)      \
1221         ((bufsize) - (xfs_sb_version_hascrc(&(mp)->m_sb) ? \
1222                         sizeof(struct xfs_dsymlink_hdr) : 0))
1223 
1224 
1225 /*
1226  * Allocation Btree format definitions
1227  *
1228  * There are two on-disk btrees, one sorted by blockno and one sorted
1229  * by blockcount and blockno.  All blocks look the same to make the code
1230  * simpler; if we have time later, we'll make the optimizations.
1231  */
1232 #define XFS_ABTB_MAGIC          0x41425442      /* 'ABTB' for bno tree */
1233 #define XFS_ABTB_CRC_MAGIC      0x41423342      /* 'AB3B' */
1234 #define XFS_ABTC_MAGIC          0x41425443      /* 'ABTC' for cnt tree */
1235 #define XFS_ABTC_CRC_MAGIC      0x41423343      /* 'AB3C' */
1236 
1237 /*
1238  * Data record/key structure
1239  */
1240 typedef struct xfs_alloc_rec {
1241         __be32          ar_startblock;  /* starting block number */
1242         __be32          ar_blockcount;  /* count of free blocks */
1243 } xfs_alloc_rec_t, xfs_alloc_key_t;
1244 
1245 typedef struct xfs_alloc_rec_incore {
1246         xfs_agblock_t   ar_startblock;  /* starting block number */
1247         xfs_extlen_t    ar_blockcount;  /* count of free blocks */
1248 } xfs_alloc_rec_incore_t;
1249 
1250 /* btree pointer type */
1251 typedef __be32 xfs_alloc_ptr_t;
1252 
1253 /*
1254  * Block numbers in the AG:
1255  * SB is sector 0, AGF is sector 1, AGI is sector 2, AGFL is sector 3.
1256  */
1257 #define XFS_BNO_BLOCK(mp)       ((xfs_agblock_t)(XFS_AGFL_BLOCK(mp) + 1))
1258 #define XFS_CNT_BLOCK(mp)       ((xfs_agblock_t)(XFS_BNO_BLOCK(mp) + 1))
1259 
1260 
1261 /*
1262  * Inode Allocation Btree format definitions
1263  *
1264  * There is a btree for the inode map per allocation group.
1265  */
1266 #define XFS_IBT_MAGIC           0x49414254      /* 'IABT' */
1267 #define XFS_IBT_CRC_MAGIC       0x49414233      /* 'IAB3' */
1268 #define XFS_FIBT_MAGIC          0x46494254      /* 'FIBT' */
1269 #define XFS_FIBT_CRC_MAGIC      0x46494233      /* 'FIB3' */
1270 
1271 typedef uint64_t        xfs_inofree_t;
1272 #define XFS_INODES_PER_CHUNK            (NBBY * sizeof(xfs_inofree_t))
1273 #define XFS_INODES_PER_CHUNK_LOG        (XFS_NBBYLOG + 3)
1274 #define XFS_INOBT_ALL_FREE              ((xfs_inofree_t)-1)
1275 #define XFS_INOBT_MASK(i)               ((xfs_inofree_t)1 << (i))
1276 
1277 #define XFS_INOBT_HOLEMASK_FULL         0       /* holemask for full chunk */
1278 #define XFS_INOBT_HOLEMASK_BITS         (NBBY * sizeof(uint16_t))
1279 #define XFS_INODES_PER_HOLEMASK_BIT     \
1280         (XFS_INODES_PER_CHUNK / (NBBY * sizeof(uint16_t)))
1281 
1282 static inline xfs_inofree_t xfs_inobt_maskn(int i, int n)
1283 {
1284         return ((n >= XFS_INODES_PER_CHUNK ? 0 : XFS_INOBT_MASK(n)) - 1) << i;
1285 }
1286 
1287 /*
1288  * The on-disk inode record structure has two formats. The original "full"
1289  * format uses a 4-byte freecount. The "sparse" format uses a 1-byte freecount
1290  * and replaces the 3 high-order freecount bytes wth the holemask and inode
1291  * count.
1292  *
1293  * The holemask of the sparse record format allows an inode chunk to have holes
1294  * that refer to blocks not owned by the inode record. This facilitates inode
1295  * allocation in the event of severe free space fragmentation.
1296  */
1297 typedef struct xfs_inobt_rec {
1298         __be32          ir_startino;    /* starting inode number */
1299         union {
1300                 struct {
1301                         __be32  ir_freecount;   /* count of free inodes */
1302                 } f;
1303                 struct {
1304                         __be16  ir_holemask;/* hole mask for sparse chunks */
1305                         __u8    ir_count;       /* total inode count */
1306                         __u8    ir_freecount;   /* count of free inodes */
1307                 } sp;
1308         } ir_u;
1309         __be64          ir_free;        /* free inode mask */
1310 } xfs_inobt_rec_t;
1311 
1312 typedef struct xfs_inobt_rec_incore {
1313         xfs_agino_t     ir_startino;    /* starting inode number */
1314         uint16_t        ir_holemask;    /* hole mask for sparse chunks */
1315         uint8_t         ir_count;       /* total inode count */
1316         uint8_t         ir_freecount;   /* count of free inodes (set bits) */
1317         xfs_inofree_t   ir_free;        /* free inode mask */
1318 } xfs_inobt_rec_incore_t;
1319 
1320 static inline bool xfs_inobt_issparse(uint16_t holemask)
1321 {
1322         /* non-zero holemask represents a sparse rec. */
1323         return holemask;
1324 }
1325 
1326 /*
1327  * Key structure
1328  */
1329 typedef struct xfs_inobt_key {
1330         __be32          ir_startino;    /* starting inode number */
1331 } xfs_inobt_key_t;
1332 
1333 /* btree pointer type */
1334 typedef __be32 xfs_inobt_ptr_t;
1335 
1336 /*
1337  * block numbers in the AG.
1338  */
1339 #define XFS_IBT_BLOCK(mp)               ((xfs_agblock_t)(XFS_CNT_BLOCK(mp) + 1))
1340 #define XFS_FIBT_BLOCK(mp)              ((xfs_agblock_t)(XFS_IBT_BLOCK(mp) + 1))
1341 
1342 /*
1343  * Reverse mapping btree format definitions
1344  *
1345  * There is a btree for the reverse map per allocation group
1346  */
1347 #define XFS_RMAP_CRC_MAGIC      0x524d4233      /* 'RMB3' */
1348 
1349 /*
1350  * Ownership info for an extent.  This is used to create reverse-mapping
1351  * entries.
1352  */
1353 #define XFS_OWNER_INFO_ATTR_FORK        (1 << 0)
1354 #define XFS_OWNER_INFO_BMBT_BLOCK       (1 << 1)
1355 struct xfs_owner_info {
1356         uint64_t                oi_owner;
1357         xfs_fileoff_t           oi_offset;
1358         unsigned int            oi_flags;
1359 };
1360 
1361 /*
1362  * Special owner types.
1363  *
1364  * Seeing as we only support up to 8EB, we have the upper bit of the owner field
1365  * to tell us we have a special owner value. We use these for static metadata
1366  * allocated at mkfs/growfs time, as well as for freespace management metadata.
1367  */
1368 #define XFS_RMAP_OWN_NULL       (-1ULL) /* No owner, for growfs */
1369 #define XFS_RMAP_OWN_UNKNOWN    (-2ULL) /* Unknown owner, for EFI recovery */
1370 #define XFS_RMAP_OWN_FS         (-3ULL) /* static fs metadata */
1371 #define XFS_RMAP_OWN_LOG        (-4ULL) /* static fs metadata */
1372 #define XFS_RMAP_OWN_AG         (-5ULL) /* AG freespace btree blocks */
1373 #define XFS_RMAP_OWN_INOBT      (-6ULL) /* Inode btree blocks */
1374 #define XFS_RMAP_OWN_INODES     (-7ULL) /* Inode chunk */
1375 #define XFS_RMAP_OWN_REFC       (-8ULL) /* refcount tree */
1376 #define XFS_RMAP_OWN_COW        (-9ULL) /* cow allocations */
1377 #define XFS_RMAP_OWN_MIN        (-10ULL) /* guard */
1378 
1379 #define XFS_RMAP_NON_INODE_OWNER(owner) (!!((owner) & (1ULL << 63)))
1380 
1381 /*
1382  * Data record structure
1383  */
1384 struct xfs_rmap_rec {
1385         __be32          rm_startblock;  /* extent start block */
1386         __be32          rm_blockcount;  /* extent length */
1387         __be64          rm_owner;       /* extent owner */
1388         __be64          rm_offset;      /* offset within the owner */
1389 };
1390 
1391 /*
1392  * rmap btree record
1393  *  rm_offset:63 is the attribute fork flag
1394  *  rm_offset:62 is the bmbt block flag
1395  *  rm_offset:61 is the unwritten extent flag (same as l0:63 in bmbt)
1396  *  rm_offset:54-60 aren't used and should be zero
1397  *  rm_offset:0-53 is the block offset within the inode
1398  */
1399 #define XFS_RMAP_OFF_ATTR_FORK  ((uint64_t)1ULL << 63)
1400 #define XFS_RMAP_OFF_BMBT_BLOCK ((uint64_t)1ULL << 62)
1401 #define XFS_RMAP_OFF_UNWRITTEN  ((uint64_t)1ULL << 61)
1402 
1403 #define XFS_RMAP_LEN_MAX        ((uint32_t)~0U)
1404 #define XFS_RMAP_OFF_FLAGS      (XFS_RMAP_OFF_ATTR_FORK | \
1405                                  XFS_RMAP_OFF_BMBT_BLOCK | \
1406                                  XFS_RMAP_OFF_UNWRITTEN)
1407 #define XFS_RMAP_OFF_MASK       ((uint64_t)0x3FFFFFFFFFFFFFULL)
1408 
1409 #define XFS_RMAP_OFF(off)               ((off) & XFS_RMAP_OFF_MASK)
1410 
1411 #define XFS_RMAP_IS_BMBT_BLOCK(off)     (!!((off) & XFS_RMAP_OFF_BMBT_BLOCK))
1412 #define XFS_RMAP_IS_ATTR_FORK(off)      (!!((off) & XFS_RMAP_OFF_ATTR_FORK))
1413 #define XFS_RMAP_IS_UNWRITTEN(len)      (!!((off) & XFS_RMAP_OFF_UNWRITTEN))
1414 
1415 #define RMAPBT_STARTBLOCK_BITLEN        32
1416 #define RMAPBT_BLOCKCOUNT_BITLEN        32
1417 #define RMAPBT_OWNER_BITLEN             64
1418 #define RMAPBT_ATTRFLAG_BITLEN          1
1419 #define RMAPBT_BMBTFLAG_BITLEN          1
1420 #define RMAPBT_EXNTFLAG_BITLEN          1
1421 #define RMAPBT_UNUSED_OFFSET_BITLEN     7
1422 #define RMAPBT_OFFSET_BITLEN            54
1423 
1424 #define XFS_RMAP_ATTR_FORK              (1 << 0)
1425 #define XFS_RMAP_BMBT_BLOCK             (1 << 1)
1426 #define XFS_RMAP_UNWRITTEN              (1 << 2)
1427 #define XFS_RMAP_KEY_FLAGS              (XFS_RMAP_ATTR_FORK | \
1428                                          XFS_RMAP_BMBT_BLOCK)
1429 #define XFS_RMAP_REC_FLAGS              (XFS_RMAP_UNWRITTEN)
1430 struct xfs_rmap_irec {
1431         xfs_agblock_t   rm_startblock;  /* extent start block */
1432         xfs_extlen_t    rm_blockcount;  /* extent length */
1433         uint64_t        rm_owner;       /* extent owner */
1434         uint64_t        rm_offset;      /* offset within the owner */
1435         unsigned int    rm_flags;       /* state flags */
1436 };
1437 
1438 /*
1439  * Key structure
1440  *
1441  * We don't use the length for lookups
1442  */
1443 struct xfs_rmap_key {
1444         __be32          rm_startblock;  /* extent start block */
1445         __be64          rm_owner;       /* extent owner */
1446         __be64          rm_offset;      /* offset within the owner */
1447 } __attribute__((packed));
1448 
1449 /* btree pointer type */
1450 typedef __be32 xfs_rmap_ptr_t;
1451 
1452 #define XFS_RMAP_BLOCK(mp) \
1453         (xfs_sb_version_hasfinobt(&((mp)->m_sb)) ? \
1454          XFS_FIBT_BLOCK(mp) + 1 : \
1455          XFS_IBT_BLOCK(mp) + 1)
1456 
1457 /*
1458  * Reference Count Btree format definitions
1459  *
1460  */
1461 #define XFS_REFC_CRC_MAGIC      0x52334643      /* 'R3FC' */
1462 
1463 unsigned int xfs_refc_block(struct xfs_mount *mp);
1464 
1465 /*
1466  * Data record/key structure
1467  *
1468  * Each record associates a range of physical blocks (starting at
1469  * rc_startblock and ending rc_blockcount blocks later) with a reference
1470  * count (rc_refcount).  Extents that are being used to stage a copy on
1471  * write (CoW) operation are recorded in the refcount btree with a
1472  * refcount of 1.  All other records must have a refcount > 1 and must
1473  * track an extent mapped only by file data forks.
1474  *
1475  * Extents with a single owner (attributes, metadata, non-shared file
1476  * data) are not tracked here.  Free space is also not tracked here.
1477  * This is consistent with pre-reflink XFS.
1478  */
1479 
1480 /*
1481  * Extents that are being used to stage a copy on write are stored
1482  * in the refcount btree with a refcount of 1 and the upper bit set
1483  * on the startblock.  This speeds up mount time deletion of stale
1484  * staging extents because they're all at the right side of the tree.
1485  */
1486 #define XFS_REFC_COW_START              ((xfs_agblock_t)(1U << 31))
1487 #define REFCNTBT_COWFLAG_BITLEN         1
1488 #define REFCNTBT_AGBLOCK_BITLEN         31
1489 
1490 struct xfs_refcount_rec {
1491         __be32          rc_startblock;  /* starting block number */
1492         __be32          rc_blockcount;  /* count of blocks */
1493         __be32          rc_refcount;    /* number of inodes linked here */
1494 };
1495 
1496 struct xfs_refcount_key {
1497         __be32          rc_startblock;  /* starting block number */
1498 };
1499 
1500 struct xfs_refcount_irec {
1501         xfs_agblock_t   rc_startblock;  /* starting block number */
1502         xfs_extlen_t    rc_blockcount;  /* count of free blocks */
1503         xfs_nlink_t     rc_refcount;    /* number of inodes linked here */
1504 };
1505 
1506 #define MAXREFCOUNT     ((xfs_nlink_t)~0U)
1507 #define MAXREFCEXTLEN   ((xfs_extlen_t)~0U)
1508 
1509 /* btree pointer type */
1510 typedef __be32 xfs_refcount_ptr_t;
1511 
1512 
1513 /*
1514  * BMAP Btree format definitions
1515  *
1516  * This includes both the root block definition that sits inside an inode fork
1517  * and the record/pointer formats for the leaf/node in the blocks.
1518  */
1519 #define XFS_BMAP_MAGIC          0x424d4150      /* 'BMAP' */
1520 #define XFS_BMAP_CRC_MAGIC      0x424d4133      /* 'BMA3' */
1521 
1522 /*
1523  * Bmap root header, on-disk form only.
1524  */
1525 typedef struct xfs_bmdr_block {
1526         __be16          bb_level;       /* 0 is a leaf */
1527         __be16          bb_numrecs;     /* current # of data records */
1528 } xfs_bmdr_block_t;
1529 
1530 /*
1531  * Bmap btree record and extent descriptor.
1532  *  l0:63 is an extent flag (value 1 indicates non-normal).
1533  *  l0:9-62 are startoff.
1534  *  l0:0-8 and l1:21-63 are startblock.
1535  *  l1:0-20 are blockcount.
1536  */
1537 #define BMBT_EXNTFLAG_BITLEN    1
1538 #define BMBT_STARTOFF_BITLEN    54
1539 #define BMBT_STARTBLOCK_BITLEN  52
1540 #define BMBT_BLOCKCOUNT_BITLEN  21
1541 
1542 #define BMBT_STARTOFF_MASK      ((1ULL << BMBT_STARTOFF_BITLEN) - 1)
1543 
1544 typedef struct xfs_bmbt_rec {
1545         __be64                  l0, l1;
1546 } xfs_bmbt_rec_t;
1547 
1548 typedef uint64_t        xfs_bmbt_rec_base_t;    /* use this for casts */
1549 typedef xfs_bmbt_rec_t xfs_bmdr_rec_t;
1550 
1551 /*
1552  * Values and macros for delayed-allocation startblock fields.
1553  */
1554 #define STARTBLOCKVALBITS       17
1555 #define STARTBLOCKMASKBITS      (15 + 20)
1556 #define STARTBLOCKMASK          \
1557         (((((xfs_fsblock_t)1) << STARTBLOCKMASKBITS) - 1) << STARTBLOCKVALBITS)
1558 
1559 static inline int isnullstartblock(xfs_fsblock_t x)
1560 {
1561         return ((x) & STARTBLOCKMASK) == STARTBLOCKMASK;
1562 }
1563 
1564 static inline xfs_fsblock_t nullstartblock(int k)
1565 {
1566         ASSERT(k < (1 << STARTBLOCKVALBITS));
1567         return STARTBLOCKMASK | (k);
1568 }
1569 
1570 static inline xfs_filblks_t startblockval(xfs_fsblock_t x)
1571 {
1572         return (xfs_filblks_t)((x) & ~STARTBLOCKMASK);
1573 }
1574 
1575 /*
1576  * Key structure for non-leaf levels of the tree.
1577  */
1578 typedef struct xfs_bmbt_key {
1579         __be64          br_startoff;    /* starting file offset */
1580 } xfs_bmbt_key_t, xfs_bmdr_key_t;
1581 
1582 /* btree pointer type */
1583 typedef __be64 xfs_bmbt_ptr_t, xfs_bmdr_ptr_t;
1584 
1585 
1586 /*
1587  * Generic Btree block format definitions
1588  *
1589  * This is a combination of the actual format used on disk for short and long
1590  * format btrees.  The first three fields are shared by both format, but the
1591  * pointers are different and should be used with care.
1592  *
1593  * To get the size of the actual short or long form headers please use the size
1594  * macros below.  Never use sizeof(xfs_btree_block).
1595  *
1596  * The blkno, crc, lsn, owner and uuid fields are only available in filesystems
1597  * with the crc feature bit, and all accesses to them must be conditional on
1598  * that flag.
1599  */
1600 /* short form block header */
1601 struct xfs_btree_block_shdr {
1602         __be32          bb_leftsib;
1603         __be32          bb_rightsib;
1604 
1605         __be64          bb_blkno;
1606         __be64          bb_lsn;
1607         uuid_t          bb_uuid;
1608         __be32          bb_owner;
1609         __le32          bb_crc;
1610 };
1611 
1612 /* long form block header */
1613 struct xfs_btree_block_lhdr {
1614         __be64          bb_leftsib;
1615         __be64          bb_rightsib;
1616 
1617         __be64          bb_blkno;
1618         __be64          bb_lsn;
1619         uuid_t          bb_uuid;
1620         __be64          bb_owner;
1621         __le32          bb_crc;
1622         __be32          bb_pad; /* padding for alignment */
1623 };
1624 
1625 struct xfs_btree_block {
1626         __be32          bb_magic;       /* magic number for block type */
1627         __be16          bb_level;       /* 0 is a leaf */
1628         __be16          bb_numrecs;     /* current # of data records */
1629         union {
1630                 struct xfs_btree_block_shdr s;
1631                 struct xfs_btree_block_lhdr l;
1632         } bb_u;                         /* rest */
1633 };
1634 
1635 /* size of a short form block */
1636 #define XFS_BTREE_SBLOCK_LEN \
1637         (offsetof(struct xfs_btree_block, bb_u) + \
1638          offsetof(struct xfs_btree_block_shdr, bb_blkno))
1639 /* size of a long form block */
1640 #define XFS_BTREE_LBLOCK_LEN \
1641         (offsetof(struct xfs_btree_block, bb_u) + \
1642          offsetof(struct xfs_btree_block_lhdr, bb_blkno))
1643 
1644 /* sizes of CRC enabled btree blocks */
1645 #define XFS_BTREE_SBLOCK_CRC_LEN \
1646         (offsetof(struct xfs_btree_block, bb_u) + \
1647          sizeof(struct xfs_btree_block_shdr))
1648 #define XFS_BTREE_LBLOCK_CRC_LEN \
1649         (offsetof(struct xfs_btree_block, bb_u) + \
1650          sizeof(struct xfs_btree_block_lhdr))
1651 
1652 #define XFS_BTREE_SBLOCK_CRC_OFF \
1653         offsetof(struct xfs_btree_block, bb_u.s.bb_crc)
1654 #define XFS_BTREE_LBLOCK_CRC_OFF \
1655         offsetof(struct xfs_btree_block, bb_u.l.bb_crc)
1656 
1657 /*
1658  * On-disk XFS access control list structure.
1659  */
1660 struct xfs_acl_entry {
1661         __be32  ae_tag;
1662         __be32  ae_id;
1663         __be16  ae_perm;
1664         __be16  ae_pad;         /* fill the implicit hole in the structure */
1665 };
1666 
1667 struct xfs_acl {
1668         __be32                  acl_cnt;
1669         struct xfs_acl_entry    acl_entry[0];
1670 };
1671 
1672 /*
1673  * The number of ACL entries allowed is defined by the on-disk format.
1674  * For v4 superblocks, that is limited to 25 entries. For v5 superblocks, it is
1675  * limited only by the maximum size of the xattr that stores the information.
1676  */
1677 #define XFS_ACL_MAX_ENTRIES(mp) \
1678         (xfs_sb_version_hascrc(&mp->m_sb) \
1679                 ?  (XFS_XATTR_SIZE_MAX - sizeof(struct xfs_acl)) / \
1680                                                 sizeof(struct xfs_acl_entry) \
1681                 : 25)
1682 
1683 #define XFS_ACL_SIZE(cnt) \
1684         (sizeof(struct xfs_acl) + \
1685                 sizeof(struct xfs_acl_entry) * cnt)
1686 
1687 #define XFS_ACL_MAX_SIZE(mp) \
1688         XFS_ACL_SIZE(XFS_ACL_MAX_ENTRIES((mp)))
1689 
1690 
1691 /* On-disk XFS extended attribute names */
1692 #define SGI_ACL_FILE            "SGI_ACL_FILE"
1693 #define SGI_ACL_DEFAULT         "SGI_ACL_DEFAULT"
1694 #define SGI_ACL_FILE_SIZE       (sizeof(SGI_ACL_FILE)-1)
1695 #define SGI_ACL_DEFAULT_SIZE    (sizeof(SGI_ACL_DEFAULT)-1)
1696 
1697 #endif /* __XFS_FORMAT_H__ */

/* [<][>][^][v][top][bottom][index][help] */