0001
0002
0003
0004
0005
0006 #ifndef __XFS_LOG_FORMAT_H__
0007 #define __XFS_LOG_FORMAT_H__
0008
0009 struct xfs_mount;
0010 struct xfs_trans_res;
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 typedef uint32_t xlog_tid_t;
0023
0024 #define XLOG_MIN_ICLOGS 2
0025 #define XLOG_MAX_ICLOGS 8
0026 #define XLOG_HEADER_MAGIC_NUM 0xFEEDbabe
0027 #define XLOG_VERSION_1 1
0028 #define XLOG_VERSION_2 2
0029 #define XLOG_VERSION_OKBITS (XLOG_VERSION_1 | XLOG_VERSION_2)
0030 #define XLOG_MIN_RECORD_BSIZE (16*1024)
0031 #define XLOG_BIG_RECORD_BSIZE (32*1024)
0032 #define XLOG_MAX_RECORD_BSIZE (256*1024)
0033 #define XLOG_HEADER_CYCLE_SIZE (32*1024)
0034 #define XLOG_MIN_RECORD_BSHIFT 14
0035 #define XLOG_BIG_RECORD_BSHIFT 15
0036 #define XLOG_MAX_RECORD_BSHIFT 18
0037
0038 #define XLOG_HEADER_SIZE 512
0039
0040
0041 #define XFS_MIN_LOG_FACTOR 3
0042
0043 #define XLOG_REC_SHIFT(log) \
0044 BTOBB(1 << (xfs_has_logv2(log->l_mp) ? \
0045 XLOG_MAX_RECORD_BSHIFT : XLOG_BIG_RECORD_BSHIFT))
0046 #define XLOG_TOTAL_REC_SHIFT(log) \
0047 BTOBB(XLOG_MAX_ICLOGS << (xfs_has_logv2(log->l_mp) ? \
0048 XLOG_MAX_RECORD_BSHIFT : XLOG_BIG_RECORD_BSHIFT))
0049
0050
0051 #define CYCLE_LSN(lsn) ((uint)((lsn)>>32))
0052 #define BLOCK_LSN(lsn) ((uint)(lsn))
0053
0054
0055 #define CYCLE_LSN_DISK(lsn) (((__be32 *)&(lsn))[0])
0056
0057 static inline xfs_lsn_t xlog_assign_lsn(uint cycle, uint block)
0058 {
0059 return ((xfs_lsn_t)cycle << 32) | block;
0060 }
0061
0062 static inline uint xlog_get_cycle(char *ptr)
0063 {
0064 if (be32_to_cpu(*(__be32 *)ptr) == XLOG_HEADER_MAGIC_NUM)
0065 return be32_to_cpu(*((__be32 *)ptr + 1));
0066 else
0067 return be32_to_cpu(*(__be32 *)ptr);
0068 }
0069
0070
0071 #define XFS_TRANSACTION 0x69
0072 #define XFS_LOG 0xaa
0073
0074 #define XLOG_UNMOUNT_TYPE 0x556e
0075
0076
0077
0078
0079
0080
0081
0082
0083 struct xfs_unmount_log_format {
0084 uint16_t magic;
0085 uint16_t pad1;
0086 uint32_t pad2;
0087 };
0088
0089
0090 #define XLOG_REG_TYPE_BFORMAT 1
0091 #define XLOG_REG_TYPE_BCHUNK 2
0092 #define XLOG_REG_TYPE_EFI_FORMAT 3
0093 #define XLOG_REG_TYPE_EFD_FORMAT 4
0094 #define XLOG_REG_TYPE_IFORMAT 5
0095 #define XLOG_REG_TYPE_ICORE 6
0096 #define XLOG_REG_TYPE_IEXT 7
0097 #define XLOG_REG_TYPE_IBROOT 8
0098 #define XLOG_REG_TYPE_ILOCAL 9
0099 #define XLOG_REG_TYPE_IATTR_EXT 10
0100 #define XLOG_REG_TYPE_IATTR_BROOT 11
0101 #define XLOG_REG_TYPE_IATTR_LOCAL 12
0102 #define XLOG_REG_TYPE_QFORMAT 13
0103 #define XLOG_REG_TYPE_DQUOT 14
0104 #define XLOG_REG_TYPE_QUOTAOFF 15
0105 #define XLOG_REG_TYPE_LRHEADER 16
0106 #define XLOG_REG_TYPE_UNMOUNT 17
0107 #define XLOG_REG_TYPE_COMMIT 18
0108 #define XLOG_REG_TYPE_TRANSHDR 19
0109 #define XLOG_REG_TYPE_ICREATE 20
0110 #define XLOG_REG_TYPE_RUI_FORMAT 21
0111 #define XLOG_REG_TYPE_RUD_FORMAT 22
0112 #define XLOG_REG_TYPE_CUI_FORMAT 23
0113 #define XLOG_REG_TYPE_CUD_FORMAT 24
0114 #define XLOG_REG_TYPE_BUI_FORMAT 25
0115 #define XLOG_REG_TYPE_BUD_FORMAT 26
0116 #define XLOG_REG_TYPE_ATTRI_FORMAT 27
0117 #define XLOG_REG_TYPE_ATTRD_FORMAT 28
0118 #define XLOG_REG_TYPE_ATTR_NAME 29
0119 #define XLOG_REG_TYPE_ATTR_VALUE 30
0120 #define XLOG_REG_TYPE_MAX 30
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134 #define XLOG_START_TRANS 0x01
0135 #define XLOG_COMMIT_TRANS 0x02
0136 #define XLOG_CONTINUE_TRANS 0x04
0137 #define XLOG_WAS_CONT_TRANS 0x08
0138 #define XLOG_END_TRANS 0x10
0139 #define XLOG_UNMOUNT_TRANS 0x20
0140
0141
0142 typedef struct xlog_op_header {
0143 __be32 oh_tid;
0144 __be32 oh_len;
0145 __u8 oh_clientid;
0146 __u8 oh_flags;
0147 __u16 oh_res2;
0148 } xlog_op_header_t;
0149
0150
0151 #define XLOG_FMT_UNKNOWN 0
0152 #define XLOG_FMT_LINUX_LE 1
0153 #define XLOG_FMT_LINUX_BE 2
0154 #define XLOG_FMT_IRIX_BE 3
0155
0156
0157 #ifdef XFS_NATIVE_HOST
0158 #define XLOG_FMT XLOG_FMT_LINUX_BE
0159 #else
0160 #define XLOG_FMT XLOG_FMT_LINUX_LE
0161 #endif
0162
0163 typedef struct xlog_rec_header {
0164 __be32 h_magicno;
0165 __be32 h_cycle;
0166 __be32 h_version;
0167 __be32 h_len;
0168 __be64 h_lsn;
0169 __be64 h_tail_lsn;
0170 __le32 h_crc;
0171 __be32 h_prev_block;
0172 __be32 h_num_logops;
0173 __be32 h_cycle_data[XLOG_HEADER_CYCLE_SIZE / BBSIZE];
0174
0175 __be32 h_fmt;
0176 uuid_t h_fs_uuid;
0177 __be32 h_size;
0178 } xlog_rec_header_t;
0179
0180 typedef struct xlog_rec_ext_header {
0181 __be32 xh_cycle;
0182 __be32 xh_cycle_data[XLOG_HEADER_CYCLE_SIZE / BBSIZE];
0183 } xlog_rec_ext_header_t;
0184
0185
0186
0187
0188 typedef union xlog_in_core2 {
0189 xlog_rec_header_t hic_header;
0190 xlog_rec_ext_header_t hic_xheader;
0191 char hic_sector[XLOG_HEADER_SIZE];
0192 } xlog_in_core_2_t;
0193
0194
0195 typedef struct xfs_log_iovec {
0196 void *i_addr;
0197 int i_len;
0198 uint i_type;
0199 } xfs_log_iovec_t;
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213 typedef struct xfs_trans_header {
0214 uint th_magic;
0215 uint th_type;
0216 int32_t th_tid;
0217 uint th_num_items;
0218 } xfs_trans_header_t;
0219
0220 #define XFS_TRANS_HEADER_MAGIC 0x5452414e
0221
0222
0223
0224
0225 #define XFS_TRANS_CHECKPOINT 40
0226
0227
0228
0229
0230 #define XFS_LI_EFI 0x1236
0231 #define XFS_LI_EFD 0x1237
0232 #define XFS_LI_IUNLINK 0x1238
0233 #define XFS_LI_INODE 0x123b
0234 #define XFS_LI_BUF 0x123c
0235 #define XFS_LI_DQUOT 0x123d
0236 #define XFS_LI_QUOTAOFF 0x123e
0237 #define XFS_LI_ICREATE 0x123f
0238 #define XFS_LI_RUI 0x1240
0239 #define XFS_LI_RUD 0x1241
0240 #define XFS_LI_CUI 0x1242
0241 #define XFS_LI_CUD 0x1243
0242 #define XFS_LI_BUI 0x1244
0243 #define XFS_LI_BUD 0x1245
0244 #define XFS_LI_ATTRI 0x1246
0245 #define XFS_LI_ATTRD 0x1247
0246
0247 #define XFS_LI_TYPE_DESC \
0248 { XFS_LI_EFI, "XFS_LI_EFI" }, \
0249 { XFS_LI_EFD, "XFS_LI_EFD" }, \
0250 { XFS_LI_IUNLINK, "XFS_LI_IUNLINK" }, \
0251 { XFS_LI_INODE, "XFS_LI_INODE" }, \
0252 { XFS_LI_BUF, "XFS_LI_BUF" }, \
0253 { XFS_LI_DQUOT, "XFS_LI_DQUOT" }, \
0254 { XFS_LI_QUOTAOFF, "XFS_LI_QUOTAOFF" }, \
0255 { XFS_LI_ICREATE, "XFS_LI_ICREATE" }, \
0256 { XFS_LI_RUI, "XFS_LI_RUI" }, \
0257 { XFS_LI_RUD, "XFS_LI_RUD" }, \
0258 { XFS_LI_CUI, "XFS_LI_CUI" }, \
0259 { XFS_LI_CUD, "XFS_LI_CUD" }, \
0260 { XFS_LI_BUI, "XFS_LI_BUI" }, \
0261 { XFS_LI_BUD, "XFS_LI_BUD" }, \
0262 { XFS_LI_ATTRI, "XFS_LI_ATTRI" }, \
0263 { XFS_LI_ATTRD, "XFS_LI_ATTRD" }
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273 struct xfs_inode_log_format {
0274 uint16_t ilf_type;
0275 uint16_t ilf_size;
0276 uint32_t ilf_fields;
0277 uint16_t ilf_asize;
0278 uint16_t ilf_dsize;
0279 uint32_t ilf_pad;
0280 uint64_t ilf_ino;
0281 union {
0282 uint32_t ilfu_rdev;
0283 uint8_t __pad[16];
0284 } ilf_u;
0285 int64_t ilf_blkno;
0286 int32_t ilf_len;
0287 int32_t ilf_boffset;
0288 };
0289
0290
0291
0292
0293
0294
0295 struct xfs_inode_log_format_32 {
0296 uint16_t ilf_type;
0297 uint16_t ilf_size;
0298 uint32_t ilf_fields;
0299 uint16_t ilf_asize;
0300 uint16_t ilf_dsize;
0301 uint64_t ilf_ino;
0302 union {
0303 uint32_t ilfu_rdev;
0304 uint8_t __pad[16];
0305 } ilf_u;
0306 int64_t ilf_blkno;
0307 int32_t ilf_len;
0308 int32_t ilf_boffset;
0309 } __attribute__((packed));
0310
0311
0312
0313
0314
0315 #define XFS_ILOG_CORE 0x001
0316 #define XFS_ILOG_DDATA 0x002
0317 #define XFS_ILOG_DEXT 0x004
0318 #define XFS_ILOG_DBROOT 0x008
0319 #define XFS_ILOG_DEV 0x010
0320 #define XFS_ILOG_UUID 0x020
0321 #define XFS_ILOG_ADATA 0x040
0322 #define XFS_ILOG_AEXT 0x080
0323 #define XFS_ILOG_ABROOT 0x100
0324 #define XFS_ILOG_DOWNER 0x200
0325 #define XFS_ILOG_AOWNER 0x400
0326
0327
0328
0329
0330
0331
0332
0333
0334 #define XFS_ILOG_TIMESTAMP 0x4000
0335
0336 #define XFS_ILOG_NONCORE (XFS_ILOG_DDATA | XFS_ILOG_DEXT | \
0337 XFS_ILOG_DBROOT | XFS_ILOG_DEV | \
0338 XFS_ILOG_ADATA | XFS_ILOG_AEXT | \
0339 XFS_ILOG_ABROOT | XFS_ILOG_DOWNER | \
0340 XFS_ILOG_AOWNER)
0341
0342 #define XFS_ILOG_DFORK (XFS_ILOG_DDATA | XFS_ILOG_DEXT | \
0343 XFS_ILOG_DBROOT)
0344
0345 #define XFS_ILOG_AFORK (XFS_ILOG_ADATA | XFS_ILOG_AEXT | \
0346 XFS_ILOG_ABROOT)
0347
0348 #define XFS_ILOG_ALL (XFS_ILOG_CORE | XFS_ILOG_DDATA | \
0349 XFS_ILOG_DEXT | XFS_ILOG_DBROOT | \
0350 XFS_ILOG_DEV | XFS_ILOG_ADATA | \
0351 XFS_ILOG_AEXT | XFS_ILOG_ABROOT | \
0352 XFS_ILOG_TIMESTAMP | XFS_ILOG_DOWNER | \
0353 XFS_ILOG_AOWNER)
0354
0355 static inline int xfs_ilog_fbroot(int w)
0356 {
0357 return (w == XFS_DATA_FORK ? XFS_ILOG_DBROOT : XFS_ILOG_ABROOT);
0358 }
0359
0360 static inline int xfs_ilog_fext(int w)
0361 {
0362 return (w == XFS_DATA_FORK ? XFS_ILOG_DEXT : XFS_ILOG_AEXT);
0363 }
0364
0365 static inline int xfs_ilog_fdata(int w)
0366 {
0367 return (w == XFS_DATA_FORK ? XFS_ILOG_DDATA : XFS_ILOG_ADATA);
0368 }
0369
0370
0371
0372
0373
0374
0375
0376 typedef uint64_t xfs_log_timestamp_t;
0377
0378
0379 struct xfs_log_legacy_timestamp {
0380 int32_t t_sec;
0381 int32_t t_nsec;
0382 };
0383
0384
0385
0386
0387
0388 struct xfs_log_dinode {
0389 uint16_t di_magic;
0390 uint16_t di_mode;
0391 int8_t di_version;
0392 int8_t di_format;
0393 uint8_t di_pad3[2];
0394 uint32_t di_uid;
0395 uint32_t di_gid;
0396 uint32_t di_nlink;
0397 uint16_t di_projid_lo;
0398 uint16_t di_projid_hi;
0399 union {
0400
0401 uint64_t di_big_nextents;
0402
0403
0404 uint64_t di_v3_pad;
0405
0406
0407 struct {
0408 uint8_t di_v2_pad[6];
0409 uint16_t di_flushiter;
0410 };
0411 };
0412 xfs_log_timestamp_t di_atime;
0413 xfs_log_timestamp_t di_mtime;
0414 xfs_log_timestamp_t di_ctime;
0415 xfs_fsize_t di_size;
0416 xfs_rfsblock_t di_nblocks;
0417 xfs_extlen_t di_extsize;
0418 union {
0419
0420
0421
0422
0423 struct {
0424 uint32_t di_nextents;
0425 uint16_t di_anextents;
0426 } __packed;
0427
0428
0429 struct {
0430 uint32_t di_big_anextents;
0431 uint16_t di_nrext64_pad;
0432 } __packed;
0433 } __packed;
0434 uint8_t di_forkoff;
0435 int8_t di_aformat;
0436 uint32_t di_dmevmask;
0437 uint16_t di_dmstate;
0438 uint16_t di_flags;
0439 uint32_t di_gen;
0440
0441
0442 xfs_agino_t di_next_unlinked;
0443
0444
0445 uint32_t di_crc;
0446 uint64_t di_changecount;
0447
0448
0449
0450
0451
0452
0453
0454
0455 xfs_lsn_t di_lsn;
0456
0457 uint64_t di_flags2;
0458 uint32_t di_cowextsize;
0459 uint8_t di_pad2[12];
0460
0461
0462 xfs_log_timestamp_t di_crtime;
0463 xfs_ino_t di_ino;
0464 uuid_t di_uuid;
0465
0466
0467 };
0468
0469 #define xfs_log_dinode_size(mp) \
0470 (xfs_has_v3inodes((mp)) ? \
0471 sizeof(struct xfs_log_dinode) : \
0472 offsetof(struct xfs_log_dinode, di_next_unlinked))
0473
0474
0475
0476
0477
0478
0479 #define XFS_BLF_CHUNK 128
0480 #define XFS_BLF_SHIFT 7
0481 #define BIT_TO_WORD_SHIFT 5
0482 #define NBWORD (NBBY * sizeof(unsigned int))
0483
0484
0485
0486
0487
0488 #define XFS_BLF_INODE_BUF (1<<0)
0489
0490
0491
0492
0493
0494 #define XFS_BLF_CANCEL (1<<1)
0495
0496
0497
0498
0499
0500 #define XFS_BLF_UDQUOT_BUF (1<<2)
0501 #define XFS_BLF_PDQUOT_BUF (1<<3)
0502 #define XFS_BLF_GDQUOT_BUF (1<<4)
0503
0504
0505
0506
0507
0508
0509
0510
0511
0512
0513
0514
0515
0516
0517 #define __XFS_BLF_DATAMAP_SIZE ((XFS_MAX_BLOCKSIZE / XFS_BLF_CHUNK) / NBWORD)
0518 #define XFS_BLF_DATAMAP_SIZE (__XFS_BLF_DATAMAP_SIZE + 1)
0519
0520 typedef struct xfs_buf_log_format {
0521 unsigned short blf_type;
0522 unsigned short blf_size;
0523 unsigned short blf_flags;
0524 unsigned short blf_len;
0525 int64_t blf_blkno;
0526 unsigned int blf_map_size;
0527 unsigned int blf_data_map[XFS_BLF_DATAMAP_SIZE];
0528 } xfs_buf_log_format_t;
0529
0530
0531
0532
0533
0534
0535
0536
0537
0538 #define XFS_BLFT_BITS 5
0539 #define XFS_BLFT_SHIFT 11
0540 #define XFS_BLFT_MASK (((1 << XFS_BLFT_BITS) - 1) << XFS_BLFT_SHIFT)
0541
0542 enum xfs_blft {
0543 XFS_BLFT_UNKNOWN_BUF = 0,
0544 XFS_BLFT_UDQUOT_BUF,
0545 XFS_BLFT_PDQUOT_BUF,
0546 XFS_BLFT_GDQUOT_BUF,
0547 XFS_BLFT_BTREE_BUF,
0548 XFS_BLFT_AGF_BUF,
0549 XFS_BLFT_AGFL_BUF,
0550 XFS_BLFT_AGI_BUF,
0551 XFS_BLFT_DINO_BUF,
0552 XFS_BLFT_SYMLINK_BUF,
0553 XFS_BLFT_DIR_BLOCK_BUF,
0554 XFS_BLFT_DIR_DATA_BUF,
0555 XFS_BLFT_DIR_FREE_BUF,
0556 XFS_BLFT_DIR_LEAF1_BUF,
0557 XFS_BLFT_DIR_LEAFN_BUF,
0558 XFS_BLFT_DA_NODE_BUF,
0559 XFS_BLFT_ATTR_LEAF_BUF,
0560 XFS_BLFT_ATTR_RMT_BUF,
0561 XFS_BLFT_SB_BUF,
0562 XFS_BLFT_RTBITMAP_BUF,
0563 XFS_BLFT_RTSUMMARY_BUF,
0564 XFS_BLFT_MAX_BUF = (1 << XFS_BLFT_BITS),
0565 };
0566
0567 static inline void
0568 xfs_blft_to_flags(struct xfs_buf_log_format *blf, enum xfs_blft type)
0569 {
0570 ASSERT(type > XFS_BLFT_UNKNOWN_BUF && type < XFS_BLFT_MAX_BUF);
0571 blf->blf_flags &= ~XFS_BLFT_MASK;
0572 blf->blf_flags |= ((type << XFS_BLFT_SHIFT) & XFS_BLFT_MASK);
0573 }
0574
0575 static inline uint16_t
0576 xfs_blft_from_flags(struct xfs_buf_log_format *blf)
0577 {
0578 return (blf->blf_flags & XFS_BLFT_MASK) >> XFS_BLFT_SHIFT;
0579 }
0580
0581
0582
0583
0584 typedef struct xfs_extent {
0585 xfs_fsblock_t ext_start;
0586 xfs_extlen_t ext_len;
0587 } xfs_extent_t;
0588
0589
0590
0591
0592
0593
0594
0595 typedef struct xfs_extent_32 {
0596 uint64_t ext_start;
0597 uint32_t ext_len;
0598 } __attribute__((packed)) xfs_extent_32_t;
0599
0600 typedef struct xfs_extent_64 {
0601 uint64_t ext_start;
0602 uint32_t ext_len;
0603 uint32_t ext_pad;
0604 } xfs_extent_64_t;
0605
0606
0607
0608
0609
0610
0611 typedef struct xfs_efi_log_format {
0612 uint16_t efi_type;
0613 uint16_t efi_size;
0614 uint32_t efi_nextents;
0615 uint64_t efi_id;
0616 xfs_extent_t efi_extents[1];
0617 } xfs_efi_log_format_t;
0618
0619 typedef struct xfs_efi_log_format_32 {
0620 uint16_t efi_type;
0621 uint16_t efi_size;
0622 uint32_t efi_nextents;
0623 uint64_t efi_id;
0624 xfs_extent_32_t efi_extents[1];
0625 } __attribute__((packed)) xfs_efi_log_format_32_t;
0626
0627 typedef struct xfs_efi_log_format_64 {
0628 uint16_t efi_type;
0629 uint16_t efi_size;
0630 uint32_t efi_nextents;
0631 uint64_t efi_id;
0632 xfs_extent_64_t efi_extents[1];
0633 } xfs_efi_log_format_64_t;
0634
0635
0636
0637
0638
0639
0640 typedef struct xfs_efd_log_format {
0641 uint16_t efd_type;
0642 uint16_t efd_size;
0643 uint32_t efd_nextents;
0644 uint64_t efd_efi_id;
0645 xfs_extent_t efd_extents[1];
0646 } xfs_efd_log_format_t;
0647
0648 typedef struct xfs_efd_log_format_32 {
0649 uint16_t efd_type;
0650 uint16_t efd_size;
0651 uint32_t efd_nextents;
0652 uint64_t efd_efi_id;
0653 xfs_extent_32_t efd_extents[1];
0654 } __attribute__((packed)) xfs_efd_log_format_32_t;
0655
0656 typedef struct xfs_efd_log_format_64 {
0657 uint16_t efd_type;
0658 uint16_t efd_size;
0659 uint32_t efd_nextents;
0660 uint64_t efd_efi_id;
0661 xfs_extent_64_t efd_extents[1];
0662 } xfs_efd_log_format_64_t;
0663
0664
0665
0666
0667 struct xfs_map_extent {
0668 uint64_t me_owner;
0669 uint64_t me_startblock;
0670 uint64_t me_startoff;
0671 uint32_t me_len;
0672 uint32_t me_flags;
0673 };
0674
0675
0676 #define XFS_RMAP_EXTENT_MAP 1
0677 #define XFS_RMAP_EXTENT_MAP_SHARED 2
0678 #define XFS_RMAP_EXTENT_UNMAP 3
0679 #define XFS_RMAP_EXTENT_UNMAP_SHARED 4
0680 #define XFS_RMAP_EXTENT_CONVERT 5
0681 #define XFS_RMAP_EXTENT_CONVERT_SHARED 6
0682 #define XFS_RMAP_EXTENT_ALLOC 7
0683 #define XFS_RMAP_EXTENT_FREE 8
0684 #define XFS_RMAP_EXTENT_TYPE_MASK 0xFF
0685
0686 #define XFS_RMAP_EXTENT_ATTR_FORK (1U << 31)
0687 #define XFS_RMAP_EXTENT_BMBT_BLOCK (1U << 30)
0688 #define XFS_RMAP_EXTENT_UNWRITTEN (1U << 29)
0689
0690 #define XFS_RMAP_EXTENT_FLAGS (XFS_RMAP_EXTENT_TYPE_MASK | \
0691 XFS_RMAP_EXTENT_ATTR_FORK | \
0692 XFS_RMAP_EXTENT_BMBT_BLOCK | \
0693 XFS_RMAP_EXTENT_UNWRITTEN)
0694
0695
0696
0697
0698
0699
0700 struct xfs_rui_log_format {
0701 uint16_t rui_type;
0702 uint16_t rui_size;
0703 uint32_t rui_nextents;
0704 uint64_t rui_id;
0705 struct xfs_map_extent rui_extents[];
0706 };
0707
0708 static inline size_t
0709 xfs_rui_log_format_sizeof(
0710 unsigned int nr)
0711 {
0712 return sizeof(struct xfs_rui_log_format) +
0713 nr * sizeof(struct xfs_map_extent);
0714 }
0715
0716
0717
0718
0719
0720
0721 struct xfs_rud_log_format {
0722 uint16_t rud_type;
0723 uint16_t rud_size;
0724 uint32_t __pad;
0725 uint64_t rud_rui_id;
0726 };
0727
0728
0729
0730
0731 struct xfs_phys_extent {
0732 uint64_t pe_startblock;
0733 uint32_t pe_len;
0734 uint32_t pe_flags;
0735 };
0736
0737
0738
0739 #define XFS_REFCOUNT_EXTENT_TYPE_MASK 0xFF
0740
0741 #define XFS_REFCOUNT_EXTENT_FLAGS (XFS_REFCOUNT_EXTENT_TYPE_MASK)
0742
0743
0744
0745
0746
0747
0748 struct xfs_cui_log_format {
0749 uint16_t cui_type;
0750 uint16_t cui_size;
0751 uint32_t cui_nextents;
0752 uint64_t cui_id;
0753 struct xfs_phys_extent cui_extents[];
0754 };
0755
0756 static inline size_t
0757 xfs_cui_log_format_sizeof(
0758 unsigned int nr)
0759 {
0760 return sizeof(struct xfs_cui_log_format) +
0761 nr * sizeof(struct xfs_phys_extent);
0762 }
0763
0764
0765
0766
0767
0768
0769 struct xfs_cud_log_format {
0770 uint16_t cud_type;
0771 uint16_t cud_size;
0772 uint32_t __pad;
0773 uint64_t cud_cui_id;
0774 };
0775
0776
0777
0778
0779
0780
0781
0782 #define XFS_BMAP_EXTENT_TYPE_MASK 0xFF
0783
0784 #define XFS_BMAP_EXTENT_ATTR_FORK (1U << 31)
0785 #define XFS_BMAP_EXTENT_UNWRITTEN (1U << 30)
0786
0787 #define XFS_BMAP_EXTENT_FLAGS (XFS_BMAP_EXTENT_TYPE_MASK | \
0788 XFS_BMAP_EXTENT_ATTR_FORK | \
0789 XFS_BMAP_EXTENT_UNWRITTEN)
0790
0791
0792
0793
0794
0795
0796 struct xfs_bui_log_format {
0797 uint16_t bui_type;
0798 uint16_t bui_size;
0799 uint32_t bui_nextents;
0800 uint64_t bui_id;
0801 struct xfs_map_extent bui_extents[];
0802 };
0803
0804 static inline size_t
0805 xfs_bui_log_format_sizeof(
0806 unsigned int nr)
0807 {
0808 return sizeof(struct xfs_bui_log_format) +
0809 nr * sizeof(struct xfs_map_extent);
0810 }
0811
0812
0813
0814
0815
0816
0817 struct xfs_bud_log_format {
0818 uint16_t bud_type;
0819 uint16_t bud_size;
0820 uint32_t __pad;
0821 uint64_t bud_bui_id;
0822 };
0823
0824
0825
0826
0827
0828
0829
0830 typedef struct xfs_dq_logformat {
0831 uint16_t qlf_type;
0832 uint16_t qlf_size;
0833 xfs_dqid_t qlf_id;
0834 int64_t qlf_blkno;
0835 int32_t qlf_len;
0836 uint32_t qlf_boffset;
0837 } xfs_dq_logformat_t;
0838
0839
0840
0841
0842
0843
0844
0845
0846
0847 typedef struct xfs_qoff_logformat {
0848 unsigned short qf_type;
0849 unsigned short qf_size;
0850 unsigned int qf_flags;
0851 char qf_pad[12];
0852 } xfs_qoff_logformat_t;
0853
0854
0855
0856
0857 #define XFS_UQUOTA_ACCT 0x0001
0858 #define XFS_UQUOTA_ENFD 0x0002
0859 #define XFS_UQUOTA_CHKD 0x0004
0860 #define XFS_PQUOTA_ACCT 0x0008
0861 #define XFS_OQUOTA_ENFD 0x0010
0862 #define XFS_OQUOTA_CHKD 0x0020
0863 #define XFS_GQUOTA_ACCT 0x0040
0864
0865
0866
0867
0868
0869 #define XFS_GQUOTA_ENFD 0x0080
0870 #define XFS_GQUOTA_CHKD 0x0100
0871 #define XFS_PQUOTA_ENFD 0x0200
0872 #define XFS_PQUOTA_CHKD 0x0400
0873
0874 #define XFS_ALL_QUOTA_ACCT \
0875 (XFS_UQUOTA_ACCT | XFS_GQUOTA_ACCT | XFS_PQUOTA_ACCT)
0876 #define XFS_ALL_QUOTA_ENFD \
0877 (XFS_UQUOTA_ENFD | XFS_GQUOTA_ENFD | XFS_PQUOTA_ENFD)
0878 #define XFS_ALL_QUOTA_CHKD \
0879 (XFS_UQUOTA_CHKD | XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD)
0880
0881 #define XFS_MOUNT_QUOTA_ALL (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\
0882 XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\
0883 XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD|\
0884 XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD|\
0885 XFS_PQUOTA_CHKD)
0886
0887
0888
0889
0890
0891
0892
0893
0894 struct xfs_icreate_log {
0895 uint16_t icl_type;
0896 uint16_t icl_size;
0897 __be32 icl_ag;
0898 __be32 icl_agbno;
0899 __be32 icl_count;
0900 __be32 icl_isize;
0901 __be32 icl_length;
0902 __be32 icl_gen;
0903 };
0904
0905
0906
0907
0908
0909 #define XFS_ATTRI_OP_FLAGS_SET 1
0910 #define XFS_ATTRI_OP_FLAGS_REMOVE 2
0911 #define XFS_ATTRI_OP_FLAGS_REPLACE 3
0912 #define XFS_ATTRI_OP_FLAGS_TYPE_MASK 0xFF
0913
0914
0915
0916
0917
0918 #define XFS_ATTRI_FILTER_MASK (XFS_ATTR_ROOT | \
0919 XFS_ATTR_SECURE | \
0920 XFS_ATTR_INCOMPLETE)
0921
0922
0923
0924
0925
0926 struct xfs_attri_log_format {
0927 uint16_t alfi_type;
0928 uint16_t alfi_size;
0929 uint32_t __pad;
0930 uint64_t alfi_id;
0931 uint64_t alfi_ino;
0932 uint32_t alfi_op_flags;
0933 uint32_t alfi_name_len;
0934 uint32_t alfi_value_len;
0935 uint32_t alfi_attr_filter;
0936 };
0937
0938 struct xfs_attrd_log_format {
0939 uint16_t alfd_type;
0940 uint16_t alfd_size;
0941 uint32_t __pad;
0942 uint64_t alfd_alf_id;
0943 };
0944
0945 #endif