Re: "Too many levels of symbolic links"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 03/16/16 03:10, Ian Kent wrote:
On Wed, 2016-03-09 at 18:44 +0100, Donald Buczek wrote:
As a reminder, here is the script we used to demonstrate the problem (
assuming /project/mariux32 is served by autofs) :

===
#! /bin/sh

ls -ld /project/mariux32/.
unshare -m -- bash -c "sleep 6;ls -ld /project/mariux32/.;echo
exit..." &
kill -USR1  `cat /var/run/autofs-running`
sleep 3
ls -ld /project/mariux32/.
wait
===

In your mail quoted below you wrote, the error would be avoided if "/"
was set to shared before automount is started, but I can't confirm
this.

===
root:nsa:/scratch/local/# systemctl stop automount.service
root:nsa:/scratch/local/# mount --make-rshared /
root:nsa:/scratch/local/# systemctl start automount.service
root:nsa:/scratch/local/# ./test.sh
drwxrwsr-x 6 mx32prj mx32grp 56 Feb 24  2011 /project/mariux32/.
ls: cannot access /project/mariux32/.: Too many levels of symbolic
links
drwxrwsr-x 6 mx32prj mx32grp 56 Feb 24  2011 /project/mariux32/.
exit...
root:nsa:/scratch/local/#
===
Actually, assuming /project is an indirect mount, I think that should
have been OK.

My fault. It does work. I've overlooked

> unshare since util-linux version 2.27 automatically sets propagation to private in a
> new mount namespace to make sure that the new namespace is really
> unshared. It's possible to disable this feature with option --propagation unchanged.

So in fact it does

> unshare(CLONE_NEWNS)                    = 0
> mount("none", "/", NULL, MS_REC|MS_PRIVATE, NULL) = 0

If I add "--propagation unchanged" to the test script, it works. Might be a solution for our environment.

I understand, that the combined semantics of automount and mount namespaces are yet to be defined and there is no clear,unique way to do that.

But independent of that, I think it might be better if autofs would continue to try to mount on top of a dentry with DCACHE_MOUNTED set and this might be a requirement for most of the thinkable solutions.

Again, there's more going on, probably unshare not cloning file handles
(the -m clones only the mount namespace I think). Without a way of
sending mount requests to the automount daemon, which needs to be done
via a file handle (the current pipe implementation or even if it was
socket based) the symptom will be the same as when / is propagation
private.

Well, with "mount --make-rshared /" and "unshare -m --propagation unchanged" it looks like everything seems to be working. And the mounts can be triggered from the new namespace as well. There is only one cosmetic thing: When a automount expires, the unmount fails when the (shared mount) in the other namespace still is busy. This generates some log.

2016-05-20T15:43:39+02:00 deadbird automount[938]: expiring path /project/mariux32 2016-05-20T15:43:39+02:00 deadbird automount[938]: >> umount.nfs: /project/mariux32: device is busy 2016-05-20T15:43:39+02:00 deadbird automount[938]: >> umount.nfs: /project/mariux32: device is busy 2016-05-20T15:43:39+02:00 deadbird automount[938]: >> umount.nfs: /project/mariux32: device is busy 2016-05-20T15:43:39+02:00 deadbird automount[938]: Unable to update the mtab file, /proc/mounts and /etc/mtab will differ
2016-05-20T15:43:39+02:00 deadbird automount[938]: expired /project/mariux32

Regards
  Donald



This is just a guess though.

Thank you!

    Donald


On 03/04/14 07:06, Ian Kent wrote:
On Mon, 2014-03-03 at 10:40 +0800, Ian Kent wrote:
That doesn't solve the problem, however, that mounts cloned by a
unshare(CLONE_NEWNS) would never expire. Also there is another
bug
somewhere, because I see, that the mount, visible to the
/usr/lib/colord/colord process was logged as "unmounted" in the
nfs
server when it expired in the global namespace. So I doubt it
would be
working even for that process. So possibly automounted mounts
shouldn't
be cloned at all? Together with chroot or pivot_root the
sematics would
be more than unclear anyway. Your problem now :-)
Hehe, like I said some people are going to be disappointed.

There's just one question about this that remains.

Assuming systemd is setting "/" shared what happens if "mount
--make-rprivate /" is run before autofs is started?

So if you can spend a little more time on this an answer to this
would
be helpful.
No need for this, thanks to your reproducer.

In fact the problem doesn't appear happen if "/" is set shared so in
your case "/" must be set either slave or private.

And expanding the reproducer a bit I see another failure case too,
and
it doesn't appear to be the unreliable d_mountpoint() check, not
sure
yet exactly what it is.

Thanks
Ian




--
Donald Buczek
buczek@xxxxxxxxxxxxx
Tel: +49 30 8413 1433

--
To unsubscribe from this list: send the line "unsubscribe autofs" in



[Index of Archives]     [Linux Filesystem Development]     [Linux Ext4]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux