static void start_target(const char *target, bool isolate) {
DBusMessage *m = NULL, *reply = NULL;
DBusError error;
- const char *mode;
+ const char *mode, *base_target = "base.target";
DBusConnection *bus = NULL;
assert(target);
log_debug("Running request %s/start/%s", target, mode);
- if (!(m = dbus_message_new_method_call("org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", "StartUnit"))) {
+ if (!(m = dbus_message_new_method_call("org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", "StartUnitReplace"))) {
log_error("Could not allocate message.");
goto finish;
}
+ /* Start these units only if we can replace base.target with it */
+
if (!dbus_message_append_args(m,
+ DBUS_TYPE_STRING, &base_target,
DBUS_TYPE_STRING, &target,
DBUS_TYPE_STRING, &mode,
DBUS_TYPE_INVALID)) {
return 0;
/* FIXME: only execute necessary fsck's if no AC power present */
- if (on_ac_power() == 0)
+ if (on_ac_power() == 0) {
+ log_info("Running on battery power, skipping file system check.");
return 0;
+ }
}
cmdline[i++] = "/sbin/fsck";
}
if (status.si_status & ~1) {
-
- if (access("/dev/.systemd/late-fsck", F_OK) >= 0) {
- log_error("fsck failed with error code %i.", status.si_status);
- goto finish;
- }
+ log_error("fsck failed with error code %i.", status.si_status);
if (status.si_status & 2)
/* System should be rebooted. */