diff mbox

Btrfs-progs: add option to btrfs-debug-tree to print uuid tree only

Message ID 1369663622-6430-1-git-send-email-sbehrens@giantdisaster.de (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Stefan Behrens May 27, 2013, 2:07 p.m. UTC
Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de>
---
 debug-tree.c | 31 ++++++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 deletions(-)

Comments

David Sterba June 14, 2013, 5:15 p.m. UTC | #1
This is a nice debugging help. I'm thinking about introducing a single
option to take names of all the trees to print. Something like

btrfs-debug-tree --tree uuid,csum,root,extent /dev

(or -t for the short option). Fortunatelly the number of trees is quite
small so we would not run out of letters too soon and -u is descriptive
enough. -c for csum tree works for me as well.

So I'm adding this into integration.


thanks,
david
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/debug-tree.c b/debug-tree.c
index 0fc0ecd..dce1d81 100644
--- a/debug-tree.c
+++ b/debug-tree.c
@@ -30,13 +30,14 @@ 
 
 static int print_usage(void)
 {
-	fprintf(stderr, "usage: btrfs-debug-tree [ -e ] [ -d ] [ -r ] [ -R ]\n");
+	fprintf(stderr, "usage: btrfs-debug-tree [-e] [-d] [-r] [-R] [-u]\n");
 	fprintf(stderr, "                        [-b block_num ] device\n");
 	fprintf(stderr, "\t-e : print detailed extents info\n");
 	fprintf(stderr, "\t-d : print info of btrfs device and root tree dirs"
                     " only\n");
 	fprintf(stderr, "\t-r : print info of roots only\n");
 	fprintf(stderr, "\t-R : print info of roots and root backups\n");
+	fprintf(stderr, "\t-u : print info of uuid tree only\n");
 	fprintf(stderr, "\t-b block_num : print info of the specified block"
                     " only\n");
 	fprintf(stderr, "%s\n", BTRFS_BUILD_VERSION);
@@ -129,6 +130,7 @@  int main(int ac, char **av)
 	int slot;
 	int extent_only = 0;
 	int device_only = 0;
+	int uuid_tree_only = 0;
 	int roots_only = 0;
 	int root_backups = 0;
 	u64 block_only = 0;
@@ -138,7 +140,7 @@  int main(int ac, char **av)
 
 	while(1) {
 		int c;
-		c = getopt(ac, av, "deb:rR");
+		c = getopt(ac, av, "deb:rRu");
 		if (c < 0)
 			break;
 		switch(c) {
@@ -151,6 +153,9 @@  int main(int ac, char **av)
 			case 'r':
 				roots_only = 1;
 				break;
+			case 'u':
+				uuid_tree_only = 1;
+				break;
 			case 'R':
 				roots_only = 1;
 				root_backups = 1;
@@ -201,7 +206,7 @@  int main(int ac, char **av)
 		return 0;
 	}
 
-	if (!extent_only) {
+	if (!(extent_only || uuid_tree_only)) {
 		if (roots_only) {
 			printf("root tree: %llu level %d\n",
 			     (unsigned long long)info->tree_root->node->start,
@@ -250,7 +255,7 @@  again:
 		if (btrfs_key_type(&found_key) == BTRFS_ROOT_ITEM_KEY) {
 			unsigned long offset;
 			struct extent_buffer *buf;
-			int skip = extent_only | device_only;
+			int skip = extent_only | device_only | uuid_tree_only;
 
 			offset = btrfs_item_ptr_offset(leaf, slot);
 			read_extent_buffer(leaf, &ri, offset, sizeof(ri));
@@ -268,9 +273,9 @@  again:
 					printf("root");
 				break;
 			case BTRFS_EXTENT_TREE_OBJECTID:
-				if (!device_only)
+				if (!device_only && !uuid_tree_only)
 					skip = 0;
-				if (!extent_only && !device_only)
+				if (!skip)
 					printf("extent");
 				break;
 			case BTRFS_CHUNK_TREE_OBJECTID:
@@ -279,8 +284,10 @@  again:
 				}
 				break;
 			case BTRFS_DEV_TREE_OBJECTID:
-				skip = 0;
-				printf("device");
+				if (!uuid_tree_only)
+					skip = 0;
+				if (!skip)
+					printf("device");
 				break;
 			case BTRFS_FS_TREE_OBJECTID:
 				if (!skip) {
@@ -331,6 +338,12 @@  again:
 					printf("quota");
 				}
 				break;
+			case BTRFS_UUID_TREE_OBJECTID:
+				if (!extent_only && !device_only)
+					skip = 0;
+				if (!skip)
+					printf("uuid");
+				break;
 			case BTRFS_MULTIPLE_OBJECTIDS:
 				if (!skip) {
 					printf("multiple");
@@ -368,7 +381,7 @@  no_node:
 		goto again;
 	}
 
-	if (extent_only || device_only)
+	if (extent_only || device_only || uuid_tree_only)
 		return 0;
 
 	if (root_backups)