backend: use monotonic clock for ETA, if we have it
authorJens Axboe <axboe@fb.com>
Tue, 16 Dec 2014 02:54:57 +0000 (19:54 -0700)
committerJens Axboe <axboe@fb.com>
Tue, 16 Dec 2014 02:54:57 +0000 (19:54 -0700)
Signed-off-by: Jens Axboe <axboe@fb.com>
backend.c

index f1def38b36b7898865eff2d3c86b8a0ee0fc3eae..3df0133f3e56d1c2648580fccaf1b870847992f4 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -2104,11 +2104,19 @@ static void *helper_thread_main(void *data)
                uint64_t sec = DISK_UTIL_MSEC / 1000;
                uint64_t nsec = (DISK_UTIL_MSEC % 1000) * 1000000;
                struct timespec ts;
                uint64_t sec = DISK_UTIL_MSEC / 1000;
                uint64_t nsec = (DISK_UTIL_MSEC % 1000) * 1000000;
                struct timespec ts;
+
+#if defined(CONFIG_CLOCK_MONOTONIC)
+               clock_gettime(CLOCK_MONOTONIC, &ts);
+               ts.tv_sec += sec;
+               ts.tv_nsec += nsec;
+#else
                struct timeval tv;
 
                gettimeofday(&tv, NULL);
                ts.tv_sec = tv.tv_sec + sec;
                ts.tv_nsec = (tv.tv_usec * 1000) + nsec;
                struct timeval tv;
 
                gettimeofday(&tv, NULL);
                ts.tv_sec = tv.tv_sec + sec;
                ts.tv_nsec = (tv.tv_usec * 1000) + nsec;
+#endif
+
                if (ts.tv_nsec >= 1000000000ULL) {
                        ts.tv_nsec -= 1000000000ULL;
                        ts.tv_sec++;
                if (ts.tv_nsec >= 1000000000ULL) {
                        ts.tv_nsec -= 1000000000ULL;
                        ts.tv_sec++;