mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
bcachefs: inode_format.h
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
82de6207fb
commit
b36425da71
@ -710,170 +710,6 @@ struct bch_reservation {
|
||||
#define BKEY_BTREE_PTR_U64s_MAX \
|
||||
(BKEY_U64s + BKEY_BTREE_PTR_VAL_U64s_MAX)
|
||||
|
||||
/* Inodes */
|
||||
|
||||
#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);
|
||||
|
||||
/* Dirents */
|
||||
|
||||
/*
|
||||
@ -1209,6 +1045,7 @@ struct bch_sb_field {
|
||||
x(ext, 13) \
|
||||
x(downgrade, 14)
|
||||
|
||||
#include "inode_format.h"
|
||||
#include "quota_format.h"
|
||||
#include "sb-counters_format.h"
|
||||
|
||||
|
166
fs/bcachefs/inode_format.h
Normal file
166
fs/bcachefs/inode_format.h
Normal file
@ -0,0 +1,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 */
|
Loading…
Reference in New Issue
Block a user