summaryrefslogtreecommitdiff
path: root/print-tree.c
diff options
context:
space:
mode:
authorArne Jansen <sensille@gmx.net>2012-08-07 12:37:54 +0200
committerJan Schmidt <list.btrfs@jan-o-sch.net>2012-09-04 11:15:49 +0200
commit89fe5b5f666c247aa3173745fb87c710f3a71a4a (patch)
tree7bf585132371b0982319624b2eec095005831df4 /print-tree.c
parentf99b1f1a631f3dfb8dc9ad03b9a00bdc2a231d31 (diff)
Btrfs progs: quota groups support
Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net> Signed-off-by: Arne Jansen <sensille@gmx.net>
Diffstat (limited to 'print-tree.c')
-rw-r--r--print-tree.c90
1 files changed, 88 insertions, 2 deletions
diff --git a/print-tree.c b/print-tree.c
index 527c1e45..89fc5b46 100644
--- a/print-tree.c
+++ b/print-tree.c
@@ -445,8 +445,20 @@ static void print_key_type(u64 objectid, u8 type)
case BTRFS_STRING_ITEM_KEY:
printf("STRING_ITEM");
break;
+ case BTRFS_QGROUP_STATUS_KEY:
+ printf("BTRFS_STATUS_KEY");
+ break;
+ case BTRFS_QGROUP_RELATION_KEY:
+ printf("BTRFS_QGROUP_RELATION_KEY");
+ break;
+ case BTRFS_QGROUP_INFO_KEY:
+ printf("BTRFS_QGROUP_INFO_KEY");
+ break;
+ case BTRFS_QGROUP_LIMIT_KEY:
+ printf("BTRFS_QGROUP_LIMIT_KEY");
+ break;
default:
- printf("UNKNOWN");
+ printf("UNKNOWN.%d", type);
};
}
@@ -456,6 +468,12 @@ static void print_objectid(u64 objectid, u8 type)
printf("%llu", (unsigned long long)objectid); /* device id */
return;
}
+ switch (type) {
+ case BTRFS_QGROUP_RELATION_KEY:
+ printf("%llu/%llu", objectid >> 48,
+ objectid & ((1ll << 48) - 1));
+ return;
+ }
switch (objectid) {
case BTRFS_ROOT_TREE_OBJECTID:
@@ -508,6 +526,8 @@ static void print_objectid(u64 objectid, u8 type)
break;
case BTRFS_FREE_INO_OBJECTID:
printf("FREE_INO");
+ case BTRFS_QUOTA_TREE_OBJECTID:
+ printf("QUOTA_TREE");
break;
case BTRFS_MULTIPLE_OBJECTIDS:
printf("MULTIPLE");
@@ -527,12 +547,23 @@ void btrfs_print_key(struct btrfs_disk_key *disk_key)
{
u64 objectid = btrfs_disk_key_objectid(disk_key);
u8 type = btrfs_disk_key_type(disk_key);
+ u64 offset = btrfs_disk_key_offset(disk_key);
printf("key (");
print_objectid(objectid, type);
printf(" ");
print_key_type(objectid, type);
- printf(" %llu)", (unsigned long long)btrfs_disk_key_offset(disk_key));
+ switch (type) {
+ case BTRFS_QGROUP_RELATION_KEY:
+ case BTRFS_QGROUP_INFO_KEY:
+ case BTRFS_QGROUP_LIMIT_KEY:
+ printf(" %llu/%llu)", (unsigned long long)(offset >> 48),
+ (unsigned long long)(offset & ((1ll << 48) - 1)));
+ break;
+ default:
+ printf(" %llu)", (unsigned long long)offset);
+ break;
+ }
}
void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l)
@@ -551,6 +582,9 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l)
struct btrfs_disk_key disk_key;
struct btrfs_block_group_item bg_item;
struct btrfs_dir_log_item *dlog;
+ struct btrfs_qgroup_info_item *qg_info;
+ struct btrfs_qgroup_limit_item *qg_limit;
+ struct btrfs_qgroup_status_item *qg_status;
u32 nr = btrfs_header_nritems(l);
u64 objectid;
u32 type;
@@ -688,6 +722,58 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l)
(unsigned long long)
btrfs_dev_extent_length(l, dev_extent));
break;
+ case BTRFS_QGROUP_STATUS_KEY:
+ qg_status = btrfs_item_ptr(l, i,
+ struct btrfs_qgroup_status_item);
+ printf("\t\tversion %llu generation %llu flags %#llx "
+ "scan %lld\n",
+ (unsigned long long)
+ btrfs_qgroup_status_version(l, qg_status),
+ (unsigned long long)
+ btrfs_qgroup_status_generation(l, qg_status),
+ (unsigned long long)
+ btrfs_qgroup_status_flags(l, qg_status),
+ (unsigned long long)
+ btrfs_qgroup_status_scan(l, qg_status));
+ break;
+ case BTRFS_QGROUP_RELATION_KEY:
+ break;
+ case BTRFS_QGROUP_INFO_KEY:
+ qg_info = btrfs_item_ptr(l, i,
+ struct btrfs_qgroup_info_item);
+ printf("\t\tgeneration %llu\n"
+ "\t\treferenced %lld referenced compressed %lld\n"
+ "\t\texclusive %lld exclusive compressed %lld\n",
+ (unsigned long long)
+ btrfs_qgroup_info_generation(l, qg_info),
+ (long long)
+ btrfs_qgroup_info_referenced(l, qg_info),
+ (long long)
+ btrfs_qgroup_info_referenced_compressed(l,
+ qg_info),
+ (long long)
+ btrfs_qgroup_info_exclusive(l, qg_info),
+ (long long)
+ btrfs_qgroup_info_exclusive_compressed(l,
+ qg_info));
+ break;
+ case BTRFS_QGROUP_LIMIT_KEY:
+ qg_limit = btrfs_item_ptr(l, i,
+ struct btrfs_qgroup_limit_item);
+ printf("\t\tflags %llx\n"
+ "\t\tmax referenced %lld max exclusive %lld\n"
+ "\t\trsv referenced %lld rsv exclusive %lld\n",
+ (unsigned long long)
+ btrfs_qgroup_limit_flags(l, qg_limit),
+ (long long)
+ btrfs_qgroup_limit_max_referenced(l, qg_limit),
+ (long long)
+ btrfs_qgroup_limit_max_exclusive(l, qg_limit),
+ (long long)
+ btrfs_qgroup_limit_rsv_referenced(l, qg_limit),
+ (long long)
+ btrfs_qgroup_limit_rsv_exclusive(l, qg_limit));
+ break;
case BTRFS_STRING_ITEM_KEY:
/* dirty, but it's simple */
str = l->data + btrfs_item_ptr_offset(l, i);