All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Felix Möller" <felixmoeller@gmx.de>
To: linux-kernel@vger.kernel.org
Cc: miklos@szeredi.hu
Subject: Re: pivot_root doesn't work for me in 2.6.14-rc3
Date: Sat, 08 Oct 2005 11:23:37 +0200	[thread overview]
Message-ID: <43479019.6070803@gmx.de> (raw)
In-Reply-To: <Pine.LNX.4.62.0510061555190.12337@www.mcquillansystems.com>

Hi James,
> I've found a problem with pivot_root that worked fine in 2.6.13.3, but
> fails for me, starting in 2.6.14-rc3  (haven't tried rc1 or rc2).
> 
> This is for LTSP.org (Linux Terminal Server Project) thin clients.
> 
> In our initramfs, we have a '/init' script that creates a mountpoint for
> a 2nd ramfs, and i'm trying to pivot_root to that mount point.
> 
> I'm getting:
> 
>    pivot_root: Invalid Argument
> 
> This worked perfectly in 2.6.13.3, so I looked at the 2.6.14-rc3 patch,
> and I found the code in fs/namespace.c that is causing it to fail for
> me:
> 
> @@ -1334,8 +1332,12 @@ asmlinkage long sys_pivot_root(const cha
>         error = -EINVAL;
>         if (user_nd.mnt->mnt_root != user_nd.dentry)
>                 goto out2; /* not a mountpoint */
> +       if (user_nd.mnt->mnt_parent == user_nd.mnt)
> +               goto out2; /* not attached */
>         if (new_nd.mnt->mnt_root != new_nd.dentry)
>                 goto out2; /* not a mountpoint */
> +       if (new_nd.mnt->mnt_parent == new_nd.mnt)
> +               goto out2; /* not attached */
>         tmp = old_nd.mnt; /* make sure we can reach put_old from
> new_root */
>         spin_lock(&vfsmount_lock);
>         if (tmp != new_nd.mnt) {
> 
> 
> The first of the 2 new tests are causing the pivot_root to fail for me.
> If I comment out those lines, it works again.
> 
> I'm thinking that somebody put those lines there for a reason, so
> there's possibly something wrong with the way i've been doing this for a
> long time, and the tightening of the code has uncovered my problem.
Miklos Szeredi put these lines there with the following comment:
"[PATCH] pivot_root() circular reference fix

Fix http://bugzilla.kernel.org/show_bug.cgi?id=4857

When pivot_root is called from an init script in an initramfs 
environment, it causes a circular reference in the mount tree.

The cause of this is that pivot_root() is not prepared to handle 
pivoting an unattached mount. In an initramfs environment, rootfs is the 
root of the namespace, and so it is not attached.

This patch fixes this and related problems, by returning -EINVAL if 
either the current root or the new root is detached."

> I'll explain how we use the initramfs/nfsroot:
> [...]
> 
> Somebody recently told me that pivot_root has been put in the 'evil way
> to do things' category, and that there was a new way, but he couldn't
> remember what that was.
googeling a little bit I found the following link:
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=137005

Felix Möller


  reply	other threads:[~2005-10-08  9:41 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-10-06 20:17 pivot_root doesn't work for me in 2.6.14-rc3 Jim McQuillan
2005-10-08  9:23 ` Felix Möller [this message]
2005-10-08 10:00   ` Miklos Szeredi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=43479019.6070803@gmx.de \
    --to=felixmoeller@gmx.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.