| .. | .. |
|---|
| 4 | 4 | |
|---|
| 5 | 5 | #include <linux/btrfs.h> |
|---|
| 6 | 6 | #include <linux/types.h> |
|---|
| 7 | +#ifdef __KERNEL__ |
|---|
| 8 | +#include <linux/stddef.h> |
|---|
| 9 | +#else |
|---|
| 10 | +#include <stddef.h> |
|---|
| 11 | +#endif |
|---|
| 7 | 12 | |
|---|
| 8 | 13 | /* |
|---|
| 9 | 14 | * This header contains the structure definitions and constants used |
|---|
| .. | .. |
|---|
| 300 | 305 | #define BTRFS_CSUM_SIZE 32 |
|---|
| 301 | 306 | |
|---|
| 302 | 307 | /* csum types */ |
|---|
| 303 | | -#define BTRFS_CSUM_TYPE_CRC32 0 |
|---|
| 308 | +enum btrfs_csum_type { |
|---|
| 309 | + BTRFS_CSUM_TYPE_CRC32 = 0, |
|---|
| 310 | + BTRFS_CSUM_TYPE_XXHASH = 1, |
|---|
| 311 | + BTRFS_CSUM_TYPE_SHA256 = 2, |
|---|
| 312 | + BTRFS_CSUM_TYPE_BLAKE2 = 3, |
|---|
| 313 | +}; |
|---|
| 304 | 314 | |
|---|
| 305 | 315 | /* |
|---|
| 306 | 316 | * flags definitions for directory entry item type |
|---|
| 307 | 317 | * |
|---|
| 308 | 318 | * Used by: |
|---|
| 309 | 319 | * struct btrfs_dir_item.type |
|---|
| 320 | + * |
|---|
| 321 | + * Values 0..7 must match common file type values in fs_types.h. |
|---|
| 310 | 322 | */ |
|---|
| 311 | 323 | #define BTRFS_FT_UNKNOWN 0 |
|---|
| 312 | 324 | #define BTRFS_FT_REG_FILE 1 |
|---|
| .. | .. |
|---|
| 458 | 470 | #define BTRFS_SUPER_FLAG_METADUMP (1ULL << 33) |
|---|
| 459 | 471 | #define BTRFS_SUPER_FLAG_METADUMP_V2 (1ULL << 34) |
|---|
| 460 | 472 | #define BTRFS_SUPER_FLAG_CHANGING_FSID (1ULL << 35) |
|---|
| 473 | +#define BTRFS_SUPER_FLAG_CHANGING_FSID_V2 (1ULL << 36) |
|---|
| 461 | 474 | |
|---|
| 462 | 475 | |
|---|
| 463 | 476 | /* |
|---|
| .. | .. |
|---|
| 510 | 523 | __u8 type; |
|---|
| 511 | 524 | __le64 offset; |
|---|
| 512 | 525 | } __attribute__ ((__packed__)); |
|---|
| 513 | | - |
|---|
| 514 | | -/* old style backrefs item */ |
|---|
| 515 | | -struct btrfs_extent_ref_v0 { |
|---|
| 516 | | - __le64 root; |
|---|
| 517 | | - __le64 generation; |
|---|
| 518 | | - __le64 objectid; |
|---|
| 519 | | - __le32 count; |
|---|
| 520 | | -} __attribute__ ((__packed__)); |
|---|
| 521 | | - |
|---|
| 522 | 526 | |
|---|
| 523 | 527 | /* dev extents record free space on individual devices. The owner |
|---|
| 524 | 528 | * field points back to the chunk allocation mapping tree that allocated |
|---|
| .. | .. |
|---|
| 646 | 650 | } __attribute__ ((__packed__)); |
|---|
| 647 | 651 | |
|---|
| 648 | 652 | /* |
|---|
| 653 | + * Btrfs root item used to be smaller than current size. The old format ends |
|---|
| 654 | + * at where member generation_v2 is. |
|---|
| 655 | + */ |
|---|
| 656 | +static inline __u32 btrfs_legacy_root_item_size(void) |
|---|
| 657 | +{ |
|---|
| 658 | + return offsetof(struct btrfs_root_item, generation_v2); |
|---|
| 659 | +} |
|---|
| 660 | + |
|---|
| 661 | +/* |
|---|
| 649 | 662 | * this is used for both forward and backward root refs |
|---|
| 650 | 663 | */ |
|---|
| 651 | 664 | struct btrfs_root_ref { |
|---|
| .. | .. |
|---|
| 732 | 745 | __le64 unused[4]; |
|---|
| 733 | 746 | } __attribute__ ((__packed__)); |
|---|
| 734 | 747 | |
|---|
| 735 | | -#define BTRFS_FILE_EXTENT_INLINE 0 |
|---|
| 736 | | -#define BTRFS_FILE_EXTENT_REG 1 |
|---|
| 737 | | -#define BTRFS_FILE_EXTENT_PREALLOC 2 |
|---|
| 738 | | -#define BTRFS_FILE_EXTENT_TYPES 2 |
|---|
| 748 | +enum { |
|---|
| 749 | + BTRFS_FILE_EXTENT_INLINE = 0, |
|---|
| 750 | + BTRFS_FILE_EXTENT_REG = 1, |
|---|
| 751 | + BTRFS_FILE_EXTENT_PREALLOC = 2, |
|---|
| 752 | + BTRFS_NR_FILE_EXTENT_TYPES = 3, |
|---|
| 753 | +}; |
|---|
| 739 | 754 | |
|---|
| 740 | 755 | struct btrfs_file_extent_item { |
|---|
| 741 | 756 | /* |
|---|
| .. | .. |
|---|
| 803 | 818 | |
|---|
| 804 | 819 | #define BTRFS_DEV_REPLACE_ITEM_CONT_READING_FROM_SRCDEV_MODE_ALWAYS 0 |
|---|
| 805 | 820 | #define BTRFS_DEV_REPLACE_ITEM_CONT_READING_FROM_SRCDEV_MODE_AVOID 1 |
|---|
| 806 | | -#define BTRFS_DEV_REPLACE_ITEM_STATE_NEVER_STARTED 0 |
|---|
| 807 | | -#define BTRFS_DEV_REPLACE_ITEM_STATE_STARTED 1 |
|---|
| 808 | | -#define BTRFS_DEV_REPLACE_ITEM_STATE_SUSPENDED 2 |
|---|
| 809 | | -#define BTRFS_DEV_REPLACE_ITEM_STATE_FINISHED 3 |
|---|
| 810 | | -#define BTRFS_DEV_REPLACE_ITEM_STATE_CANCELED 4 |
|---|
| 811 | 821 | |
|---|
| 812 | 822 | struct btrfs_dev_replace_item { |
|---|
| 813 | 823 | /* |
|---|
| .. | .. |
|---|
| 836 | 846 | #define BTRFS_BLOCK_GROUP_RAID10 (1ULL << 6) |
|---|
| 837 | 847 | #define BTRFS_BLOCK_GROUP_RAID5 (1ULL << 7) |
|---|
| 838 | 848 | #define BTRFS_BLOCK_GROUP_RAID6 (1ULL << 8) |
|---|
| 849 | +#define BTRFS_BLOCK_GROUP_RAID1C3 (1ULL << 9) |
|---|
| 850 | +#define BTRFS_BLOCK_GROUP_RAID1C4 (1ULL << 10) |
|---|
| 839 | 851 | #define BTRFS_BLOCK_GROUP_RESERVED (BTRFS_AVAIL_ALLOC_BIT_SINGLE | \ |
|---|
| 840 | 852 | BTRFS_SPACE_INFO_GLOBAL_RSV) |
|---|
| 841 | 853 | |
|---|
| .. | .. |
|---|
| 847 | 859 | BTRFS_RAID_SINGLE, |
|---|
| 848 | 860 | BTRFS_RAID_RAID5, |
|---|
| 849 | 861 | BTRFS_RAID_RAID6, |
|---|
| 862 | + BTRFS_RAID_RAID1C3, |
|---|
| 863 | + BTRFS_RAID_RAID1C4, |
|---|
| 850 | 864 | BTRFS_NR_RAID_TYPES |
|---|
| 851 | 865 | }; |
|---|
| 852 | 866 | |
|---|
| .. | .. |
|---|
| 856 | 870 | |
|---|
| 857 | 871 | #define BTRFS_BLOCK_GROUP_PROFILE_MASK (BTRFS_BLOCK_GROUP_RAID0 | \ |
|---|
| 858 | 872 | BTRFS_BLOCK_GROUP_RAID1 | \ |
|---|
| 873 | + BTRFS_BLOCK_GROUP_RAID1C3 | \ |
|---|
| 874 | + BTRFS_BLOCK_GROUP_RAID1C4 | \ |
|---|
| 859 | 875 | BTRFS_BLOCK_GROUP_RAID5 | \ |
|---|
| 860 | 876 | BTRFS_BLOCK_GROUP_RAID6 | \ |
|---|
| 861 | 877 | BTRFS_BLOCK_GROUP_DUP | \ |
|---|
| 862 | 878 | BTRFS_BLOCK_GROUP_RAID10) |
|---|
| 863 | 879 | #define BTRFS_BLOCK_GROUP_RAID56_MASK (BTRFS_BLOCK_GROUP_RAID5 | \ |
|---|
| 864 | 880 | BTRFS_BLOCK_GROUP_RAID6) |
|---|
| 881 | + |
|---|
| 882 | +#define BTRFS_BLOCK_GROUP_RAID1_MASK (BTRFS_BLOCK_GROUP_RAID1 | \ |
|---|
| 883 | + BTRFS_BLOCK_GROUP_RAID1C3 | \ |
|---|
| 884 | + BTRFS_BLOCK_GROUP_RAID1C4) |
|---|
| 865 | 885 | |
|---|
| 866 | 886 | /* |
|---|
| 867 | 887 | * We need a bit for restriper to be able to tell when chunks of type |
|---|
| .. | .. |
|---|
| 907 | 927 | #define BTRFS_FREE_SPACE_USING_BITMAPS (1ULL << 0) |
|---|
| 908 | 928 | |
|---|
| 909 | 929 | #define BTRFS_QGROUP_LEVEL_SHIFT 48 |
|---|
| 910 | | -static inline __u64 btrfs_qgroup_level(__u64 qgroupid) |
|---|
| 930 | +static inline __u16 btrfs_qgroup_level(__u64 qgroupid) |
|---|
| 911 | 931 | { |
|---|
| 912 | | - return qgroupid >> BTRFS_QGROUP_LEVEL_SHIFT; |
|---|
| 932 | + return (__u16)(qgroupid >> BTRFS_QGROUP_LEVEL_SHIFT); |
|---|
| 913 | 933 | } |
|---|
| 914 | 934 | |
|---|
| 915 | 935 | /* |
|---|