[systemd-devel] [PATCH] fstab-generator: add x-systemd.{after, requires-mounts-for}=

Lennart Poettering lennart at poettering.net
Wed May 13 05:24:51 PDT 2015


On Tue, 12.05.15 18:04, Karel Zak (kzak at redhat.com) wrote:

> Currently we have no way how to specify dependencies between fstab
> entries (or another units) in the /etc/fstab. It means that users are
> forced to bypass fstab and write .mount units manually.
> 
> Years ago Lennart suggested to add
> 
> x-systemd.after=<PATH>
> 
>  - to specify dependence an another mount (PATH is translated to <PATH>.mount)
> 
> x-systemd.after=<UNIT>
> 
>  - to specify dependence on arbitrary UNIT
> 
> The x-systemd.after= is implemented by After= and Requires=.

Hmm, I am pretty sure x-systemd.after= should only create After=
dependencies, not Requires=. I'd be open though to add
x-systemd.requires= which adds both After= and Requires=.

(So far we never augmented ordering deps by requirement deps, but
sometimes we do augment requirement deps with ordering deps, for
example in many cases for DefaultDependencies=yes logic. Hence we
should  follow this here, too.)

Hence, please rename this option to "x-systemd.requires=". Otherwise I
like the concept.

> x-systemd.requires-mounts-for=<PATH ...>
> 
>  - to specify dependence on another paths, implemented by
>    RequiresMountsFor=.


Sounds good. 

>        <varlistentry>
> +        <term><option>x-systemd.after=</option></term>
> +
> +        <listitem><para>Configures <varname>After=</varname> and
> <varname>Requires=</varname> dependence

s/dependence/dependency

> +
> +        <listitem><para>Configures <varname>RequiresMountsFor=</varname> dependence between the mount and
> +        another mount. The argument is a space-separated list of absolute paths. Note
> +        that <filename>/etc/fstab</filename> format requires to escape space as \040.
> +        See <varname>RequiresMountsFor=</varname> in
> +        <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
> +        for details.</para></listitem>

Hmm, I think it would be better to allow specifiying the option
multiple times rather than using spaces to seperate the values...

> +        r = fstab_filter_options(opts, "x-systemd.after\0", NULL, &arg, NULL);
> +        if (r < 0)
> +                return log_warning_errno(r, "Failed to parse options: %m");
> +        if (r == 0)
> +                return 0;
> +
> +        if (*arg == '/') {
> +                r = unit_name_from_path(arg, ".mount", &unit);

I figure this should simply use unit_name_mangle_with_suffix(), which
will do the right thing for device nodes, normal paths and unit
names. No need to manually mangle this...

> +        if (!automount && opts) {
> +                 write_requires_after(f, opts);
> +                 write_requires_mounts_for(f, opts);
> +        }
> +

This should probably propagate errors.

>          if (passno != 0) {
>                  r = generator_write_fsck_deps(f, arg_dest, what, where, fstype);
>                  if (r < 0)
> @@ -315,6 +359,11 @@ static int add_mount(
>                                  "Before=%s\n",
>                                  post);
>  
> +                if (opts) {
> +                        write_requires_after(f, opts);
> +                        write_requires_mounts_for(f, opts);
> +                }

Same here.

Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list