aboutsummaryrefslogtreecommitdiffstats
path: root/disk-utils/sfdisk.c
diff options
context:
space:
mode:
authorKarel Zak <kzak@redhat.com>2019-09-30 12:25:17 +0200
committerKarel Zak <kzak@redhat.com>2019-09-30 12:25:17 +0200
commit980a25f9c4b66165363909a83d14b7d7ee4de9d1 (patch)
tree6c68bc04a0453b07b4a4964c6b2e560cabfed4cd /disk-utils/sfdisk.c
parent52a1f767c0d6d400790deaaa93109090d6052fa6 (diff)
downloadutil-linux-980a25f9c4b66165363909a83d14b7d7ee4de9d1.tar.gz
sfdisk: (move-data) improve MiB/s progress bar
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'disk-utils/sfdisk.c')
-rw-r--r--disk-utils/sfdisk.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c
index ca85033bd2..3bda79ceca 100644
--- a/disk-utils/sfdisk.c
+++ b/disk-utils/sfdisk.c
@@ -377,6 +377,7 @@ static int move_partition_data(struct sfdisk *sf, size_t partno, struct fdisk_pa
uintmax_t src, dst;
int errsv, progress = 0;
struct timeval prev_time;
+ uint64_t bytes_per_sec = 0;
assert(sf->movedata);
@@ -534,24 +535,33 @@ static int move_partition_data(struct sfdisk *sf, size_t partno, struct fdisk_pa
fprintf(f, "%05zu: %12ju %12ju\n", cc, src, dst);
if (progress && i % 10 == 0) {
- unsigned int elapsed; /* usec */
- unsigned int bytes; /* bytes per usec */
+ unsigned int elapsed = 0; /* usec */
struct timeval cur_time;
gettimeofday(&cur_time, NULL);
- elapsed = (cur_time.tv_sec * 1000000 + cur_time.tv_usec) -
- (prev_time.tv_sec * 1000000 + prev_time.tv_usec);
+ if (cur_time.tv_sec - prev_time.tv_sec > 1) {
+ elapsed = ((cur_time.tv_sec - prev_time.tv_sec) * 1000000) +
+ (cur_time.tv_usec - prev_time.tv_usec);
- bytes = ((i - prev) * ss) / elapsed;
- fprintf(stdout, _("Moved %ju from %ju sectors (%.3f%%, %.1f MiB/s)."),
+ bytes_per_sec = ((i - prev) * ss) / elapsed; /* per usec */
+ bytes_per_sec *= 1000000; /* per sec */
+
+ prev_time = cur_time;
+ prev = i;
+ }
+
+ if (bytes_per_sec)
+ fprintf(stdout, _("Moved %ju from %ju sectors (%.3f%%, %.1f MiB/s)."),
i + 1, nsectors,
100.0 / ((double) nsectors/(i+1)),
- (double) (bytes * 1000000) / (1024 * 1024));
+ (double) (bytes_per_sec / (1024 * 1024)));
+ else
+ fprintf(stdout, _("Moved %ju from %ju sectors (%.3f%%)."),
+ i + 1, nsectors,
+ 100.0 / ((double) nsectors/(i+1)));
fflush(stdout);
fputc('\r', stdout);
- prev_time = cur_time;
- prev = i;
}
if (!backward)