@@ -147,8 +147,8 @@ static int load_chunk_info(int fd, struct chunk_info **info_ptr, int *info_count
sk->min_objectid = 0;
sk->max_objectid = (u64)-1;
- sk->max_type = 0;
- sk->min_type = (u8)-1;
+ sk->min_type = 0;
+ sk->max_type = (u8)-1;
sk->min_offset = 0;
sk->max_offset = (u64)-1;
sk->min_transid = 0;
@@ -174,20 +174,21 @@ static int load_chunk_info(int fd, struct chunk_info **info_ptr, int *info_count
off = 0;
for (i = 0; i < sk->nr_items; i++) {
struct btrfs_chunk *item;
+ u8 type;
sh = (struct btrfs_ioctl_search_header *)(args.buf +
off);
-
+ type = btrfs_search_header_type(sh);
off += sizeof(*sh);
- item = (struct btrfs_chunk *)(args.buf + off);
-
- ret = add_info_to_list(info_ptr, info_count, item);
- if (ret) {
- *info_ptr = NULL;
- return 1;
+ if (type == BTRFS_CHUNK_ITEM_KEY) {
+ item = (struct btrfs_chunk *)(args.buf + off);
+ ret = add_info_to_list(info_ptr, info_count, item);
+ if (ret) {
+ *info_ptr = NULL;
+ return 1;
+ }
}
off += btrfs_search_header_len(sh);
-
sk->min_objectid = btrfs_search_header_objectid(sh);
sk->min_type = btrfs_search_header_type(sh);
sk->min_offset = btrfs_search_header_offset(sh)+1;