From 21e557edcc1894ce4eeb70b71ca16e82e95bc0df Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 11 Oct 2011 03:33:53 +0200 Subject: [PATCH] units: introduce local-fs-pre.target and remote-fs-pre.target This hook target enables services to order themselves between network.target and remote mounts, which is needed for GFS2 and similar systems. --- Makefile.am | 2 ++ man/systemd.special.xml.in | 26 ++++++++++++++++++++++++++ src/mount.c | 6 ++++-- src/special.h | 2 ++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index f4a17aa7..3a98c5b0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -337,7 +337,9 @@ dist_systemunit_DATA = \ units/halt.target \ units/kexec.target \ units/local-fs.target \ + units/local-fs-pre.target \ units/remote-fs.target \ + units/remote-fs-pre.target \ units/cryptsetup.target \ units/network.target \ units/nss-lookup.target \ diff --git a/man/systemd.special.xml.in b/man/systemd.special.xml.in index 21875405..116a43cc 100644 --- a/man/systemd.special.xml.in +++ b/man/systemd.special.xml.in @@ -59,6 +59,7 @@ halt.target, kbrequest.target, local-fs.target, + local-fs-pre.target, mail-transfer-agent.target, multi-user.target, network.target, @@ -66,6 +67,7 @@ poweroff.target, reboot.target, remote-fs.target, + remote-fs-pre.target, rescue.target, rpcbind.target, runlevel2.target, @@ -260,6 +262,18 @@ facility. + + local-fs-pre.target + + This target unit is + automatically ordered before + all local mount points marked + with + (see above). It can be used to + execute certain units before + all local mounts. + + mail-transfer-agent.target @@ -373,6 +387,18 @@ facility. + + remote-fs-pre.target + + This target unit is + automatically ordered before + all remote mount points marked + with + (see above). It can be used to + execute certain units before + all remote mounts. + + rescue.target diff --git a/src/mount.c b/src/mount.c index 2fc799a6..ef953f0d 100644 --- a/src/mount.c +++ b/src/mount.c @@ -357,9 +357,11 @@ static int mount_add_fstab_links(Mount *m) { if (mount_is_network(p)) { target = SPECIAL_REMOTE_FS_TARGET; - after = SPECIAL_NETWORK_TARGET; - } else + after = SPECIAL_REMOTE_FS_PRE_TARGET; + } else { target = SPECIAL_LOCAL_FS_TARGET; + after = SPECIAL_LOCAL_FS_PRE_TARGET; + } if (!path_equal(m->where, "/")) if ((r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true)) < 0) diff --git a/src/special.h b/src/special.h index 614e53ca..3fe34c95 100644 --- a/src/special.h +++ b/src/special.h @@ -45,7 +45,9 @@ #define SPECIAL_SYSINIT_TARGET "sysinit.target" #define SPECIAL_SOCKETS_TARGET "sockets.target" #define SPECIAL_LOCAL_FS_TARGET "local-fs.target" /* LSB's $local_fs */ +#define SPECIAL_LOCAL_FS_PRE_TARGET "local-fs-pre.target" #define SPECIAL_REMOTE_FS_TARGET "remote-fs.target" /* LSB's $remote_fs */ +#define SPECIAL_REMOTE_FS_PRE_TARGET "remote-fs-pre.target" #define SPECIAL_SWAP_TARGET "swap.target" #define SPECIAL_BASIC_TARGET "basic.target" -- 2.39.5