mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-05 09:17:44 +03:00
swap: create .wants symlink to 'auto' swap devices
As we load unit files lazily, we need to make sure something pulls in swap
units that should be started automatically, otherwise the default dependencies
will never be applied.
This partially reinstates code removed in
commit 64347fc2b9
.
Also don't order swap devices after swap.target when they are 'nofail'.
This commit is contained in:
parent
a5c724b25b
commit
4e82fe5213
@ -220,8 +220,12 @@ static int swap_add_default_dependencies(Swap *s) {
|
||||
}
|
||||
|
||||
if (!noauto) {
|
||||
r = unit_add_two_dependencies_by_name_inverse(UNIT(s), UNIT_AFTER, (nofail ? UNIT_WANTS : UNIT_REQUIRES),
|
||||
SPECIAL_SWAP_TARGET, NULL, true);
|
||||
if (nofail)
|
||||
r = unit_add_dependency_by_name_inverse(UNIT(s),
|
||||
UNIT_WANTS, SPECIAL_SWAP_TARGET, NULL, true);
|
||||
else
|
||||
r = unit_add_two_dependencies_by_name_inverse(UNIT(s),
|
||||
UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SWAP_TARGET, NULL, true);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
@ -66,6 +66,7 @@ static int mount_find_pri(struct mntent *me, int *ret) {
|
||||
static int add_swap(const char *what, struct mntent *me) {
|
||||
_cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL, *device = NULL;
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
bool noauto;
|
||||
int r, pri = -1;
|
||||
|
||||
assert(what);
|
||||
@ -77,6 +78,8 @@ static int add_swap(const char *what, struct mntent *me) {
|
||||
return pri;
|
||||
}
|
||||
|
||||
noauto = !!hasmntopt(me, "noauto");
|
||||
|
||||
name = unit_name_from_path(what, ".swap");
|
||||
if (!name)
|
||||
return log_oom();
|
||||
@ -97,8 +100,7 @@ static int add_swap(const char *what, struct mntent *me) {
|
||||
fprintf(f,
|
||||
"# Automatically generated by systemd-fstab-generator\n\n"
|
||||
"[Unit]\n"
|
||||
"SourcePath=/etc/fstab\n"
|
||||
"\n"
|
||||
"SourcePath=/etc/fstab\n\n"
|
||||
"[Swap]\n"
|
||||
"What=%s\n",
|
||||
what);
|
||||
@ -114,6 +116,18 @@ static int add_swap(const char *what, struct mntent *me) {
|
||||
return -errno;
|
||||
}
|
||||
|
||||
if (!noauto) {
|
||||
lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL);
|
||||
if (!lnk)
|
||||
return log_oom();
|
||||
|
||||
mkdir_parents_label(lnk, 0755);
|
||||
if (symlink(unit, lnk) < 0) {
|
||||
log_error("Failed to create symlink %s: %m", lnk);
|
||||
return -errno;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user