Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | /* SPDX-License-Identifier: GPL-2.0 */ #ifndef _BCACHEFS_INODE_FORMAT_H #define _BCACHEFS_INODE_FORMAT_H #define BLOCKDEV_INODE_MAX 4096 #define BCACHEFS_ROOT_INO 4096 struct bch_inode { struct bch_val v; __le64 bi_hash_seed; __le32 bi_flags; __le16 bi_mode; __u8 fields[]; } __packed __aligned(8); struct bch_inode_v2 { struct bch_val v; __le64 bi_journal_seq; __le64 bi_hash_seed; __le64 bi_flags; __le16 bi_mode; __u8 fields[]; } __packed __aligned(8); struct bch_inode_v3 { struct bch_val v; __le64 bi_journal_seq; __le64 bi_hash_seed; __le64 bi_flags; __le64 bi_sectors; __le64 bi_size; __le64 bi_version; __u8 fields[]; } __packed __aligned(8); #define INODEv3_FIELDS_START_INITIAL 6 #define INODEv3_FIELDS_START_CUR (offsetof(struct bch_inode_v3, fields) / sizeof(__u64)) struct bch_inode_generation { struct bch_val v; __le32 bi_generation; __le32 pad; } __packed __aligned(8); /* * bi_subvol and bi_parent_subvol are only set for subvolume roots: */ #define BCH_INODE_FIELDS_v2() \ x(bi_atime, 96) \ x(bi_ctime, 96) \ x(bi_mtime, 96) \ x(bi_otime, 96) \ x(bi_size, 64) \ x(bi_sectors, 64) \ x(bi_uid, 32) \ x(bi_gid, 32) \ x(bi_nlink, 32) \ x(bi_generation, 32) \ x(bi_dev, 32) \ x(bi_data_checksum, 8) \ x(bi_compression, 8) \ x(bi_project, 32) \ x(bi_background_compression, 8) \ x(bi_data_replicas, 8) \ x(bi_promote_target, 16) \ x(bi_foreground_target, 16) \ x(bi_background_target, 16) \ x(bi_erasure_code, 16) \ x(bi_fields_set, 16) \ x(bi_dir, 64) \ x(bi_dir_offset, 64) \ x(bi_subvol, 32) \ x(bi_parent_subvol, 32) #define BCH_INODE_FIELDS_v3() \ x(bi_atime, 96) \ x(bi_ctime, 96) \ x(bi_mtime, 96) \ x(bi_otime, 96) \ x(bi_uid, 32) \ x(bi_gid, 32) \ x(bi_nlink, 32) \ x(bi_generation, 32) \ x(bi_dev, 32) \ x(bi_data_checksum, 8) \ x(bi_compression, 8) \ x(bi_project, 32) \ x(bi_background_compression, 8) \ x(bi_data_replicas, 8) \ x(bi_promote_target, 16) \ x(bi_foreground_target, 16) \ x(bi_background_target, 16) \ x(bi_erasure_code, 16) \ x(bi_fields_set, 16) \ x(bi_dir, 64) \ x(bi_dir_offset, 64) \ x(bi_subvol, 32) \ x(bi_parent_subvol, 32) \ x(bi_nocow, 8) /* subset of BCH_INODE_FIELDS */ #define BCH_INODE_OPTS() \ x(data_checksum, 8) \ x(compression, 8) \ x(project, 32) \ x(background_compression, 8) \ x(data_replicas, 8) \ x(promote_target, 16) \ x(foreground_target, 16) \ x(background_target, 16) \ x(erasure_code, 16) \ x(nocow, 8) enum inode_opt_id { #define x(name, ...) \ Inode_opt_##name, BCH_INODE_OPTS() #undef x Inode_opt_nr, }; #define BCH_INODE_FLAGS() \ x(sync, 0) \ x(immutable, 1) \ x(append, 2) \ x(nodump, 3) \ x(noatime, 4) \ x(i_size_dirty, 5) \ x(i_sectors_dirty, 6) \ x(unlinked, 7) \ x(backptr_untrusted, 8) /* bits 20+ reserved for packed fields below: */ enum bch_inode_flags { #define x(t, n) BCH_INODE_##t = 1U << n, BCH_INODE_FLAGS() #undef x }; enum __bch_inode_flags { #define x(t, n) __BCH_INODE_##t = n, BCH_INODE_FLAGS() #undef x }; LE32_BITMASK(INODE_STR_HASH, struct bch_inode, bi_flags, 20, 24); LE32_BITMASK(INODE_NR_FIELDS, struct bch_inode, bi_flags, 24, 31); LE32_BITMASK(INODE_NEW_VARINT, struct bch_inode, bi_flags, 31, 32); LE64_BITMASK(INODEv2_STR_HASH, struct bch_inode_v2, bi_flags, 20, 24); LE64_BITMASK(INODEv2_NR_FIELDS, struct bch_inode_v2, bi_flags, 24, 31); LE64_BITMASK(INODEv3_STR_HASH, struct bch_inode_v3, bi_flags, 20, 24); LE64_BITMASK(INODEv3_NR_FIELDS, struct bch_inode_v3, bi_flags, 24, 31); LE64_BITMASK(INODEv3_FIELDS_START, struct bch_inode_v3, bi_flags, 31, 36); LE64_BITMASK(INODEv3_MODE, struct bch_inode_v3, bi_flags, 36, 52); #endif /* _BCACHEFS_INODE_FORMAT_H */ |