btrfs-progs: Use helper function to access btrfs_super_block->sys_chunk_array_size

btrfs_super_block->sys_chunk_array_size is stored as le32 data on
disk. However insert_temp_chunk_item() writes sys_chunk_array_size in
host cpu order. This commit fixes this by using super block access
helper functions to read and write
btrfs_super_block->sys_chunk_array_size field.

Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Chandan Rajendra 2016-12-01 19:21:14 +05:30 committed by David Sterba
parent fd60bbfcba
commit 4981c8d234
1 changed files with 6 additions and 2 deletions

View File

@ -560,14 +560,18 @@ static int insert_temp_chunk_item(int fd, struct extent_buffer *buf,
*/ */
if (type & BTRFS_BLOCK_GROUP_SYSTEM) { if (type & BTRFS_BLOCK_GROUP_SYSTEM) {
char *cur; char *cur;
u32 array_size;
cur = (char *)sb->sys_chunk_array + sb->sys_chunk_array_size; cur = (char *)sb->sys_chunk_array
+ btrfs_super_sys_array_size(sb);
memcpy(cur, &disk_key, sizeof(disk_key)); memcpy(cur, &disk_key, sizeof(disk_key));
cur += sizeof(disk_key); cur += sizeof(disk_key);
read_extent_buffer(buf, cur, (unsigned long int)chunk, read_extent_buffer(buf, cur, (unsigned long int)chunk,
btrfs_chunk_item_size(1)); btrfs_chunk_item_size(1));
sb->sys_chunk_array_size += btrfs_chunk_item_size(1) + array_size = btrfs_super_sys_array_size(sb);
array_size += btrfs_chunk_item_size(1) +
sizeof(disk_key); sizeof(disk_key);
btrfs_set_super_sys_array_size(sb, array_size);
ret = write_temp_super(fd, sb, cfg->super_bytenr); ret = write_temp_super(fd, sb, cfg->super_bytenr);
} }