/*
* Convert seconds to a printable string.
*/
-static void eta_to_str(char *str, int eta_sec)
+static void eta_to_str(char *str, unsigned long eta_sec)
{
unsigned int d, h, m, s;
int disp_hour = 0;
- d = h = m = s = 0;
-
s = eta_sec % 60;
eta_sec /= 60;
m = eta_sec % 60;
if (td->o.zone_size && td->o.zone_skip)
bytes_total /= (td->o.zone_skip / td->o.zone_size);
+ if (td->o.fill_device && td->o.size == -1ULL)
+ return 0;
+
if (td->runstate == TD_RUNNING || td->runstate == TD_VERIFYING) {
double perc, perc_t;
static struct timeval rate_prev_time, disp_prev_time;
static unsigned int rate[2];
static int linelen_last;
+ static int eta_good;
if (temp_stall_ts || terse_output || eta_print == FIO_ETA_NEVER)
return;
eta_sec = 0;
for_each_td(td, i) {
- if (eta_secs[i] != INT_MAX)
- eta_sec += eta_secs[i];
+ if (exitall_on_terminate) {
+ if (eta_secs[i] < eta_sec)
+ eta_sec = eta_secs[i];
+ } else {
+ if (eta_secs[i] > eta_sec)
+ eta_sec = eta_secs[i];
+ }
}
free(eta_secs);
char perc_str[32];
int ll;
- if (!eta_sec)
- strcpy(perc_str, "--- done");
- else
+ if (!eta_sec && !eta_good)
+ strcpy(perc_str, "-.-% done");
+ else {
+ eta_good = 1;
+ perc *= 100.0;
sprintf(perc_str, "%3.1f%% done", perc);
+ }
- perc *= 100.0;
ll = printf(": [%s] [%s] [%6u/%6u kb/s] [eta %s]",
run_str, perc_str, rate[0], rate[1], eta_str);
if (ll >= 0 && ll < linelen_last)