Hello community, here is the log from the commit of package systemd for openSUSE:Factory checked in at 2020-06-11 14:37:13 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/systemd (Old) and /work/SRC/openSUSE:Factory/.systemd.new.3606 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "systemd" Thu Jun 11 14:37:13 2020 rev:310 rq:809898 version:245 Changes: -------- --- /work/SRC/openSUSE:Factory/systemd/systemd-mini.changes 2020-04-29 20:42:28.107656112 +0200 +++ /work/SRC/openSUSE:Factory/.systemd.new.3606/systemd-mini.changes 2020-06-11 14:37:18.644021667 +0200 @@ -1,0 +2,19 @@ +Thu May 28 09:30:33 UTC 2020 - Franck Bui <f...@suse.com> + +- Import commit a6d31d1a02c2718a064bbbc40d003668acf72769 + + bb6e2f7906 pid1: update manager settings on reload too (bsc#1163109) + e9e8907b06 watchdog: reduce watchdog pings in timeout interval + 385a8f9846 udev: rename the persistent link for ATA devices (bsc#1164538) + 66018a12ae tmpfiles: remove unnecessary assert (bsc#1171145) + +------------------------------------------------------------------- +Mon May 25 08:47:22 UTC 2020 - Franck Bui <f...@suse.com> + +- Disable bump of /proc/sys/fs/nr-open + + Hopefully a _temporary_ workaround until bsc#1165351 is fixed + otherwise user instances crashes the system is using NIS (and the + nscd cache is empty). + +------------------------------------------------------------------- systemd.changes: same change Old: ---- systemd-v245+suse.117.g08cd65ac38.tar.xz New: ---- systemd-v245+suse.122.ga6d31d1a02.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ systemd-mini.spec ++++++ --- /var/tmp/diff_new_pack.FW4eGj/_old 2020-06-11 14:37:21.116028855 +0200 +++ /var/tmp/diff_new_pack.FW4eGj/_new 2020-06-11 14:37:21.120028867 +0200 @@ -26,7 +26,7 @@ ##### WARNING: please do not edit this auto generated spec file. Use the systemd.spec! ##### %define mini -mini %define min_kernel_version 4.5 -%define suse_version +suse.117.g08cd65ac38 +%define suse_version +suse.122.ga6d31d1a02 %bcond_with gnuefi %if 0%{?bootstrap} @@ -506,6 +506,7 @@ -Ddefault-kill-user-processes=false \ -Dntp-servers="${ntp_servers[*]}" \ -Drc-local=/etc/init.d/boot.local \ + -Dbump-proc-sys-fs-nr-open=false \ -Ddebug-shell=/bin/bash \ -Dseccomp=auto \ -Dselinux=auto \ ++++++ systemd.spec ++++++ --- /var/tmp/diff_new_pack.FW4eGj/_old 2020-06-11 14:37:21.144028937 +0200 +++ /var/tmp/diff_new_pack.FW4eGj/_new 2020-06-11 14:37:21.144028937 +0200 @@ -24,7 +24,7 @@ %define bootstrap 0 %define mini %nil %define min_kernel_version 4.5 -%define suse_version +suse.117.g08cd65ac38 +%define suse_version +suse.122.ga6d31d1a02 %bcond_with gnuefi %if 0%{?bootstrap} @@ -504,6 +504,7 @@ -Ddefault-kill-user-processes=false \ -Dntp-servers="${ntp_servers[*]}" \ -Drc-local=/etc/init.d/boot.local \ + -Dbump-proc-sys-fs-nr-open=false \ -Ddebug-shell=/bin/bash \ -Dseccomp=auto \ -Dselinux=auto \ ++++++ systemd-mini-rpmlintrc ++++++ --- /var/tmp/diff_new_pack.FW4eGj/_old 2020-06-11 14:37:21.236029205 +0200 +++ /var/tmp/diff_new_pack.FW4eGj/_new 2020-06-11 14:37:21.236029205 +0200 @@ -29,3 +29,4 @@ addFilter(".*systemd-service-without-service.*") addFilter(".*shlib-policy-missing-suffix.*") addFilter(".*suse-missing-rclink.*") +addFilter("env-script-interpreter") ++++++ systemd-rpmlintrc ++++++ --- /var/tmp/diff_new_pack.FW4eGj/_old 2020-06-11 14:37:21.256029263 +0200 +++ /var/tmp/diff_new_pack.FW4eGj/_new 2020-06-11 14:37:21.256029263 +0200 @@ -29,3 +29,4 @@ addFilter(".*systemd-service-without-service.*") addFilter(".*shlib-policy-missing-suffix.*") addFilter(".*suse-missing-rclink.*") +addFilter("env-script-interpreter") ++++++ systemd-v245+suse.117.g08cd65ac38.tar.xz -> systemd-v245+suse.122.ga6d31d1a02.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v245+suse.117.g08cd65ac38/rules.d/60-persistent-storage.rules new/systemd-v245+suse.122.ga6d31d1a02/rules.d/60-persistent-storage.rules --- old/systemd-v245+suse.117.g08cd65ac38/rules.d/60-persistent-storage.rules 2020-04-23 16:14:35.000000000 +0200 +++ new/systemd-v245+suse.122.ga6d31d1a02/rules.d/60-persistent-storage.rules 2020-05-28 11:28:31.000000000 +0200 @@ -93,6 +93,9 @@ KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-boot%n" KERNEL!="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}" ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n" +# compatible links for ATA devices +KERNEL!="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH_ATA_COMPAT}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH_ATA_COMPAT}" +ENV{DEVTYPE}=="partition", ENV{ID_PATH_ATA_COMPAT}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH_ATA_COMPAT}-part%n" # legacy virtio-pci by-path links (deprecated) KERNEL=="vd*[!0-9]", ENV{ID_PATH}=="pci-*", SYMLINK+="disk/by-path/virtio-$env{ID_PATH}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v245+suse.117.g08cd65ac38/src/core/dbus-manager.c new/systemd-v245+suse.122.ga6d31d1a02/src/core/dbus-manager.c --- old/systemd-v245+suse.117.g08cd65ac38/src/core/dbus-manager.c 2020-04-23 16:14:35.000000000 +0200 +++ new/systemd-v245+suse.122.ga6d31d1a02/src/core/dbus-manager.c 2020-05-28 11:28:31.000000000 +0200 @@ -266,28 +266,116 @@ return sd_bus_message_append_basic(reply, 'b', &b); } -static int property_set_runtime_watchdog( +static int property_get_runtime_watchdog( sd_bus *bus, const char *path, const char *interface, const char *property, - sd_bus_message *value, + sd_bus_message *reply, void *userdata, sd_bus_error *error) { - usec_t *t = userdata; - int r; + Manager *m = userdata; + + assert(m); + assert(bus); + assert(reply); + + return sd_bus_message_append(reply, "t", manager_get_watchdog(m, WATCHDOG_RUNTIME)); +} + +static int property_get_reboot_watchdog( + sd_bus *bus, + const char *path, + const char *interface, + const char *property, + sd_bus_message *reply, + void *userdata, + sd_bus_error *error) { + + Manager *m = userdata; + + assert(m); + assert(bus); + assert(reply); + return sd_bus_message_append(reply, "t", manager_get_watchdog(m, WATCHDOG_REBOOT)); +} + +static int property_get_kexec_watchdog( + sd_bus *bus, + const char *path, + const char *interface, + const char *property, + sd_bus_message *reply, + void *userdata, + sd_bus_error *error) { + + Manager *m = userdata; + + assert(m); assert(bus); + assert(reply); + + return sd_bus_message_append(reply, "t", manager_get_watchdog(m, WATCHDOG_KEXEC)); +} + +static int property_set_watchdog(Manager *m, WatchdogType type, sd_bus_message *value) { + usec_t timeout; + int r; + + assert(m); assert(value); assert_cc(sizeof(usec_t) == sizeof(uint64_t)); - r = sd_bus_message_read(value, "t", t); + r = sd_bus_message_read(value, "t", &timeout); if (r < 0) return r; - return watchdog_set_timeout(t); + return manager_set_watchdog_overridden(m, type, timeout); +} + +static int property_set_runtime_watchdog( + sd_bus *bus, + const char *path, + const char *interface, + const char *property, + sd_bus_message *value, + void *userdata, + sd_bus_error *error) { + + return property_set_watchdog(userdata, WATCHDOG_RUNTIME, value); +} + +static int property_set_reboot_watchdog( + sd_bus *bus, + const char *path, + const char *interface, + const char *property, + sd_bus_message *value, + void *userdata, + sd_bus_error *error) { + + return property_set_watchdog(userdata, WATCHDOG_REBOOT, value); +} + +static int property_set_kexec_watchdog( + sd_bus *bus, + const char *path, + const char *interface, + const char *property, + sd_bus_message *value, + void *userdata, + sd_bus_error *error) { + + Manager *m = userdata; + + assert(m); + assert(bus); + assert(value); + + return property_set_watchdog(userdata, WATCHDOG_KEXEC, value); } static int bus_get_unit_by_name(Manager *m, sd_bus_message *message, const char *name, Unit **ret_unit, sd_bus_error *error) { @@ -2418,11 +2506,11 @@ SD_BUS_PROPERTY("UnitPath", "as", NULL, offsetof(Manager, lookup_paths.search_path), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("DefaultStandardOutput", "s", bus_property_get_exec_output, offsetof(Manager, default_std_output), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("DefaultStandardError", "s", bus_property_get_exec_output, offsetof(Manager, default_std_output), SD_BUS_VTABLE_PROPERTY_CONST), - SD_BUS_WRITABLE_PROPERTY("RuntimeWatchdogUSec", "t", bus_property_get_usec, property_set_runtime_watchdog, offsetof(Manager, runtime_watchdog), 0), - SD_BUS_WRITABLE_PROPERTY("RebootWatchdogUSec", "t", bus_property_get_usec, bus_property_set_usec, offsetof(Manager, reboot_watchdog), 0), + SD_BUS_WRITABLE_PROPERTY("RuntimeWatchdogUSec", "t", property_get_runtime_watchdog, property_set_runtime_watchdog, 0, 0), + SD_BUS_WRITABLE_PROPERTY("RebootWatchdogUSec", "t", property_get_reboot_watchdog, property_set_reboot_watchdog, 0, 0), /* The following item is an obsolete alias */ - SD_BUS_WRITABLE_PROPERTY("ShutdownWatchdogUSec", "t", bus_property_get_usec, bus_property_set_usec, offsetof(Manager, reboot_watchdog), SD_BUS_VTABLE_HIDDEN), - SD_BUS_WRITABLE_PROPERTY("KExecWatchdogUSec", "t", bus_property_get_usec, bus_property_set_usec, offsetof(Manager, kexec_watchdog), 0), + SD_BUS_WRITABLE_PROPERTY("ShutdownWatchdogUSec", "t", property_get_reboot_watchdog, property_set_reboot_watchdog, 0, SD_BUS_VTABLE_HIDDEN), + SD_BUS_WRITABLE_PROPERTY("KExecWatchdogUSec", "t", property_get_kexec_watchdog, property_set_kexec_watchdog, 0, 0), SD_BUS_WRITABLE_PROPERTY("ServiceWatchdogs", "b", bus_property_get_bool, bus_property_set_bool, offsetof(Manager, service_watchdogs), 0), SD_BUS_PROPERTY("ControlGroup", "s", NULL, offsetof(Manager, cgroup_root), 0), SD_BUS_PROPERTY("SystemState", "s", property_get_system_state, 0, 0), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v245+suse.117.g08cd65ac38/src/core/main.c new/systemd-v245+suse.122.ga6d31d1a02/src/core/main.c --- old/systemd-v245+suse.117.g08cd65ac38/src/core/main.c 2020-04-23 16:14:35.000000000 +0200 +++ new/systemd-v245+suse.122.ga6d31d1a02/src/core/main.c 2020-05-28 11:28:31.000000000 +0200 @@ -701,16 +701,18 @@ assert(m); - /* Propagates the various manager settings into the manager object, i.e. properties that effect the manager - * itself (as opposed to just being inherited into newly allocated units, see set_manager_defaults() above). */ + /* Propagates the various manager settings into the manager object, i.e. properties that + * effect the manager itself (as opposed to just being inherited into newly allocated + * units, see set_manager_defaults() above). */ m->confirm_spawn = arg_confirm_spawn; m->service_watchdogs = arg_service_watchdogs; - m->runtime_watchdog = arg_runtime_watchdog; - m->reboot_watchdog = arg_reboot_watchdog; - m->kexec_watchdog = arg_kexec_watchdog; m->cad_burst_action = arg_cad_burst_action; + manager_set_watchdog(m, WATCHDOG_RUNTIME, arg_runtime_watchdog); + manager_set_watchdog(m, WATCHDOG_REBOOT, arg_reboot_watchdog); + manager_set_watchdog(m, WATCHDOG_KEXEC, arg_kexec_watchdog); + manager_set_show_status(m, arg_show_status, "commandline"); m->status_unit_format = arg_status_unit_format; } @@ -1752,6 +1754,7 @@ (void) parse_configuration(saved_rlimit_nofile, saved_rlimit_memlock); set_manager_defaults(m); + set_manager_settings(m); update_cpu_affinity(false); update_numa_policy(false); @@ -1942,9 +1945,6 @@ if (r < 0) log_warning_errno(r, "Failed to set watchdog device to %s, ignoring: %m", arg_watchdog_device); } - - if (timestamp_is_set(arg_runtime_watchdog)) - watchdog_set_timeout(&arg_runtime_watchdog); } if (arg_timer_slack_nsec != NSEC_INFINITY) @@ -2215,6 +2215,10 @@ /* Note that this also parses bits from the kernel command line, including "debug". */ log_parse_environment(); + /* Initialize the show status setting if it hasn't been set explicitly yet */ + if (arg_show_status == _SHOW_STATUS_INVALID) + arg_show_status = SHOW_STATUS_YES; + return 0; } @@ -2238,10 +2242,6 @@ return r; } - /* Initialize the show status setting if it hasn't been set explicitly yet */ - if (arg_show_status == _SHOW_STATUS_INVALID) - arg_show_status = SHOW_STATUS_YES; - return 0; } @@ -2714,8 +2714,8 @@ pager_close(); if (m) { - arg_reboot_watchdog = m->reboot_watchdog; - arg_kexec_watchdog = m->kexec_watchdog; + arg_reboot_watchdog = manager_get_watchdog(m, WATCHDOG_REBOOT); + arg_kexec_watchdog = manager_get_watchdog(m, WATCHDOG_KEXEC); m = manager_free(m); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v245+suse.117.g08cd65ac38/src/core/manager.c new/systemd-v245+suse.122.ga6d31d1a02/src/core/manager.c --- old/systemd-v245+suse.117.g08cd65ac38/src/core/manager.c 2020-04-23 16:14:35.000000000 +0200 +++ new/systemd-v245+suse.122.ga6d31d1a02/src/core/manager.c 2020-05-28 11:28:31.000000000 +0200 @@ -778,6 +778,10 @@ .original_log_level = -1, .original_log_target = _LOG_TARGET_INVALID, + .watchdog_overridden[WATCHDOG_RUNTIME] = USEC_INFINITY, + .watchdog_overridden[WATCHDOG_REBOOT] = USEC_INFINITY, + .watchdog_overridden[WATCHDOG_KEXEC] = USEC_INFINITY, + .notify_fd = -1, .cgroups_agent_fd = -1, .signal_fd = -1, @@ -2898,9 +2902,10 @@ return log_error_errno(r, "Failed to enable SIGCHLD event source: %m"); while (m->objective == MANAGER_OK) { - usec_t wait_usec; + usec_t wait_usec, watchdog_usec; - if (timestamp_is_set(m->runtime_watchdog) && MANAGER_IS_SYSTEM(m)) + watchdog_usec = manager_get_watchdog(m, WATCHDOG_RUNTIME); + if (timestamp_is_set(watchdog_usec)) watchdog_ping(); if (!ratelimit_below(&rl)) { @@ -2930,12 +2935,10 @@ if (manager_dispatch_dbus_queue(m) > 0) continue; - /* Sleep for half the watchdog time */ - if (timestamp_is_set(m->runtime_watchdog) && MANAGER_IS_SYSTEM(m)) { - wait_usec = m->runtime_watchdog / 2; - if (wait_usec <= 0) - wait_usec = 1; - } else + /* Sleep for watchdog runtime wait time */ + if (timestamp_is_set(watchdog_usec)) + wait_usec = watchdog_runtime_wait(); + else wait_usec = USEC_INFINITY; r = sd_event_run(m->event, wait_usec); @@ -3176,6 +3179,10 @@ if (m->log_target_overridden) (void) serialize_item(f, "log-target-override", log_target_to_string(log_get_target())); + (void) serialize_usec(f, "runtime-watchdog-overridden", m->watchdog_overridden[WATCHDOG_RUNTIME]); + (void) serialize_usec(f, "reboot-watchdog-overridden", m->watchdog_overridden[WATCHDOG_REBOOT]); + (void) serialize_usec(f, "kexec-watchdog-overridden", m->watchdog_overridden[WATCHDOG_KEXEC]); + for (q = 0; q < _MANAGER_TIMESTAMP_MAX; q++) { _cleanup_free_ char *joined = NULL; @@ -3308,6 +3315,68 @@ return 0; } +usec_t manager_get_watchdog(Manager *m, WatchdogType t) { + assert(m); + + if (MANAGER_IS_USER(m)) + return USEC_INFINITY; + + if (timestamp_is_set(m->watchdog_overridden[t])) + return m->watchdog_overridden[t]; + + return m->watchdog[t]; +} + +void manager_set_watchdog(Manager *m, WatchdogType t, usec_t timeout) { + int r = 0; + + assert(m); + + if (MANAGER_IS_USER(m)) + return; + + if (m->watchdog[t] == timeout) + return; + + if (t == WATCHDOG_RUNTIME) + if (!timestamp_is_set(m->watchdog_overridden[WATCHDOG_RUNTIME])) { + if (timestamp_is_set(timeout)) + r = watchdog_set_timeout(&timeout); + else + watchdog_close(true); + } + + if (r >= 0) + m->watchdog[t] = timeout; +} + +int manager_set_watchdog_overridden(Manager *m, WatchdogType t, usec_t timeout) { + int r = 0; + + assert(m); + + if (MANAGER_IS_USER(m)) + return 0; + + if (m->watchdog_overridden[t] == timeout) + return 0; + + if (t == WATCHDOG_RUNTIME) { + usec_t *p; + + p = timestamp_is_set(timeout) ? &timeout : &m->watchdog[t]; + if (timestamp_is_set(*p)) + r = watchdog_set_timeout(p); + else + watchdog_close(true); + } + + if (r >= 0) + m->watchdog_overridden[t] = timeout; + + return 0; +} + int manager_deserialize(Manager *m, FILE *f, FDSet *fds) { int r = 0; @@ -3431,6 +3500,30 @@ else manager_override_log_target(m, target); + } else if ((val = startswith(l, "runtime-watchdog-overridden="))) { + usec_t t; + + if (deserialize_usec(val, &t) < 0) + log_notice("Failed to parse runtime-watchdog-overridden value '%s', ignoring.", val); + else + manager_set_watchdog_overridden(m, WATCHDOG_RUNTIME, t); + + } else if ((val = startswith(l, "reboot-watchdog-overridden="))) { + usec_t t; + + if (deserialize_usec(val, &t) < 0) + log_notice("Failed to parse reboot-watchdog-overridden value '%s', ignoring.", val); + else + manager_set_watchdog_overridden(m, WATCHDOG_REBOOT, t); + + } else if ((val = startswith(l, "kexec-watchdog-overridden="))) { + usec_t t; + + if (deserialize_usec(val, &t) < 0) + log_notice("Failed to parse kexec-watchdog-overridden value '%s', ignoring.", val); + else + manager_set_watchdog_overridden(m, WATCHDOG_KEXEC, t); + } else if (startswith(l, "env=")) { r = deserialize_environment(l + 4, &m->client_environment); if (r < 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v245+suse.117.g08cd65ac38/src/core/manager.h new/systemd-v245+suse.122.ga6d31d1a02/src/core/manager.h --- old/systemd-v245+suse.117.g08cd65ac38/src/core/manager.h 2020-04-23 16:14:35.000000000 +0200 +++ new/systemd-v245+suse.122.ga6d31d1a02/src/core/manager.h 2020-05-28 11:28:31.000000000 +0200 @@ -114,6 +114,13 @@ _MANAGER_TIMESTAMP_INVALID = -1, } ManagerTimestamp; +typedef enum WatchdogType { + WATCHDOG_RUNTIME, + WATCHDOG_REBOOT, + WATCHDOG_KEXEC, + _WATCHDOG_TYPE_MAX, +} WatchdogType; + #include "execute.h" #include "job.h" #include "path-lookup.h" @@ -231,9 +238,8 @@ char **transient_environment; /* The environment, as determined from config files, kernel cmdline and environment generators */ char **client_environment; /* Environment variables created by clients through the bus API */ - usec_t runtime_watchdog; - usec_t reboot_watchdog; - usec_t kexec_watchdog; + usec_t watchdog[_WATCHDOG_TYPE_MAX]; + usec_t watchdog_overridden[_WATCHDOG_TYPE_MAX]; dual_timestamp timestamps[_MANAGER_TIMESTAMP_MAX]; @@ -555,5 +561,9 @@ ManagerTimestamp manager_timestamp_from_string(const char *s) _pure_; ManagerTimestamp manager_timestamp_initrd_mangle(ManagerTimestamp s); +usec_t manager_get_watchdog(Manager *m, WatchdogType t); +void manager_set_watchdog(Manager *m, WatchdogType t, usec_t timeout); +int manager_set_watchdog_overridden(Manager *m, WatchdogType t, usec_t timeout); + const char* oom_policy_to_string(OOMPolicy i) _const_; OOMPolicy oom_policy_from_string(const char *s) _pure_; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v245+suse.117.g08cd65ac38/src/shared/watchdog.c new/systemd-v245+suse.122.ga6d31d1a02/src/shared/watchdog.c --- old/systemd-v245+suse.117.g08cd65ac38/src/shared/watchdog.c 2020-04-23 16:14:35.000000000 +0200 +++ new/systemd-v245+suse.122.ga6d31d1a02/src/shared/watchdog.c 2020-05-28 11:28:31.000000000 +0200 @@ -16,6 +16,7 @@ static int watchdog_fd = -1; static char *watchdog_device = NULL; static usec_t watchdog_timeout = USEC_INFINITY; +static usec_t watchdog_last_ping = USEC_INFINITY; static int update_timeout(void) { int r; @@ -57,6 +58,8 @@ r = ioctl(watchdog_fd, WDIOC_KEEPALIVE, 0); if (r < 0) return log_warning_errno(errno, "Failed to ping hardware watchdog: %m"); + + watchdog_last_ping = now(clock_boottime_or_monotonic()); } return 0; @@ -114,9 +117,38 @@ return r; } +usec_t watchdog_runtime_wait(void) { + usec_t rtwait; + usec_t ntime; + + if (!timestamp_is_set(watchdog_timeout)) + return USEC_INFINITY; + + /* Sleep half the watchdog timeout since the last succesful ping at most */ + if (timestamp_is_set(watchdog_last_ping)) { + ntime = now(clock_boottime_or_monotonic()); + assert(ntime >= watchdog_last_ping); + rtwait = usec_sub_unsigned(watchdog_last_ping + (watchdog_timeout / 2), ntime); + } else + rtwait = watchdog_timeout / 2; + + return rtwait; +} + int watchdog_ping(void) { + usec_t ntime; int r; + ntime = now(clock_boottime_or_monotonic()); + + /* Never ping earlier than watchdog_timeout/4 and try to ping + * by watchdog_timeout/2 plus scheduling latencies the latest */ + if (timestamp_is_set(watchdog_last_ping)) { + assert(ntime >= watchdog_last_ping); + if ((ntime - watchdog_last_ping) < (watchdog_timeout / 4)) + return 0; + } + if (watchdog_fd < 0) { r = open_watchdog(); if (r < 0) @@ -127,6 +159,8 @@ if (r < 0) return log_warning_errno(errno, "Failed to ping hardware watchdog: %m"); + watchdog_last_ping = ntime; + return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v245+suse.117.g08cd65ac38/src/shared/watchdog.h new/systemd-v245+suse.122.ga6d31d1a02/src/shared/watchdog.h --- old/systemd-v245+suse.117.g08cd65ac38/src/shared/watchdog.h 2020-04-23 16:14:35.000000000 +0200 +++ new/systemd-v245+suse.122.ga6d31d1a02/src/shared/watchdog.h 2020-05-28 11:28:31.000000000 +0200 @@ -10,6 +10,7 @@ int watchdog_set_timeout(usec_t *usec); int watchdog_ping(void); void watchdog_close(bool disarm); +usec_t watchdog_runtime_wait(void); static inline void watchdog_free_device(void) { (void) watchdog_set_device(NULL); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v245+suse.117.g08cd65ac38/src/tmpfiles/tmpfiles.c new/systemd-v245+suse.122.ga6d31d1a02/src/tmpfiles/tmpfiles.c --- old/systemd-v245+suse.117.g08cd65ac38/src/tmpfiles/tmpfiles.c 2020-04-23 16:14:35.000000000 +0200 +++ new/systemd-v245+suse.122.ga6d31d1a02/src/tmpfiles/tmpfiles.c 2020-05-28 11:28:31.000000000 +0200 @@ -2455,9 +2455,7 @@ case SET_XATTR: case RECURSIVE_SET_XATTR: - assert(i->xattrs); - - STRV_FOREACH (xattr, i->xattrs) { + STRV_FOREACH(xattr, i->xattrs) { r = specifier_printf(*xattr, specifier_table, NULL, &resolved); if (r < 0) return r; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v245+suse.117.g08cd65ac38/src/udev/udev-builtin-path_id.c new/systemd-v245+suse.122.ga6d31d1a02/src/udev/udev-builtin-path_id.c --- old/systemd-v245+suse.117.g08cd65ac38/src/udev/udev-builtin-path_id.c 2020-04-23 16:14:35.000000000 +0200 +++ new/systemd-v245+suse.122.ga6d31d1a02/src/udev/udev-builtin-path_id.c 2020-05-28 11:28:31.000000000 +0200 @@ -253,14 +253,20 @@ return parent; } -static sd_device *handle_scsi_ata(sd_device *parent, char **path) { +static sd_device *handle_scsi_ata(sd_device *parent, char **path, char **compat_path) { sd_device *targetdev, *target_parent; _cleanup_(sd_device_unrefp) sd_device *atadev = NULL; - const char *port_no, *sysname; + const char *port_no, *sysname, *name; + unsigned host, bus, target, lun; assert(parent); assert(path); + if (sd_device_get_sysname(parent, &name) < 0) + return NULL; + if (sscanf(name, "%u:%u:%u:%u", &host, &bus, &target, &lun) != 4) + return NULL; + if (sd_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_host", &targetdev) < 0) return NULL; @@ -275,7 +281,17 @@ if (sd_device_get_sysattr_value(atadev, "port_no", &port_no) < 0) return NULL; - path_prepend(path, "ata-%s", port_no); + if (bus != 0) + /* Devices behind port multiplier have a bus != 0*/ + path_prepend(path, "ata-%s.%u.0", port_no, bus); + else + /* Master/slave are distinguished by target id */ + path_prepend(path, "ata-%s.%u", port_no, target); + + /* old compatible persistent link for ATA devices */ + if (compat_path) + path_prepend(compat_path, "ata-%s", port_no); + return parent; } @@ -392,7 +408,7 @@ return parent; } -static sd_device *handle_scsi(sd_device *parent, char **path, bool *supported_parent) { +static sd_device *handle_scsi(sd_device *parent, char **path, char **compat_path, bool *supported_parent) { const char *devtype, *id, *name; if (sd_device_get_devtype(parent, &devtype) < 0 || @@ -426,7 +442,7 @@ } if (strstr(name, "/ata")) - return handle_scsi_ata(parent, path); + return handle_scsi_ata(parent, path, compat_path); if (strstr(name, "/vmbus_")) return handle_scsi_hyperv(parent, path, 37); @@ -520,6 +536,7 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) { sd_device *parent; _cleanup_free_ char *path = NULL; + _cleanup_free_ char *compat_path = NULL; bool supported_transport = false; bool supported_parent = false; const char *subsystem; @@ -537,7 +554,7 @@ } else if (streq(subsys, "scsi_tape")) { handle_scsi_tape(parent, &path); } else if (streq(subsys, "scsi")) { - parent = handle_scsi(parent, &path, &supported_parent); + parent = handle_scsi(parent, &path, &compat_path, &supported_parent); supported_transport = true; } else if (streq(subsys, "cciss")) { parent = handle_cciss(parent, &path); @@ -557,19 +574,27 @@ } } else if (streq(subsys, "pci")) { path_prepend(&path, "pci-%s", sysname); + if (compat_path) + path_prepend(&compat_path, "pci-%s", sysname); parent = skip_subsystem(parent, "pci"); supported_parent = true; } else if (streq(subsys, "platform")) { path_prepend(&path, "platform-%s", sysname); + if (compat_path) + path_prepend(&compat_path, "platform-%s", sysname); parent = skip_subsystem(parent, "platform"); supported_transport = true; supported_parent = true; } else if (streq(subsys, "acpi")) { path_prepend(&path, "acpi-%s", sysname); + if (compat_path) + path_prepend(&compat_path, "acpi-%s", sysname); parent = skip_subsystem(parent, "acpi"); supported_parent = true; } else if (streq(subsys, "xen")) { path_prepend(&path, "xen-%s", sysname); + if (compat_path) + path_prepend(&compat_path, "xen-%s", sysname); parent = skip_subsystem(parent, "xen"); supported_parent = true; } else if (streq(subsys, "virtio")) { @@ -577,16 +602,22 @@ supported_transport = true; } else if (streq(subsys, "scm")) { path_prepend(&path, "scm-%s", sysname); + if (compat_path) + path_prepend(&compat_path, "scm-%s", sysname); parent = skip_subsystem(parent, "scm"); supported_transport = true; supported_parent = true; } else if (streq(subsys, "ccw")) { path_prepend(&path, "ccw-%s", sysname); + if (compat_path) + path_prepend(&compat_path, "ccw-%s", sysname); parent = skip_subsystem(parent, "ccw"); supported_transport = true; supported_parent = true; } else if (streq(subsys, "ccwgroup")) { path_prepend(&path, "ccwgroup-%s", sysname); + if (compat_path) + path_prepend(&compat_path, "ccwgroup-%s", sysname); parent = skip_subsystem(parent, "ccwgroup"); supported_transport = true; supported_parent = true; @@ -596,6 +627,8 @@ supported_parent = true; } else if (streq(subsys, "iucv")) { path_prepend(&path, "iucv-%s", sysname); + if (compat_path) + path_prepend(&compat_path, "iucv-%s", sysname); parent = skip_subsystem(parent, "iucv"); supported_transport = true; supported_parent = true; @@ -604,6 +637,8 @@ if (sd_device_get_sysattr_value(dev, "nsid", &nsid) >= 0) { path_prepend(&path, "nvme-%s", nsid); + if (compat_path) + path_prepend(&compat_path, "nvme-%s", nsid); parent = skip_subsystem(parent, "nvme"); supported_parent = true; supported_transport = true; @@ -671,6 +706,14 @@ udev_builtin_add_property(dev, test, "ID_PATH_TAG", tag); } + /* + * Compatible link generation for ATA devices + * we assign compat_link to the env variable + * ID_PATH_ATA_COMPAT + */ + if (compat_path) + udev_builtin_add_property(dev, test, "ID_PATH_ATA_COMPAT", compat_path); + return 0; }