/* 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 ) \
x(bi_depth, 32 ) \
x(bi_inodes_32bit, 8 ) \
x(bi_casefold, 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 ) \
x(inodes_32bit, 8 ) \
x(casefold, 8 )
enum inode_opt_id {
#define x(name, ...) \
Inode_opt_## name,
BCH_INODE_OPTS()
#undef x
Inode_opt_nr,
};
/*
* BCH_INODE_has_case_insensitive is set if any descendent is case insensitive -
* for overlayfs
*/
#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 ) \
x(has_child_snapshot, 9 ) \
x(has_case_insensitive, 10 )
/* bits 20+ reserved for packed fields below: */
enum bch_inode_flags {
#define x(t, n) BCH_INODE_## t = 1 U << 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(INODEv1_STR_HASH, struct bch_inode, bi_flags, 20 , 24 );
LE32_BITMASK(INODEv1_NR_FIELDS, struct bch_inode, bi_flags, 24 , 31 );
LE32_BITMASK(INODEv1_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 );
struct bch_inode_alloc_cursor {
struct bch_val v;
__u8 bits;
__u8 pad;
__le32 gen;
__le64 idx;
};
#endif /* _BCACHEFS_INODE_FORMAT_H */
Messung V0.5 in Prozent C=97 H=100 G=98
¤ Dauer der Verarbeitung: 0.8 Sekunden
(vorverarbeitet am 2026-06-05)
¤
*© Formatika GbR, Deutschland