]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
timedated: add some debug logging when a number of kernel calls fail 9120/head
authorLennart Poettering <lennart@poettering.net>
Tue, 29 May 2018 10:39:16 +0000 (12:39 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 29 May 2018 14:33:06 +0000 (16:33 +0200)
src/timedate/timedated.c

index b7a20910622fcef82a92e249a68e08d9f452aee6..d504f7c6f9a14ede99f01fd52a1a1095d87caeeb 100644 (file)
@@ -556,7 +556,9 @@ static int method_set_timezone(sd_bus_message *m, void *userdata, sd_bus_error *
         tzset();
 
         /* 3. Tell the kernel our timezone */
-        clock_set_timezone(NULL);
+        r = clock_set_timezone(NULL);
+        if (r < 0)
+                log_debug_errno(r, "Failed to tell kernel about timezone, ignoring: %m");
 
         if (c->local_rtc) {
                 struct timespec ts;
@@ -565,7 +567,10 @@ static int method_set_timezone(sd_bus_message *m, void *userdata, sd_bus_error *
                 /* 4. Sync RTC from system clock, with the new delta */
                 assert_se(clock_gettime(CLOCK_REALTIME, &ts) == 0);
                 assert_se(tm = localtime(&ts.tv_sec));
-                clock_set_hwclock(tm);
+
+                r = clock_set_hwclock(tm);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to sync time to hardware clock, ignoring: %m");
         }
 
         log_struct(LOG_INFO,
@@ -621,7 +626,9 @@ static int method_set_local_rtc(sd_bus_message *m, void *userdata, sd_bus_error
         }
 
         /* 2. Tell the kernel our timezone */
-        clock_set_timezone(NULL);
+        r = clock_set_timezone(NULL);
+        if (r < 0)
+                log_debug_errno(r, "Failed to tell kernel about timezone, ignoring: %m");
 
         /* 3. Synchronize clocks */
         assert_se(clock_gettime(CLOCK_REALTIME, &ts) == 0);
@@ -629,27 +636,25 @@ static int method_set_local_rtc(sd_bus_message *m, void *userdata, sd_bus_error
         if (fix_system) {
                 struct tm tm;
 
-                /* Sync system clock from RTC; first,
-                 * initialize the timezone fields of
-                 * struct tm. */
+                /* Sync system clock from RTC; first, initialize the timezone fields of struct tm. */
                 if (c->local_rtc)
                         tm = *localtime(&ts.tv_sec);
                 else
                         tm = *gmtime(&ts.tv_sec);
 
-                /* Override the main fields of
-                 * struct tm, but not the timezone
-                 * fields */
-                if (clock_get_hwclock(&tm) >= 0) {
-
-                        /* And set the system clock
-                         * with this */
+                /* Override the main fields of struct tm, but not the timezone fields */
+                r = clock_get_hwclock(&tm);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to get hardware clock, ignoring: %m");
+                else {
+                        /* And set the system clock with this */
                         if (c->local_rtc)
                                 ts.tv_sec = mktime(&tm);
                         else
                                 ts.tv_sec = timegm(&tm);
 
-                        clock_settime(CLOCK_REALTIME, &ts);
+                        if (clock_settime(CLOCK_REALTIME, &ts) < 0)
+                                log_debug_errno(errno, "Failed to update system clock, ignoring: %m");
                 }
 
         } else {
@@ -661,7 +666,9 @@ static int method_set_local_rtc(sd_bus_message *m, void *userdata, sd_bus_error
                 else
                         tm = gmtime(&ts.tv_sec);
 
-                clock_set_hwclock(tm);
+                r = clock_set_hwclock(tm);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to sync time to hardware clock, ignoring: %m");
         }
 
         log_info("RTC configured to %s time.", c->local_rtc ? "local" : "UTC");
@@ -750,7 +757,10 @@ static int method_set_time(sd_bus_message *m, void *userdata, sd_bus_error *erro
                 tm = localtime(&ts.tv_sec);
         else
                 tm = gmtime(&ts.tv_sec);
-        clock_set_hwclock(tm);
+
+        r = clock_set_hwclock(tm);
+        if (r < 0)
+                log_debug_errno(r, "Failed to update hardware clock, ignoring: %m");
 
         log_struct(LOG_INFO,
                    "MESSAGE_ID=" SD_MESSAGE_TIME_CHANGE_STR,