diff --git a/src/systemctl/systemctl-logind.c b/src/systemctl/systemctl-logind.c index cd83d29474..268e528856 100644 --- a/src/systemctl/systemctl-logind.c +++ b/src/systemctl/systemctl-logind.c @@ -89,6 +89,18 @@ int logind_reboot(enum action a) { SET_FLAG(flags, SD_LOGIND_SOFT_REBOOT, a == ACTION_SOFT_REBOOT); r = bus_call_method(bus, bus_login_mgr, method_with_flags, &error, NULL, "t", flags); + if (r < 0 && FLAGS_SET(flags, SD_LOGIND_SOFT_REBOOT_IF_NEXTROOT_SET_UP) && + sd_bus_error_has_name(&error, SD_BUS_ERROR_INVALID_ARGS)) { + sd_bus_error_free(&error); + r = bus_call_method( + bus, + bus_login_mgr, + method_with_flags, + &error, + NULL, + "t", + flags & ~SD_LOGIND_SOFT_REBOOT_IF_NEXTROOT_SET_UP); + } if (r >= 0) return 0; if (!sd_bus_error_has_name(&error, SD_BUS_ERROR_UNKNOWN_METHOD))