int generator_write_initrd_root_device_deps(const char *dir, const char *what) { _cleanup_free_ char *unit = NULL; int r; r = unit_name_from_path(what, ".device", &unit); if (r < 0) return log_error_errno(r, "Failed to make unit name from path: %m"); return write_drop_in_format(dir, SPECIAL_INITRD_ROOT_DEVICE_TARGET, 50, "root-device", "# Automatically generated by %s\n\n" "[Unit]\nRequires=%s\nAfter=%s", program_invocation_short_name, unit, unit); }
int generator_write_timeouts( const char *dir, const char *what, const char *where, const char *opts, char **filtered) { /* Allow configuration how long we wait for a device that * backs a mount point to show up. This is useful to support * endless device timeouts for devices that show up only after * user input, like crypto devices. */ _cleanup_free_ char *node = NULL, *unit = NULL, *timeout = NULL; usec_t u; int r; r = fstab_filter_options(opts, "comment=systemd.device-timeout\0" "x-systemd.device-timeout\0", NULL, &timeout, filtered); if (r <= 0) return r; r = parse_sec_fix_0(timeout, &u); if (r < 0) { log_warning("Failed to parse timeout for %s, ignoring: %s", where, timeout); return 0; } node = fstab_node_to_udev_node(what); if (!node) return log_oom(); if (!is_device_path(node)) { log_warning("x-systemd.device-timeout ignored for %s", what); return 0; } r = unit_name_from_path(node, ".device", &unit); if (r < 0) return log_error_errno(r, "Failed to make unit name from path: %m"); return write_drop_in_format(dir, unit, 50, "device-timeout", "# Automatically generated by %s\n\n" "[Unit]\n" "JobRunningTimeoutSec=%s", program_invocation_short_name, timeout); }
int generator_write_device_deps( const char *dir, const char *what, const char *where, const char *opts) { /* fstab records that specify _netdev option should apply the network * ordering on the actual device depending on network connection. If we * are not mounting real device (NFS, CIFS), we rely on _netdev effect * on the mount unit itself. */ _cleanup_free_ char *node = NULL, *unit = NULL; int r; if (!fstab_test_option(opts, "_netdev\0")) return 0; node = fstab_node_to_udev_node(what); if (!node) return log_oom(); /* Nothing to apply dependencies to. */ if (!is_device_path(node)) return 0; r = unit_name_from_path(node, ".device", &unit); if (r < 0) return log_error_errno(r, "Failed to make unit name from path \"%s\": %m", node); /* See mount_add_default_dependencies for explanation why we create such * dependencies. */ return write_drop_in_format(dir, unit, 50, "netdev-dependencies", "# Automatically generated by %s\n\n" "[Unit]\n" "After=" SPECIAL_NETWORK_ONLINE_TARGET " " SPECIAL_NETWORK_TARGET "\n" "Wants=" SPECIAL_NETWORK_ONLINE_TARGET "\n", program_invocation_short_name); }