aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/ctree.h
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/ctree.h')
-rw-r--r--fs/btrfs/ctree.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 5181c53c1124..78f43d1102a0 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -361,6 +361,47 @@ struct btrfs_header {
361#define BTRFS_LABEL_SIZE 256 361#define BTRFS_LABEL_SIZE 256
362 362
363/* 363/*
364 * just in case we somehow lose the roots and are not able to mount,
365 * we store an array of the roots from previous transactions
366 * in the super.
367 */
368#define BTRFS_NUM_BACKUP_ROOTS 4
369struct btrfs_root_backup {
370 __le64 tree_root;
371 __le64 tree_root_gen;
372
373 __le64 chunk_root;
374 __le64 chunk_root_gen;
375
376 __le64 extent_root;
377 __le64 extent_root_gen;
378
379 __le64 fs_root;
380 __le64 fs_root_gen;
381
382 __le64 dev_root;
383 __le64 dev_root_gen;
384
385 __le64 csum_root;
386 __le64 csum_root_gen;
387
388 __le64 total_bytes;
389 __le64 bytes_used;
390 __le64 num_devices;
391 /* future */
392 __le64 unsed_64[4];
393
394 u8 tree_root_level;
395 u8 chunk_root_level;
396 u8 extent_root_level;
397 u8 fs_root_level;
398 u8 dev_root_level;
399 u8 csum_root_level;
400 /* future and to align */
401 u8 unused_8[10];
402} __attribute__ ((__packed__));
403
404/*
364 * the super block basically lists the main trees of the FS 405 * the super block basically lists the main trees of the FS
365 * it currently lacks any block count etc etc 406 * it currently lacks any block count etc etc
366 */ 407 */
@@ -406,6 +447,7 @@ struct btrfs_super_block {
406 /* future expansion */ 447 /* future expansion */
407 __le64 reserved[31]; 448 __le64 reserved[31];
408 u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE]; 449 u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE];
450 struct btrfs_root_backup super_roots[BTRFS_NUM_BACKUP_ROOTS];
409} __attribute__ ((__packed__)); 451} __attribute__ ((__packed__));
410 452
411/* 453/*
@@ -1113,6 +1155,9 @@ struct btrfs_fs_info {
1113 u64 fs_state; 1155 u64 fs_state;
1114 1156
1115 struct btrfs_delayed_root *delayed_root; 1157 struct btrfs_delayed_root *delayed_root;
1158
1159 /* next backup root to be overwritten */
1160 int backup_root_index;
1116}; 1161};
1117 1162
1118/* 1163/*
@@ -1357,6 +1402,7 @@ struct btrfs_ioctl_defrag_range_args {
1357#define BTRFS_MOUNT_ENOSPC_DEBUG (1 << 15) 1402#define BTRFS_MOUNT_ENOSPC_DEBUG (1 << 15)
1358#define BTRFS_MOUNT_AUTO_DEFRAG (1 << 16) 1403#define BTRFS_MOUNT_AUTO_DEFRAG (1 << 16)
1359#define BTRFS_MOUNT_INODE_MAP_CACHE (1 << 17) 1404#define BTRFS_MOUNT_INODE_MAP_CACHE (1 << 17)
1405#define BTRFS_MOUNT_RECOVERY (1 << 18)
1360 1406
1361#define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt) 1407#define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt)
1362#define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt) 1408#define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt)
@@ -1972,6 +2018,55 @@ static inline bool btrfs_root_readonly(struct btrfs_root *root)
1972 return root->root_item.flags & BTRFS_ROOT_SUBVOL_RDONLY; 2018 return root->root_item.flags & BTRFS_ROOT_SUBVOL_RDONLY;
1973} 2019}
1974 2020
2021/* struct btrfs_root_backup */
2022BTRFS_SETGET_STACK_FUNCS(backup_tree_root, struct btrfs_root_backup,
2023 tree_root, 64);
2024BTRFS_SETGET_STACK_FUNCS(backup_tree_root_gen, struct btrfs_root_backup,
2025 tree_root_gen, 64);
2026BTRFS_SETGET_STACK_FUNCS(backup_tree_root_level, struct btrfs_root_backup,
2027 tree_root_level, 8);
2028
2029BTRFS_SETGET_STACK_FUNCS(backup_chunk_root, struct btrfs_root_backup,
2030 chunk_root, 64);
2031BTRFS_SETGET_STACK_FUNCS(backup_chunk_root_gen, struct btrfs_root_backup,
2032 chunk_root_gen, 64);
2033BTRFS_SETGET_STACK_FUNCS(backup_chunk_root_level, struct btrfs_root_backup,
2034 chunk_root_level, 8);
2035
2036BTRFS_SETGET_STACK_FUNCS(backup_extent_root, struct btrfs_root_backup,
2037 extent_root, 64);
2038BTRFS_SETGET_STACK_FUNCS(backup_extent_root_gen, struct btrfs_root_backup,
2039 extent_root_gen, 64);
2040BTRFS_SETGET_STACK_FUNCS(backup_extent_root_level, struct btrfs_root_backup,
2041 extent_root_level, 8);
2042
2043BTRFS_SETGET_STACK_FUNCS(backup_fs_root, struct btrfs_root_backup,
2044 fs_root, 64);
2045BTRFS_SETGET_STACK_FUNCS(backup_fs_root_gen, struct btrfs_root_backup,
2046 fs_root_gen, 64);
2047BTRFS_SETGET_STACK_FUNCS(backup_fs_root_level, struct btrfs_root_backup,
2048 fs_root_level, 8);
2049
2050BTRFS_SETGET_STACK_FUNCS(backup_dev_root, struct btrfs_root_backup,
2051 dev_root, 64);
2052BTRFS_SETGET_STACK_FUNCS(backup_dev_root_gen, struct btrfs_root_backup,
2053 dev_root_gen, 64);
2054BTRFS_SETGET_STACK_FUNCS(backup_dev_root_level, struct btrfs_root_backup,
2055 dev_root_level, 8);
2056
2057BTRFS_SETGET_STACK_FUNCS(backup_csum_root, struct btrfs_root_backup,
2058 csum_root, 64);
2059BTRFS_SETGET_STACK_FUNCS(backup_csum_root_gen, struct btrfs_root_backup,
2060 csum_root_gen, 64);
2061BTRFS_SETGET_STACK_FUNCS(backup_csum_root_level, struct btrfs_root_backup,
2062 csum_root_level, 8);
2063BTRFS_SETGET_STACK_FUNCS(backup_total_bytes, struct btrfs_root_backup,
2064 total_bytes, 64);
2065BTRFS_SETGET_STACK_FUNCS(backup_bytes_used, struct btrfs_root_backup,
2066 bytes_used, 64);
2067BTRFS_SETGET_STACK_FUNCS(backup_num_devices, struct btrfs_root_backup,
2068 num_devices, 64);
2069
1975/* struct btrfs_super_block */ 2070/* struct btrfs_super_block */
1976 2071
1977BTRFS_SETGET_STACK_FUNCS(super_bytenr, struct btrfs_super_block, bytenr, 64); 2072BTRFS_SETGET_STACK_FUNCS(super_bytenr, struct btrfs_super_block, bytenr, 64);