summaryrefslogtreecommitdiff
path: root/debug-tree.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2011-11-05 14:58:41 -0400
committerChris Mason <chris.mason@oracle.com>2011-11-05 14:58:41 -0400
commit13eced9a0c2b6bd6bc38e6f0f46a1977b1167e67 (patch)
treec97a2a335337f4e0e4dabe591c6809f65d58dbc1 /debug-tree.c
parent882895d4119992af2c9b654dbb3ac88cd17fa810 (diff)
Btrfs: add the tree history log to btrfs-progs
This also adds btrfs-debug-tree -R to print the history Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'debug-tree.c')
-rw-r--r--debug-tree.c49
1 files changed, 48 insertions, 1 deletions
diff --git a/debug-tree.c b/debug-tree.c
index 91e0064f..2aeabfd7 100644
--- a/debug-tree.c
+++ b/debug-tree.c
@@ -62,6 +62,45 @@ static void print_extents(struct btrfs_root *root, struct extent_buffer *eb)
}
}
+static void print_old_roots(struct btrfs_super_block *super)
+{
+ struct btrfs_root_backup *backup;
+ int i;
+
+ for (i = 0; i < BTRFS_NUM_BACKUP_ROOTS; i++) {
+ backup = super->super_roots + i;
+ printf("btrfs root backup slot %d\n", i);
+ printf("\ttree root gen %llu block %llu\n",
+ (unsigned long long)btrfs_backup_tree_root_gen(backup),
+ (unsigned long long)btrfs_backup_tree_root(backup));
+
+ printf("\t\textent root gen %llu block %llu\n",
+ (unsigned long long)btrfs_backup_extent_root_gen(backup),
+ (unsigned long long)btrfs_backup_extent_root(backup));
+
+ printf("\t\tchunk root gen %llu block %llu\n",
+ (unsigned long long)btrfs_backup_chunk_root_gen(backup),
+ (unsigned long long)btrfs_backup_chunk_root(backup));
+
+ printf("\t\tdevice root gen %llu block %llu\n",
+ (unsigned long long)btrfs_backup_dev_root_gen(backup),
+ (unsigned long long)btrfs_backup_dev_root(backup));
+
+ printf("\t\tcsum root gen %llu block %llu\n",
+ (unsigned long long)btrfs_backup_csum_root_gen(backup),
+ (unsigned long long)btrfs_backup_csum_root(backup));
+
+ printf("\t\tfs root gen %llu block %llu\n",
+ (unsigned long long)btrfs_backup_fs_root_gen(backup),
+ (unsigned long long)btrfs_backup_fs_root(backup));
+
+ printf("\t\t%llu used %llu total %llu devices\n",
+ (unsigned long long)btrfs_backup_bytes_used(backup),
+ (unsigned long long)btrfs_backup_total_bytes(backup),
+ (unsigned long long)btrfs_backup_num_devices(backup));
+ }
+}
+
int main(int ac, char **av)
{
struct btrfs_root *root;
@@ -77,6 +116,7 @@ int main(int ac, char **av)
int extent_only = 0;
int device_only = 0;
int roots_only = 0;
+ int root_backups = 0;
u64 block_only = 0;
struct btrfs_root *tree_root_scan;
@@ -84,7 +124,7 @@ int main(int ac, char **av)
while(1) {
int c;
- c = getopt(ac, av, "deb:r");
+ c = getopt(ac, av, "deb:rR");
if (c < 0)
break;
switch(c) {
@@ -97,6 +137,10 @@ int main(int ac, char **av)
case 'r':
roots_only = 1;
break;
+ case 'R':
+ roots_only = 1;
+ root_backups = 1;
+ break;
case 'b':
block_only = atoll(optarg);
break;
@@ -289,6 +333,9 @@ again:
if (extent_only || device_only)
return 0;
+ if (root_backups)
+ print_old_roots(&root->fs_info->super_copy);
+
printf("total bytes %llu\n",
(unsigned long long)btrfs_super_total_bytes(&root->fs_info->super_copy));
printf("bytes used %llu\n",