[systemd-devel] [PATCH 1/3] fstab-generator: Generate explicit dependencies on systemd-fsck at .service instead of using FsckPassNo

Lennart Poettering lennart at poettering.net
Mon Sep 30 18:07:21 PDT 2013


On Mon, 30.09.13 01:34, Thomas Bächler (thomas at archlinux.org) wrote:

I'd love to get rid of FsckPassNo=, but I fear that's not that
easy... After all it's not just a boolean, it actually influences the
ordering of the fsck. There traditionally were two documented phases
which you could use to serialize multiple fsck on the same HDD
but different partitions, but parallelize it on different HDDs. Now,
fsck since a while can determine all that automatically these days. But
still by using FsckPassNo= you get ordering deps automatically added.

a) leave everything as is and FsckPassNo= does odering deps

b) declare that manual passno configuration is stupid beyond treating it
   as simple boolean. In thatc ase we should drop all references of
   passno in the sources. Of course people might complain that we break
   compat with UNIX, but well...

c) Pimp up fstab-generator to write complete unit files for
   fsck at .service that include the right dependencies. Meh.

d) Pimp up fstab-generator to write only .d dropins that add the
   necessary deps between the fsck instances, but nothing else.

I think c) and a) suck. b) sounds like the best option to me. d) sounds
workable too.

If we go for b) then I figure people might complain that fstab(5) is not
longer compatible with what systemd does?

Opinions?

> ---
>  src/fstab-generator/fstab-generator.c | 17 +++++++++++++----
>  1 file changed, 13 insertions(+), 4 deletions(-)
> 
> diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
> index 6cecb4e..83aba7d 100644
> --- a/src/fstab-generator/fstab-generator.c
> +++ b/src/fstab-generator/fstab-generator.c
> @@ -209,17 +209,26 @@ static int add_mount(
>                          "Before=%s\n",
>                          post);
>  
> +        if (passno > 0) {
> +                _cleanup_free_ char *fsck = NULL;
> +                fsck = unit_name_from_path_instance("systemd-fsck", what, ".service");
> +                fprintf(f,
> +                        "Requires=%s\n"
> +                        "After=%s\n",
> +                        fsck,
> +                        fsck);
> +        }
> +
> +
>          fprintf(f,
>                  "\n"
>                  "[Mount]\n"
>                  "What=%s\n"
>                  "Where=%s\n"
> -                "Type=%s\n"
> -                "FsckPassNo=%i\n",
> +                "Type=%s\n",
>                  what,
>                  where,
> -                type,
> -                passno);
> +                type);
>  
>          if (!isempty(opts) &&
>              !streq(opts, "defaults"))


Lennart

-- 
Lennart Poettering - Red Hat, Inc.


More information about the systemd-devel mailing list