[systemd-devel] [PATCH] fstab-generator: Do not try to fsck non-devices

Zbigniew Jędrzejewski-Szmek zbyszek at in.waw.pl
Sat Dec 21 20:00:08 PST 2013


On Sat, Dec 21, 2013 at 05:49:19PM +0100, Tom Gundersen wrote:
> On Sat, Dec 21, 2013 at 5:42 PM, Kay Sievers <kay at vrfy.org> wrote:
> > On Sat, Dec 21, 2013 at 5:33 PM, Dave Reisner <d at falconindy.com> wrote:
> >> On Sat, Dec 21, 2013 at 12:49:07PM +0100, Tom Gundersen wrote:
> >>> On Sat, Dec 21, 2013 at 11:22 AM, Thomas Bächler <thomas at archlinux.org> wrote:
> >>> > This fixes a regression introduced in 64e70e4 where the mount fails
> >>> > when fstab is misconfigured with fs_passno > 0 on a virtual file
> >>> > system like tmpfs.
> >>> > ---
> >>> >  src/fstab-generator/fstab-generator.c | 8 +++++---
> >>> >  1 file changed, 5 insertions(+), 3 deletions(-)
> >>> >
> >>> > diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
> >>> > index 1227f08..709a1c3 100644
> >>> > --- a/src/fstab-generator/fstab-generator.c
> >>> > +++ b/src/fstab-generator/fstab-generator.c
> >>> > @@ -255,9 +255,11 @@ static int add_mount(
> >>> >                          "Before=%s\n",
> >>> >                          post);
> >>> >
> >>> > -        r = add_fsck(f, what, where, type, passno);
> >>> > -        if (r < 0)
> >>> > -                return r;
> >>> > +        if(is_device_path(what)) {
> >>> > +                r = add_fsck(f, what, where, type, passno);
> >>> > +                if (r < 0)
> >>> > +                        return r;
> >>> > +        }
Hi,
patch is applied, but I moved the chck into add_fsck, because the check
for passno is there. And I added a warning, since this is a configuration
error that should be corrected.

Also, I don't see how the mount could fail for tmpfs: tmpfs must always
be specified as the type, and if the type is specified, add_fsck
looks for /sbin/fsck.<type> and only emits a warning. But in case of
a non-device fs which can be given with "auto" as the type, e.g. nfs,
there indeed was a problem.

> >>> How does "fsck -A" deal with these cases?
> >>
> >> tmpfs falls into the category of pseudofs, which fsck -A will
> >> intentionally ignore, regardless of the passno.
> >>
> >>> Also, how does your patch deal with LABEL= and UUDI=?
> >>
> >> At this point, "what" has been filtered through fstab_node_to_udev_node,
> >> so LABEL=foo will be /dev/disk/by-label/foo.
> >
> > Generally, not sure if that it always correct here, kernel "nodev"
> > superblocks have a dev_t with major == 0 and are very simple to detect
> > that way.
There's no superblock yet at this point, because the device might not be there
yet. But I think that the is_device_path test is OK.

> Hm, so why doesn't fsck just deal gracefully with this?
We call /sbin/fsck.<type> directly, which in this case doesn't exist. Also
systemd waits for the device to appear before calling fsck.

Zbyszek


More information about the systemd-devel mailing list