X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Fswap.c;h=8ba60559c698455fb48e5ce510c24549c4849b6b;hp=91bb0215b1efee52d62c97ea26659e358bdd4fa7;hb=c0387ebfb672d16e194201e04f8185545e1a5914;hpb=c74f17d96cccd4cc998fd037cb92046930188c91 diff --git a/src/core/swap.c b/src/core/swap.c index 91bb0215b..8ba60559c 100644 --- a/src/core/swap.c +++ b/src/core/swap.c @@ -39,6 +39,7 @@ #include "exit-status.h" #include "def.h" #include "path-util.h" +#include "virt.h" static const UnitActiveState state_translation_table[_SWAP_STATE_MAX] = { [SWAP_DEAD] = UNIT_INACTIVE, @@ -173,7 +174,8 @@ static int swap_add_target_links(Swap *s) { if (!s->from_fragment) return 0; - if ((r = manager_load_unit(UNIT(s)->manager, SPECIAL_SWAP_TARGET, NULL, NULL, &tu)) < 0) + r = manager_load_unit(UNIT(s)->manager, SPECIAL_SWAP_TARGET, NULL, NULL, &tu); + if (r < 0) return r; return unit_add_dependency(UNIT(s), UNIT_BEFORE, tu, true); @@ -211,6 +213,9 @@ static int swap_add_default_dependencies(Swap *s) { if (UNIT(s)->manager->running_as != MANAGER_SYSTEM) return 0; + if (detect_container(NULL) > 0) + return 0; + r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true); if (r < 0) return r; @@ -296,7 +301,7 @@ static int swap_load(Unit *u) { if ((r = swap_add_default_dependencies(s)) < 0) return r; - r = unit_patch_working_directory(UNIT(s), &s->exec_context); + r = unit_exec_context_defaults(u, &s->exec_context); if (r < 0) return r; } @@ -797,6 +802,9 @@ static int swap_start(Unit *u) { assert(s->state == SWAP_DEAD || s->state == SWAP_FAILED); + if (detect_container(NULL) > 0) + return -EPERM; + s->result = SWAP_SUCCESS; swap_enter_activating(s); return 0; @@ -817,6 +825,9 @@ static int swap_stop(Unit *u) { assert(s->state == SWAP_ACTIVATING || s->state == SWAP_ACTIVE); + if (detect_container(NULL) > 0) + return -EPERM; + swap_enter_deactivating(s); return 0; } @@ -917,7 +928,7 @@ static void swap_sigchld_event(Unit *u, pid_t pid, int code, int status) { s->control_pid = 0; - if (is_clean_exit(code, status)) + if (is_clean_exit(code, status, NULL)) f = SWAP_SUCCESS; else if (code == CLD_EXITED) f = SWAP_FAILURE_EXIT_CODE;