diff mbox series

[1/1] e2fsck: Add percent to files and blocks feature

Message ID 20230423082349.53474-2-megia.oscar@gmail.com
State New
Headers show
Series I want to add percent to output used/maximum files and blocks | expand

Commit Message

Oscar Megia López April 23, 2023, 8:23 a.m. UTC
I need percentages to see how disk is occupied.
Used and maximum are good, but humans work better with percentages.

When my linux boots,
I haven't enough time to remember numbers and calculate.

My PC is very fast. I can only see the message for one or two seconds.

If also I would see percentages for me would be perfect.

I think that this feature is going to be good for everyone.

Signed-off-by: Oscar Megia López <megia.oscar@gmail.com>
---
 e2fsck/unix.c | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

Comments

Andreas Dilger July 26, 2023, 4:15 p.m. UTC | #1
On Apr 23, 2023, at 02:25, Oscar Megia López <megia.oscar@gmail.com> wrote:
> 
> I need percentages to see how disk is occupied.
> Used and maximum are good, but humans work better with percentages.
> 
> When my linux boots,
> I haven't enough time to remember numbers and calculate.
> 
> My PC is very fast. I can only see the message for one or two seconds.
> 
> If also I would see percentages for me would be perfect.
> 
> I think that this feature is going to be good for everyone.
> 
> Signed-off-by: Oscar Megia López <megia.oscar@gmail.com>
> ---
> e2fsck/unix.c | 25 +++++++++++++++++++++++--
> 1 file changed, 23 insertions(+), 2 deletions(-)
> 
> diff --git a/e2fsck/unix.c b/e2fsck/unix.c
> index e5b672a2..b820ca8d 100644
> --- a/e2fsck/unix.c
> +++ b/e2fsck/unix.c
> @@ -350,6 +350,8 @@ static void check_if_skip(e2fsck_t ctx)
>    int defer_check_on_battery;
>    int broken_system_clock;
>    time_t lastcheck;
> +    char percent_files[9];
> +    char percent_blocks[9];
> 
>    if (ctx->flags & E2F_FLAG_PROBLEMS_FIXED)
>        return;
> @@ -442,14 +444,33 @@ static void check_if_skip(e2fsck_t ctx)
>        ext2fs_mark_super_dirty(fs);
>    }
> 
> +    /* Calculate percentages */
> +    if (fs->super->s_inodes_count > 0) {
> +        snprintf(percent_files, sizeof(percent_files), " (%u%%) ",
> +        ((fs->super->s_inodes_count - fs->super->s_free_inodes_count) * 100) /
> +        fs->super->s_inodes_count);
> +    } else {
> +        snprintf(percent_files, sizeof(percent_files), " ");
> +    }

Instead of snprintf() this could just be initialized at variable declaration time:

        char percent_files[8] = "";

That avoids extra runtime overhead and is no less safe. (This is adjusted to compensate
for the format change below.)

> +    if (ext2fs_blocks_count(fs->super) > 0) {
> +        snprintf(percent_blocks, sizeof(percent_blocks), " (%llu%%) ",
> +        (unsigned long long) ((ext2fs_blocks_count(fs->super) -
> +        ext2fs_free_blocks_count(fs->super)) * 100) / ext2fs_blocks_count(fs->super));
> +    } else {
> +        snprintf(percent_blocks, sizeof(percent_blocks), " ");
> +    }

This could similarly be set at initialization:

        char percent_blocks[8] = "";

>    /* Print the summary message when we're skipping a full check */
> -    log_out(ctx, _("%s: clean, %u/%u files, %llu/%llu blocks"),
> +    log_out(ctx, _("%s: clean, %u/%u%sfiles, %llu/%llu%sblocks"),

This would be more readable if it left one space after each "%s" and then didn't
include the trailing space in each string:

    log_out(ctx, _("%s: clean, %u/%u%s files, %llu/%llu%s blocks"),

Cheers, Andreas

>        ctx->device_name,
>        fs->super->s_inodes_count - fs->super->s_free_inodes_count,
>        fs->super->s_inodes_count,
> +        percent_files,
>        (unsigned long long) ext2fs_blocks_count(fs->super) -
>        ext2fs_free_blocks_count(fs->super),
> -        (unsigned long long) ext2fs_blocks_count(fs->super));
> +        (unsigned long long) ext2fs_blocks_count(fs->super),
> +        percent_blocks);
>    next_check = 100000;
>    if (fs->super->s_max_mnt_count > 0) {
>        next_check = fs->super->s_max_mnt_count - fs->super->s_mnt_count;
> -- 
> 2.40.0
>
Oscar Megia López July 27, 2023, 7:15 a.m. UTC | #2
Andreas Dilger <adilger@dilger.ca> writes:

> On Apr 23, 2023, at 02:25, Oscar Megia López <megia.oscar@gmail.com> wrote:
>> 
>> I need percentages to see how disk is occupied.
>> Used and maximum are good, but humans work better with percentages.
>> 
>> When my linux boots,
>> I haven't enough time to remember numbers and calculate.
>> 
>> My PC is very fast. I can only see the message for one or two seconds.
>> 
>> If also I would see percentages for me would be perfect.
>> 
>> I think that this feature is going to be good for everyone.
>> 
>> Signed-off-by: Oscar Megia López <megia.oscar@gmail.com>
>> ---
>> e2fsck/unix.c | 25 +++++++++++++++++++++++--
>> 1 file changed, 23 insertions(+), 2 deletions(-)
>> 
>> diff --git a/e2fsck/unix.c b/e2fsck/unix.c
>> index e5b672a2..b820ca8d 100644
>> --- a/e2fsck/unix.c
>> +++ b/e2fsck/unix.c
>> @@ -350,6 +350,8 @@ static void check_if_skip(e2fsck_t ctx)
>>    int defer_check_on_battery;
>>    int broken_system_clock;
>>    time_t lastcheck;
>> +    char percent_files[9];
>> +    char percent_blocks[9];
>> 
>>    if (ctx->flags & E2F_FLAG_PROBLEMS_FIXED)
>>        return;
>> @@ -442,14 +444,33 @@ static void check_if_skip(e2fsck_t ctx)
>>        ext2fs_mark_super_dirty(fs);
>>    }
>> 
>> +    /* Calculate percentages */
>> +    if (fs->super->s_inodes_count > 0) {
>> +        snprintf(percent_files, sizeof(percent_files), " (%u%%) ",
>> +        ((fs->super->s_inodes_count - fs->super->s_free_inodes_count) * 100) /
>> +        fs->super->s_inodes_count);
>> +    } else {
>> +        snprintf(percent_files, sizeof(percent_files), " ");
>> +    }
>
> Instead of snprintf() this could just be initialized at variable declaration time:
>
>         char percent_files[8] = "";
>
> That avoids extra runtime overhead and is no less safe. (This is adjusted to compensate
> for the format change below.)
>

Thanks for your advice, I will apply it.

>> +    if (ext2fs_blocks_count(fs->super) > 0) {
>> +        snprintf(percent_blocks, sizeof(percent_blocks), " (%llu%%) ",
>> +        (unsigned long long) ((ext2fs_blocks_count(fs->super) -
>> +        ext2fs_free_blocks_count(fs->super)) * 100) / ext2fs_blocks_count(fs->super));
>> +    } else {
>> +        snprintf(percent_blocks, sizeof(percent_blocks), " ");
>> +    }
>
> This could similarly be set at initialization:
>
>         char percent_blocks[8] = "";
>

Thanks for your advice, I will apply it.

>>    /* Print the summary message when we're skipping a full check */
>> -    log_out(ctx, _("%s: clean, %u/%u files, %llu/%llu blocks"),
>> +    log_out(ctx, _("%s: clean, %u/%u%sfiles, %llu/%llu%sblocks"),
>
> This would be more readable if it left one space after each "%s" and then didn't
> include the trailing space in each string:
>
>     log_out(ctx, _("%s: clean, %u/%u%s files, %llu/%llu%s blocks"),
>

You are right. I will apply it.

> Cheers, Andreas
>

Very thanks Andreas for your advices and your time.

I will apply these changes to my patch.

Regards
Oscar

>>        ctx->device_name,
>>        fs->super->s_inodes_count - fs->super->s_free_inodes_count,
>>        fs->super->s_inodes_count,
>> +        percent_files,
>>        (unsigned long long) ext2fs_blocks_count(fs->super) -
>>        ext2fs_free_blocks_count(fs->super),
>> -        (unsigned long long) ext2fs_blocks_count(fs->super));
>> +        (unsigned long long) ext2fs_blocks_count(fs->super),
>> +        percent_blocks);
>>    next_check = 100000;
>>    if (fs->super->s_max_mnt_count > 0) {
>>        next_check = fs->super->s_max_mnt_count - fs->super->s_mnt_count;
>> -- 
>> 2.40.0
>>
Oscar Megia López July 28, 2023, 7:05 a.m. UTC | #3
Markus Elfring <Markus.Elfring@web.de> writes:

> You should put also the address "linux-kernel@vger.kernel.org" into
> the message header field "Cc" (or "To").
>
> See also:
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v6.5-rc3#n231
>

Sorry, I though that were different proyects.

>
>> I need percentages to see how disk is occupied.
>
> At which occasions do you tend to care for such numbers?
>

For example, when the root disk is almost full, I'd rather know than get
system/application errors. It has happened to me and I think it is
necessary information.

>
>> If also I would see percentages for me would be perfect.
>
> Where would you find such information more helpful?
>

Because on my computer it shows busy/full for one or two seconds and
I don't have time to remember them, much less to calculate the occupancy
percentage. Humans handle percentages much better than many numbers in a
row (at least I do). Also when running e2fsck it is useful to see
percentages.

This is e2fsck with my patch:

$ sudo e2fsck/e2fsck /dev/sdc5
e2fsck 1.47.0 (5-Feb-2023)
label: clean, 405784/2449408 (16%) files, 6651303/9765625 (68%) blocks
$ 

I think it is helpful to show the percentage. Only number of
files/blocks and totals is not enought.

>
>> I think that this feature is going to be good for everyone.
>
> Will persuasion efforts grow accordingly?
>

Sorry, I don't understand what you mean.

>
> How do you think about to choose a corresponding imperative change suggestion?
>

Sorry I do not understand what you mean. If you want to say that my
sentence "I think that this feature is going to be good for everyone."
is to force the change, I'm sorry. It was just a comment to
explain why I submitted the patch. If it was only useful to me, I would
not have sent it.

> See also:
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v6.5-rc3#n94
>
> Regards,
> Markus
diff mbox series

Patch

diff --git a/e2fsck/unix.c b/e2fsck/unix.c
index e5b672a2..b820ca8d 100644
--- a/e2fsck/unix.c
+++ b/e2fsck/unix.c
@@ -350,6 +350,8 @@  static void check_if_skip(e2fsck_t ctx)
 	int defer_check_on_battery;
 	int broken_system_clock;
 	time_t lastcheck;
+	char percent_files[9];
+	char percent_blocks[9];
 
 	if (ctx->flags & E2F_FLAG_PROBLEMS_FIXED)
 		return;
@@ -442,14 +444,33 @@  static void check_if_skip(e2fsck_t ctx)
 		ext2fs_mark_super_dirty(fs);
 	}
 
+	/* Calculate percentages */
+	if (fs->super->s_inodes_count > 0) {
+		snprintf(percent_files, sizeof(percent_files), " (%u%%) ",
+		((fs->super->s_inodes_count - fs->super->s_free_inodes_count) * 100) /
+		fs->super->s_inodes_count);
+	} else {
+		snprintf(percent_files, sizeof(percent_files), " ");
+	}
+
+	if (ext2fs_blocks_count(fs->super) > 0) {
+		snprintf(percent_blocks, sizeof(percent_blocks), " (%llu%%) ",
+		(unsigned long long) ((ext2fs_blocks_count(fs->super) -
+		ext2fs_free_blocks_count(fs->super)) * 100) / ext2fs_blocks_count(fs->super));
+	} else {
+		snprintf(percent_blocks, sizeof(percent_blocks), " ");
+	}
+
 	/* Print the summary message when we're skipping a full check */
-	log_out(ctx, _("%s: clean, %u/%u files, %llu/%llu blocks"),
+	log_out(ctx, _("%s: clean, %u/%u%sfiles, %llu/%llu%sblocks"),
 		ctx->device_name,
 		fs->super->s_inodes_count - fs->super->s_free_inodes_count,
 		fs->super->s_inodes_count,
+		percent_files,
 		(unsigned long long) ext2fs_blocks_count(fs->super) -
 		ext2fs_free_blocks_count(fs->super),
-		(unsigned long long) ext2fs_blocks_count(fs->super));
+		(unsigned long long) ext2fs_blocks_count(fs->super),
+		percent_blocks);
 	next_check = 100000;
 	if (fs->super->s_max_mnt_count > 0) {
 		next_check = fs->super->s_max_mnt_count - fs->super->s_mnt_count;