From: Franck Bui Date: Thu, 2 Apr 2020 06:51:00 +0000 (+0200) Subject: mount: default startup dependencies and default network ones are orthogonal X-Git-Tag: v246-rc1~361^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2ec15c4f8a288d4f2e92ba2b8586736b2a07b9ea;p=thirdparty%2Fsystemd.git mount: default startup dependencies and default network ones are orthogonal Regardless of whether a mount is setup in initrd or int the main system, the network default dependencies _netdev should still be honored. IOW if a mount unit use the following options "x-initrd.mount,_netdev", it should be ordered against initrd-fs.target, network.target, network-online.target. /dev/vdb1 /mnt ext4 x-initrd.mount,_netdev defaults 0 0 Before this patch: Before=umount.target initrd-fs.target After=system.slice sysroot.mount dev-vdb1.device -.mount systemd-journald.socket blockdev@dev-vdb1.target After this patch: Before=initrd-fs.target umount.target After=network-online.target -.mount blockdev@dev-vdb1.target dev-vdb1.device sysroot.mount system.slice network.target systemd-journald.socket --- diff --git a/src/core/mount.c b/src/core/mount.c index 585bfbde10d..0f51ac368f5 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -450,29 +450,9 @@ static int mount_add_default_ordering_dependencies( before = isempty(e) ? SPECIAL_INITRD_ROOT_FS_TARGET : SPECIAL_INITRD_FS_TARGET; } else if (mount_is_network(p)) { - /* We order ourselves after network.target. This is - * primarily useful at shutdown: services that take - * down the network should order themselves before - * network.target, so that they are shut down only - * after this mount unit is stopped. */ - - r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, SPECIAL_NETWORK_TARGET, true, mask); - if (r < 0) - return r; - - /* We pull in network-online.target, and order - * ourselves after it. This is useful at start-up to - * actively pull in tools that want to be started - * before we start mounting network file systems, and - * whose purpose it is to delay this until the network - * is "up". */ - - r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_WANTS, UNIT_AFTER, SPECIAL_NETWORK_ONLINE_TARGET, true, mask); - if (r < 0) - return r; - after = SPECIAL_REMOTE_FS_PRE_TARGET; before = SPECIAL_REMOTE_FS_TARGET; + } else { after = SPECIAL_LOCAL_FS_PRE_TARGET; before = SPECIAL_LOCAL_FS_TARGET; @@ -521,6 +501,26 @@ static int mount_add_default_dependencies(Mount *m) { if (r < 0) return r; + if (mount_is_network(p)) { + /* We order ourselves after network.target. This is primarily useful at shutdown: + * services that take down the network should order themselves before + * network.target, so that they are shut down only after this mount unit is + * stopped. */ + + r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, SPECIAL_NETWORK_TARGET, true, mask); + if (r < 0) + return r; + + /* We pull in network-online.target, and order ourselves after it. This is useful + * at start-up to actively pull in tools that want to be started before we start + * mounting network file systems, and whose purpose it is to delay this until the + * network is "up". */ + + r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_WANTS, UNIT_AFTER, SPECIAL_NETWORK_ONLINE_TARGET, true, mask); + if (r < 0) + return r; + } + /* If this is a tmpfs mount then we have to unmount it before we try to deactivate swaps */ if (streq_ptr(p->fstype, "tmpfs")) { r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, SPECIAL_SWAP_TARGET, true, mask);