From 1406bd66e4dbb5dd0130d9327ffd588652cbe228 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 1 Mar 2023 09:37:41 +0100 Subject: [PATCH] tree-wide: error handling modernizations --- src/core/execute.c | 26 +++++++++++++++----------- src/nspawn/nspawn.c | 4 ++-- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/core/execute.c b/src/core/execute.c index e23faf25bd9..dda8736804c 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -4655,11 +4655,13 @@ static int exec_child( if (mpol_is_valid(numa_policy_get_type(&context->numa_policy))) { r = apply_numa_policy(&context->numa_policy); - if (r == -EOPNOTSUPP) - log_unit_debug_errno(unit, r, "NUMA support not available, ignoring."); - else if (r < 0) { - *exit_status = EXIT_NUMA_POLICY; - return log_unit_error_errno(unit, r, "Failed to set NUMA memory policy: %m"); + if (r < 0) { + if (ERRNO_IS_NOT_SUPPORTED(r)) + log_unit_debug_errno(unit, r, "NUMA support not available, ignoring."); + else { + *exit_status = EXIT_NUMA_POLICY; + return log_unit_error_errno(unit, r, "Failed to set NUMA memory policy: %m"); + } } } @@ -4917,12 +4919,14 @@ static int exec_child( if (ns_type_supported(NAMESPACE_NET)) { r = setup_shareable_ns(runtime->netns_storage_socket, CLONE_NEWNET); - if (r == -EPERM) - log_unit_warning_errno(unit, r, - "PrivateNetwork=yes is configured, but network namespace setup failed, ignoring: %m"); - else if (r < 0) { - *exit_status = EXIT_NETWORK; - return log_unit_error_errno(unit, r, "Failed to set up network namespacing: %m"); + if (r < 0) { + if (ERRNO_IS_PRIVILEGE(r)) + log_unit_warning_errno(unit, r, + "PrivateNetwork=yes is configured, but network namespace setup failed, ignoring: %m"); + else { + *exit_status = EXIT_NETWORK; + return log_unit_error_errno(unit, r, "Failed to set up network namespacing: %m"); + } } } else if (context->network_namespace_path) { *exit_status = EXIT_NETWORK; diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index e498dc59c6e..5065c77fbbc 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -5518,8 +5518,8 @@ static int run(int argc, char *argv[]) { * two systems write to the same /var). Let's allow it for the special cases where /var is * either copied (i.e. --ephemeral) or replaced (i.e. --volatile=yes|state). */ if (path_equal(arg_directory, "/") && !(arg_ephemeral || IN_SET(arg_volatile_mode, VOLATILE_YES, VOLATILE_STATE))) { - log_error("Spawning container on root directory is not supported. Consider using --ephemeral, --volatile=yes or --volatile=state."); - r = -EINVAL; + r = log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "Spawning container on root directory is not supported. Consider using --ephemeral, --volatile=yes or --volatile=state."); goto finish; }