Message ID | 3ab02bc2189617b9d60ec6de924f60ee3899babe.1702831226.git.kreijack@inwind.it (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [BUG] btrfs-progs: btrfs dev us: don't print uncorrect unallocated data | expand |
On 17/12/2023 17.40, Goffredo Baroncelli wrote: > From: Goffredo Baroncelli <kreijack@inwind.it> Gentle reminder > > If "btrfs dev us" is invoked by a not root user, it is imposible to > collect the chunk info data (not enough privileges). This causes > "btrfs dev us" to print as "Unallocated" value the size of the disk. > > This patch handle the case where print_device_chunks() is invoked > without the chunk info data, printing "Unallocated N/A": > > Before the patch: > > $ btrfs dev us t/ > WARNING: cannot read detailed chunk info, per-device usage will not be shown, run as root > /dev/loop0, ID: 1 > Device size: 5.00GiB > Device slack: 0.00B > Unallocated: 5.00GiB <-- Wrong > > $ sudo btrfs dev us t/ > [sudo] password for ghigo: > /dev/loop0, ID: 1 > Device size: 5.00GiB > Device slack: 0.00B > Data,single: 8.00MiB > Metadata,DUP: 512.00MiB > System,DUP: 16.00MiB > Unallocated: 4.48GiB <-- Correct > > After the patch: > $ ./btrfs dev us /tmp/t/ > WARNING: cannot read detailed chunk info, per-device usage will not be shown, run as root > /dev/loop0, ID: 1 > Device size: 5.00GiB > Device slack: 0.00B > Unallocated: N/A > > $ sudo ./btrfs dev us /tmp/t/ > [sudo] password for ghigo: > /dev/loop0, ID: 1 > Device size: 5.00GiB > Device slack: 0.00B > Data,single: 8.00MiB > Metadata,DUP: 512.00MiB > System,DUP: 16.00MiB > Unallocated: 4.48GiB > --- > cmds/filesystem-usage.c | 18 ++++++++++++++---- > 1 file changed, 14 insertions(+), 4 deletions(-) > > diff --git a/cmds/filesystem-usage.c b/cmds/filesystem-usage.c > index 0db91e9c..844dc085 100644 > --- a/cmds/filesystem-usage.c > +++ b/cmds/filesystem-usage.c > @@ -1302,10 +1302,20 @@ void print_device_chunks(const struct device_info *devinfo, > allocated += size; > > } > - pr_verbose(LOG_DEFAULT, " Unallocated: %*s%10s\n", > - (int)(20 - strlen("Unallocated")), "", > - pretty_size_mode(devinfo->size - allocated, > - unit_mode | UNITS_NEGATIVE)); > + > + /* > + * If chunkinfos is empty, we cannot compute the unallocated > + * size, so don't print uncorrect data. > + */ > + if (chunkinfos->length == 0) > + pr_verbose(LOG_DEFAULT, " Unallocated: %*s%10s\n", > + (int)(20 - strlen("Unallocated")), "", > + "N/A"); > + else > + pr_verbose(LOG_DEFAULT, " Unallocated: %*s%10s\n", > + (int)(20 - strlen("Unallocated")), "", > + pretty_size_mode(devinfo->size - allocated, > + unit_mode | UNITS_NEGATIVE)); > } > > void print_device_sizes(const struct device_info *devinfo, unsigned unit_mode)
sob is missing. Thx, Anand
Except for the missing sob, the changes look good.
Reviewed-by: Anand Jain <anand.jain@oracle.com>
Thx, Anand
diff --git a/cmds/filesystem-usage.c b/cmds/filesystem-usage.c index 0db91e9c..844dc085 100644 --- a/cmds/filesystem-usage.c +++ b/cmds/filesystem-usage.c @@ -1302,10 +1302,20 @@ void print_device_chunks(const struct device_info *devinfo, allocated += size; } - pr_verbose(LOG_DEFAULT, " Unallocated: %*s%10s\n", - (int)(20 - strlen("Unallocated")), "", - pretty_size_mode(devinfo->size - allocated, - unit_mode | UNITS_NEGATIVE)); + + /* + * If chunkinfos is empty, we cannot compute the unallocated + * size, so don't print uncorrect data. + */ + if (chunkinfos->length == 0) + pr_verbose(LOG_DEFAULT, " Unallocated: %*s%10s\n", + (int)(20 - strlen("Unallocated")), "", + "N/A"); + else + pr_verbose(LOG_DEFAULT, " Unallocated: %*s%10s\n", + (int)(20 - strlen("Unallocated")), "", + pretty_size_mode(devinfo->size - allocated, + unit_mode | UNITS_NEGATIVE)); } void print_device_sizes(const struct device_info *devinfo, unsigned unit_mode)
From: Goffredo Baroncelli <kreijack@inwind.it> If "btrfs dev us" is invoked by a not root user, it is imposible to collect the chunk info data (not enough privileges). This causes "btrfs dev us" to print as "Unallocated" value the size of the disk. This patch handle the case where print_device_chunks() is invoked without the chunk info data, printing "Unallocated N/A": Before the patch: $ btrfs dev us t/ WARNING: cannot read detailed chunk info, per-device usage will not be shown, run as root /dev/loop0, ID: 1 Device size: 5.00GiB Device slack: 0.00B Unallocated: 5.00GiB <-- Wrong $ sudo btrfs dev us t/ [sudo] password for ghigo: /dev/loop0, ID: 1 Device size: 5.00GiB Device slack: 0.00B Data,single: 8.00MiB Metadata,DUP: 512.00MiB System,DUP: 16.00MiB Unallocated: 4.48GiB <-- Correct After the patch: $ ./btrfs dev us /tmp/t/ WARNING: cannot read detailed chunk info, per-device usage will not be shown, run as root /dev/loop0, ID: 1 Device size: 5.00GiB Device slack: 0.00B Unallocated: N/A $ sudo ./btrfs dev us /tmp/t/ [sudo] password for ghigo: /dev/loop0, ID: 1 Device size: 5.00GiB Device slack: 0.00B Data,single: 8.00MiB Metadata,DUP: 512.00MiB System,DUP: 16.00MiB Unallocated: 4.48GiB --- cmds/filesystem-usage.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)