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>
This commit is contained in:
parent
373110d84f
commit
b2784b0fa1
|
@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue