|
|
803fb7 |
From a47b58110f92415fcb69441031e4d04fec48b852 Mon Sep 17 00:00:00 2001
|
|
|
803fb7 |
From: Franck Bui <fbui@suse.com>
|
|
|
803fb7 |
Date: Wed, 2 Dec 2015 17:03:28 +0100
|
|
|
803fb7 |
Subject: [PATCH] core: use bus_unit_check_load_state() in
|
|
|
803fb7 |
transaction_add_job_and_dependencies()
|
|
|
803fb7 |
|
|
|
803fb7 |
(cherry picked from commit ee87525c5eeacf3ce8fb730bcd3658e8da085046)
|
|
|
803fb7 |
Related: #1256858
|
|
|
803fb7 |
---
|
|
|
803fb7 |
src/core/transaction.c | 27 +++++----------------------
|
|
|
803fb7 |
src/systemctl/systemctl.c | 5 +++++
|
|
|
803fb7 |
2 files changed, 10 insertions(+), 22 deletions(-)
|
|
|
803fb7 |
|
|
|
803fb7 |
diff --git a/src/core/transaction.c b/src/core/transaction.c
|
|
|
803fb7 |
index aed64fa41..57e9cb3f8 100644
|
|
|
803fb7 |
--- a/src/core/transaction.c
|
|
|
803fb7 |
+++ b/src/core/transaction.c
|
|
|
803fb7 |
@@ -26,6 +26,7 @@
|
|
|
803fb7 |
#include "bus-util.h"
|
|
|
803fb7 |
#include "bus-error.h"
|
|
|
803fb7 |
#include "transaction.h"
|
|
|
803fb7 |
+#include "dbus-unit.h"
|
|
|
803fb7 |
|
|
|
803fb7 |
static void transaction_unlink_job(Transaction *tr, Job *j, bool delete_dependencies);
|
|
|
803fb7 |
|
|
|
803fb7 |
@@ -857,30 +858,12 @@ int transaction_add_job_and_dependencies(
|
|
|
803fb7 |
return sd_bus_error_setf(e, BUS_ERROR_LOAD_FAILED,
|
|
|
803fb7 |
"Unit %s is not loaded properly.", unit->id);
|
|
|
803fb7 |
|
|
|
803fb7 |
- if (type != JOB_STOP && unit->load_state == UNIT_ERROR) {
|
|
|
803fb7 |
- if (unit->load_error == -ENOENT || unit->manager->test_run)
|
|
|
803fb7 |
- return sd_bus_error_setf(e, BUS_ERROR_LOAD_FAILED,
|
|
|
803fb7 |
- "Unit %s failed to load: %s.",
|
|
|
803fb7 |
- unit->id,
|
|
|
803fb7 |
- strerror(-unit->load_error));
|
|
|
803fb7 |
- else
|
|
|
803fb7 |
- return sd_bus_error_setf(e, BUS_ERROR_LOAD_FAILED,
|
|
|
803fb7 |
- "Unit %s failed to load: %s. "
|
|
|
803fb7 |
- "See system logs and 'systemctl status %s' for details.",
|
|
|
803fb7 |
- unit->id,
|
|
|
803fb7 |
- strerror(-unit->load_error),
|
|
|
803fb7 |
- unit->id);
|
|
|
803fb7 |
+ if (type != JOB_STOP) {
|
|
|
803fb7 |
+ r = bus_unit_check_load_state(unit, e);
|
|
|
803fb7 |
+ if (r < 0)
|
|
|
803fb7 |
+ return r;
|
|
|
803fb7 |
}
|
|
|
803fb7 |
|
|
|
803fb7 |
- if (type != JOB_STOP && unit->load_state == UNIT_NOT_FOUND)
|
|
|
803fb7 |
- return sd_bus_error_setf(e, BUS_ERROR_LOAD_FAILED,
|
|
|
803fb7 |
- "Unit %s failed to load: %s.",
|
|
|
803fb7 |
- unit->id, strerror(-unit->load_error));
|
|
|
803fb7 |
-
|
|
|
803fb7 |
- if (type != JOB_STOP && unit->load_state == UNIT_MASKED)
|
|
|
803fb7 |
- return sd_bus_error_setf(e, BUS_ERROR_UNIT_MASKED,
|
|
|
803fb7 |
- "Unit %s is masked.", unit->id);
|
|
|
803fb7 |
-
|
|
|
803fb7 |
if (!unit_job_is_applicable(unit, type))
|
|
|
803fb7 |
return sd_bus_error_setf(e, BUS_ERROR_JOB_TYPE_NOT_APPLICABLE,
|
|
|
803fb7 |
"Job type %s is not applicable for unit %s.",
|
|
|
803fb7 |
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
|
|
|
803fb7 |
index 58998185c..e4b404abc 100644
|
|
|
803fb7 |
--- a/src/systemctl/systemctl.c
|
|
|
803fb7 |
+++ b/src/systemctl/systemctl.c
|
|
|
803fb7 |
@@ -2617,6 +2617,11 @@ static int start_unit_one(
|
|
|
803fb7 |
verb = method_to_verb(method);
|
|
|
803fb7 |
|
|
|
803fb7 |
log_error("Failed to %s %s: %s", verb, name, bus_error_message(error, r));
|
|
|
803fb7 |
+
|
|
|
803fb7 |
+ if (!sd_bus_error_has_name(error, BUS_ERROR_NO_SUCH_UNIT) &&
|
|
|
803fb7 |
+ !sd_bus_error_has_name(error, BUS_ERROR_UNIT_MASKED))
|
|
|
803fb7 |
+ log_error("See system logs and 'systemctl status %s' for details.", name);
|
|
|
803fb7 |
+
|
|
|
803fb7 |
return r;
|
|
|
803fb7 |
}
|
|
|
803fb7 |
|