13
13
#include "volumes.h"
14
14
#include "raid-stripe-tree.h"
15
15
16
+ /*
17
+ * Large enough buffer size for the stringification of any key type yet short
18
+ * enough to use the stack and avoid allocations.
19
+ */
20
+ #define KEY_TYPE_BUF_SIZE 32
21
+
16
22
struct root_name_map {
17
23
u64 id ;
18
24
const char * name ;
@@ -366,6 +372,60 @@ static void print_file_extent_item(const struct extent_buffer *eb, int i)
366
372
btrfs_file_extent_compression (eb , fi ));
367
373
}
368
374
375
+ static void key_type_string (const struct btrfs_key * key , char * buf , int buf_size )
376
+ {
377
+ static const char * key_to_str [256 ] = {
378
+ [BTRFS_INODE_ITEM_KEY ] = "INODE_ITEM" ,
379
+ [BTRFS_INODE_REF_KEY ] = "INODE_REF" ,
380
+ [BTRFS_INODE_EXTREF_KEY ] = "INODE_EXTREF" ,
381
+ [BTRFS_DIR_ITEM_KEY ] = "DIR_ITEM" ,
382
+ [BTRFS_DIR_INDEX_KEY ] = "DIR_INDEX" ,
383
+ [BTRFS_DIR_LOG_ITEM_KEY ] = "DIR_LOG_ITEM" ,
384
+ [BTRFS_DIR_LOG_INDEX_KEY ] = "DIR_LOG_INDEX" ,
385
+ [BTRFS_XATTR_ITEM_KEY ] = "XATTR_ITEM" ,
386
+ [BTRFS_VERITY_DESC_ITEM_KEY ] = "VERITY_DESC_ITEM" ,
387
+ [BTRFS_VERITY_MERKLE_ITEM_KEY ] = "VERITY_MERKLE_ITEM" ,
388
+ [BTRFS_ORPHAN_ITEM_KEY ] = "ORPHAN_ITEM" ,
389
+ [BTRFS_ROOT_ITEM_KEY ] = "ROOT_ITEM" ,
390
+ [BTRFS_ROOT_REF_KEY ] = "ROOT_REF" ,
391
+ [BTRFS_ROOT_BACKREF_KEY ] = "ROOT_BACKREF" ,
392
+ [BTRFS_EXTENT_ITEM_KEY ] = "EXTENT_ITEM" ,
393
+ [BTRFS_METADATA_ITEM_KEY ] = "METADATA_ITEM" ,
394
+ [BTRFS_TREE_BLOCK_REF_KEY ] = "TREE_BLOCK_REF" ,
395
+ [BTRFS_SHARED_BLOCK_REF_KEY ] = "SHARED_BLOCK_REF" ,
396
+ [BTRFS_EXTENT_DATA_REF_KEY ] = "EXTENT_DATA_REF" ,
397
+ [BTRFS_SHARED_DATA_REF_KEY ] = "SHARED_DATA_REF" ,
398
+ [BTRFS_EXTENT_OWNER_REF_KEY ] = "EXTENT_OWNER_REF" ,
399
+ [BTRFS_EXTENT_CSUM_KEY ] = "EXTENT_CSUM" ,
400
+ [BTRFS_EXTENT_DATA_KEY ] = "EXTENT_DATA" ,
401
+ [BTRFS_BLOCK_GROUP_ITEM_KEY ] = "BLOCK_GROUP_ITEM" ,
402
+ [BTRFS_FREE_SPACE_INFO_KEY ] = "FREE_SPACE_INFO" ,
403
+ [BTRFS_FREE_SPACE_EXTENT_KEY ] = "FREE_SPACE_EXTENT" ,
404
+ [BTRFS_FREE_SPACE_BITMAP_KEY ] = "FREE_SPACE_BITMAP" ,
405
+ [BTRFS_CHUNK_ITEM_KEY ] = "CHUNK_ITEM" ,
406
+ [BTRFS_DEV_ITEM_KEY ] = "DEV_ITEM" ,
407
+ [BTRFS_DEV_EXTENT_KEY ] = "DEV_EXTENT" ,
408
+ [BTRFS_TEMPORARY_ITEM_KEY ] = "TEMPORARY_ITEM" ,
409
+ [BTRFS_DEV_REPLACE_KEY ] = "DEV_REPLACE" ,
410
+ [BTRFS_STRING_ITEM_KEY ] = "STRING_ITEM" ,
411
+ [BTRFS_QGROUP_STATUS_KEY ] = "QGROUP_STATUS" ,
412
+ [BTRFS_QGROUP_RELATION_KEY ] = "QGROUP_RELATION" ,
413
+ [BTRFS_QGROUP_INFO_KEY ] = "QGROUP_INFO" ,
414
+ [BTRFS_QGROUP_LIMIT_KEY ] = "QGROUP_LIMIT" ,
415
+ [BTRFS_PERSISTENT_ITEM_KEY ] = "PERSISTENT_ITEM" ,
416
+ [BTRFS_UUID_KEY_SUBVOL ] = "UUID_KEY_SUBVOL" ,
417
+ [BTRFS_UUID_KEY_RECEIVED_SUBVOL ] = "UUID_KEY_RECEIVED_SUBVOL" ,
418
+ [BTRFS_RAID_STRIPE_KEY ] = "RAID_STRIPE" ,
419
+ };
420
+
421
+ if (key -> type == 0 && key -> objectid == BTRFS_FREE_SPACE_OBJECTID )
422
+ scnprintf (buf , buf_size , "UNTYPED" );
423
+ else if (key_to_str [key -> type ])
424
+ scnprintf (buf , buf_size , key_to_str [key -> type ]);
425
+ else
426
+ scnprintf (buf , buf_size , "UNKNOWN.%d" , key -> type );
427
+ }
428
+
369
429
void btrfs_print_leaf (const struct extent_buffer * l )
370
430
{
371
431
struct btrfs_fs_info * fs_info ;
@@ -390,10 +450,14 @@ void btrfs_print_leaf(const struct extent_buffer *l)
390
450
btrfs_leaf_free_space (l ), btrfs_header_owner (l ));
391
451
print_eb_refs_lock (l );
392
452
for (i = 0 ; i < nr ; i ++ ) {
453
+ char key_buf [KEY_TYPE_BUF_SIZE ];
454
+
393
455
btrfs_item_key_to_cpu (l , & key , i );
394
456
type = key .type ;
395
- pr_info ("\titem %d key (%llu %u %llu) itemoff %d itemsize %d\n" ,
396
- i , key .objectid , type , key .offset ,
457
+ key_type_string (& key , key_buf , KEY_TYPE_BUF_SIZE );
458
+
459
+ pr_info ("\titem %d key (%llu %s %llu) itemoff %d itemsize %d\n" ,
460
+ i , key .objectid , key_buf , key .offset ,
397
461
btrfs_item_offset (l , i ), btrfs_item_size (l , i ));
398
462
switch (type ) {
399
463
case BTRFS_INODE_ITEM_KEY :
0 commit comments