swap: handle nofail/noauto in core

This commit is contained in:
Tom Gundersen 2013-08-21 22:48:56 +08:00
parent 88ac30a197
commit 64347fc2b9
2 changed files with 18 additions and 56 deletions

View File

@ -197,6 +197,7 @@ static int swap_add_device_links(Swap *s) {
}
static int swap_add_default_dependencies(Swap *s) {
bool nofail = false, noauto = false;
int r;
assert(s);
@ -211,6 +212,20 @@ static int swap_add_default_dependencies(Swap *s) {
if (r < 0)
return r;
if (s->from_fragment) {
SwapParameters *p = &s->parameters_fragment;
nofail = p->nofail;
noauto = p->noauto;
}
if (!noauto) {
r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, (nofail ? UNIT_WANTED_BY : UNIT_REQUIRED_BY),
SPECIAL_SWAP_TARGET, NULL, true);
if (r < 0)
return r;
}
return 0;
}

View File

@ -38,22 +38,6 @@
static const char *arg_dest = "/tmp";
static bool arg_enabled = true;
static int device_name(const char *path, char **unit) {
char *p;
assert(path);
if (!is_device_path(path))
return 0;
p = unit_name_from_path(path, ".device");
if (!p)
return log_oom();
*unit = p;
return 1;
}
static int mount_find_pri(struct mntent *me, int *ret) {
char *end, *pri;
unsigned long r;
@ -82,7 +66,6 @@ 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, nofail;
int r, pri = -1;
assert(what);
@ -94,9 +77,6 @@ static int add_swap(const char *what, struct mntent *me) {
return pri;
}
noauto = !!hasmntopt(me, "noauto");
nofail = !!hasmntopt(me, "nofail");
name = unit_name_from_path(what, ".swap");
if (!name)
return log_oom();
@ -114,14 +94,10 @@ static int add_swap(const char *what, struct mntent *me) {
return -errno;
}
fputs("# Automatically generated by systemd-fstab-generator\n\n"
"[Unit]\n"
"SourcePath=/etc/fstab\n", f);
if (!noauto && !nofail)
fputs("Before=" SPECIAL_SWAP_TARGET "\n", f);
fprintf(f,
"# Automatically generated by systemd-fstab-generator\n\n"
"[Unit]\n"
"SourcePath=/etc/fstab\n"
"\n"
"[Swap]\n"
"What=%s\n",
@ -138,35 +114,6 @@ 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;
}
r = device_name(what, &device);
if (r < 0)
return r;
if (r > 0) {
free(lnk);
lnk = strjoin(arg_dest, "/", device, ".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;
}