diff options
author | Gui Hecheng <guihc.fnst@cn.fujitsu.com> | 2014-07-24 11:21:52 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2014-12-04 16:48:12 +0100 |
commit | b2784b0fa15049608b128f42a3c56303e53dff84 (patch) | |
tree | 336808abc52d1e420e0b31f77c26c634ae2f0744 | |
parent | 373110d84f3a1c5bdd305d2e6dcaeb98b5e6dbe7 (diff) |
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 <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
-rw-r--r-- | cmds-fi-disk_usage.c | 10 |
1 files changed, 6 insertions, 4 deletions
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++; } } |