From b2784b0fa15049608b128f42a3c56303e53dff84 Mon Sep 17 00:00:00 2001 From: Gui Hecheng Date: Thu, 24 Jul 2014 11:21:52 +0800 Subject: btrfs-progs: fix wrong data ratio for raid56 in btrfs-file-usage When run btrfs-file-usage on a btrfs with data profile raid5/6, the output message for "Free" & "Data to device ratio" seems wrong as follows: ... Device size: 100.00GiB Device allocated: 2.04GiB Device unallocated: 97.96GiB Used: 1.12MiB Free (Estimated): 197.89GiB <== Free > Device size Data to device ratio: 198 % <== > 100% Global reserve: 0.00B ... It is because the function get_raid56_used() is not iterating the chunk_info array correctly, it is just repeating adding the first chunk_info statistics. Just add a ptr to iterate over the array. Signed-off-by: Gui Hecheng Signed-off-by: David Sterba --- cmds-fi-disk_usage.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'cmds-fi-disk_usage.c') diff --git a/cmds-fi-disk_usage.c b/cmds-fi-disk_usage.c index eb645128..98b6d7fc 100644 --- a/cmds-fi-disk_usage.c +++ b/cmds-fi-disk_usage.c @@ -293,14 +293,16 @@ static struct btrfs_ioctl_space_args *load_space_info(int fd, char *path) static void get_raid56_used(int fd, struct chunk_info *chunks, int chunkcount, u64 *raid5_used, u64 *raid6_used) { + struct chunk_info *info_ptr = chunks; *raid5_used = 0; *raid6_used = 0; while (chunkcount-- > 0) { - if (chunks->type & BTRFS_BLOCK_GROUP_RAID5) - (*raid5_used) += chunks->size / (chunks->num_stripes - 1); - if (chunks->type & BTRFS_BLOCK_GROUP_RAID6) - (*raid6_used) += chunks->size / (chunks->num_stripes - 2); + if (info_ptr->type & BTRFS_BLOCK_GROUP_RAID5) + (*raid5_used) += info_ptr->size / (info_ptr->num_stripes - 1); + if (info_ptr->type & BTRFS_BLOCK_GROUP_RAID6) + (*raid6_used) += info_ptr->size / (info_ptr->num_stripes - 2); + info_ptr++; } } -- cgit v1.2.3