static void swap_unset_proc_swaps(Swap *s) {
Swap *first;
+ Hashmap *swaps;
assert(s);
/* Remove this unit from the chain of swaps which share the
* same kernel swap device. */
-
- first = hashmap_get(UNIT(s)->manager->swaps_by_proc_swaps, s->parameters_proc_swaps.what);
+ swaps = UNIT(s)->manager->swaps_by_proc_swaps;
+ first = hashmap_get(swaps, s->parameters_proc_swaps.what);
LIST_REMOVE(Swap, same_proc_swaps, first, s);
if (first)
- hashmap_remove_and_replace(UNIT(s)->manager->swaps_by_proc_swaps, s->parameters_proc_swaps.what, first->parameters_proc_swaps.what, first);
+ hashmap_remove_and_replace(swaps,
+ s->parameters_proc_swaps.what,
+ first->parameters_proc_swaps.what,
+ first);
else
- hashmap_remove(UNIT(s)->manager->swaps_by_proc_swaps, s->parameters_proc_swaps.what);
+ hashmap_remove(swaps, s->parameters_proc_swaps.what);
free(s->parameters_proc_swaps.what);
s->parameters_proc_swaps.what = NULL;
return 0;
}
-static int swap_add_target_links(Swap *s) {
- Unit *tu;
- int r;
-
- assert(s);
-
- if (!s->from_fragment)
- return 0;
-
- if ((r = manager_load_unit(UNIT(s)->manager, SPECIAL_SWAP_TARGET, NULL, NULL, &tu)) < 0)
- return r;
-
- return unit_add_dependency(UNIT(s), UNIT_BEFORE, tu, true);
-}
-
static int swap_add_device_links(Swap *s) {
SwapParameters *p;
if (is_device_path(s->what))
return unit_add_node_link(UNIT(s), s->what,
!p->noauto && p->nofail &&
- UNIT(s)->manager->running_as == MANAGER_SYSTEM);
+ UNIT(s)->manager->running_as == SYSTEMD_SYSTEM);
else
/* File based swap devices need to be ordered after
* systemd-remount-fs.service, since they might need a
assert(s);
- if (UNIT(s)->manager->running_as != MANAGER_SYSTEM)
+ if (UNIT(s)->manager->running_as != SYSTEMD_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);
static int swap_verify(Swap *s) {
bool b;
- char *e;
+ char _cleanup_free_ *e = NULL;
if (UNIT(s)->load_state != UNIT_LOADED)
return 0;
- if (!(e = unit_name_from_path(s->what, ".swap")))
- return -ENOMEM;
+ e = unit_name_from_path(s->what, ".swap");
+ if (e == NULL)
+ return log_oom();
b = unit_has_name(UNIT(s), e);
- free(e);
-
if (!b) {
log_error("%s: Value of \"What\" and unit name do not match, not loading.\n", UNIT(s)->id);
return -EINVAL;
if ((r = swap_add_mount_links(s)) < 0)
return r;
- if ((r = swap_add_target_links(s)) < 0)
- return r;
-
if ((r = unit_add_default_cgroups(u)) < 0)
return r;
bool set_flags) {
Unit *u = NULL;
- char *e = NULL, *wp = NULL;
+ char _cleanup_free_ *e = NULL;
+ char *wp = NULL;
bool delete = false;
int r;
SwapParameters *p;
e = unit_name_from_path(what, ".swap");
if (!e)
- return -ENOMEM;
+ return log_oom();
u = manager_get_unit(m, e);
delete = true;
u = unit_new(m, sizeof(Swap));
- if (!u) {
- free(e);
- return -ENOMEM;
- }
+ if (!u)
+ return log_oom();
r = unit_add_name(u, e);
if (r < 0)
unit_add_to_dbus_queue(u);
- free(e);
-
return 0;
fail:
log_warning("Failed to load swap unit: %s", strerror(-r));
free(wp);
- free(e);
if (delete && u)
unit_free(u);
const UnitVTable swap_vtable = {
.object_size = sizeof(Swap),
+ .exec_context_offset = offsetof(Swap, exec_context),
+
.sections =
"Unit\0"
"Swap\0"