From: Helge Hafting <helge.hafting@aitel.hist.no>
To: Willy Tarreau <willy@w.ods.org>
Cc: Linda Walsh <lkml@tlinx.org>, Al Viro <viro@ftp.linux.org.uk>,
Linux-Kernel <linux-kernel@vger.kernel.org>,
linux-fsdevel@vger.kernel.org
Subject: Re: max symlink = 5? ?bug? ?feature deficit?
Date: Mon, 13 Feb 2006 09:20:02 +0100 [thread overview]
Message-ID: <43F04132.6090905@aitel.hist.no> (raw)
In-Reply-To: <20060213073746.GG11380@w.ods.org>
Willy Tarreau wrote:
>On Sun, Feb 12, 2006 at 04:54:23PM -0800, Linda Walsh wrote:
>
>
>>Al Viro wrote:
>>
>>
>>>On Sun, Feb 12, 2006 at 02:54:33PM -0800, Linda Walsh wrote:
>>>
>>>
>>>
>>>>Al Viro wrote:
>>>>
>>>>
>>>>
>>>>>Care to RTFS? I mean, really - at least to the point of seeing what's
>>>>>involved in that recursion.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>Hmmm...that's where I got the original parameter numbers, but
>>>>I see it's not so straightforward. I tried a limit of
>>>>40, but I quickly get an OS hang when trying to reference a
>>>>13th link. Twelve works at the limit, but would take more testing
>>>>to find out the bottleneck.
>>>>
>>>>
>>>>
>>>Sigh... 12 works at the limit on your particular config, filesystems
>>>being used and syscall being issued (hint: amount of stuff on stack
>>>before we enter mutual recursion varies; so does the amount of stuff
>>>on stack we get from function that are not part of mutual recursion,
>>>but are called from the damn thing).
>>>
>>>
>>>
>>---
>> Yeah, I sorta figured that. Is there any easier way to
>>remove the recursion? I dunno about you, but I was always taught
>>that recursion, while elegant, was not always the most efficient in
>>terms of time and space requirements and one could get similar
>>functionality using iteration and a stack.
>>
>>
>
>I don't know exactly why recursion is used to follow symlinks,
>which at first thought seems like it could be iterated, but
>I've not checked the code, there certainly are specific reasons
>for this. However, there's often an alternative to recursion, it
>consists in implementing a local stack onto the stack. I mean,
>
>
Sometimes, there are better ways than implementing your
own stack. For example, not having any kind of stack.
That means memory usage don't increase with the number of
chained symlinks.
>when you need recursion, it is because you want to be able to
>get back to where you were previously (eg: try another branch
>in a tree).
>
Yes, but what if we don't need the ability to go back?
Consider this approach to symlinks:
1. We have a path component to resolve
2. It turns out to be a symlink. So look it up, then
loop back to (1)
This goes on until what we find isn't a symlink, or till some
overflow counter decides that we probably have a symlink loop.
With no memory of where we came from, there is no
recursive use of memory. And no way of going back in
single steps, but I assume that isn't necessary here.
I could be wrong about that though.
Helge Hafting
next prev parent reply other threads:[~2006-02-13 8:14 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-11 3:31 max symlink = 5? ?bug? ?feature deficit? Linda Walsh
2006-02-12 10:27 ` Jan Engelhardt
2006-02-12 20:46 ` [PATCH] Use one constant to control MAX SYMLINKS in a name Linda Walsh
2006-02-12 21:16 ` Al Viro
2006-02-12 18:06 ` max symlink = 5? ?bug? ?feature deficit? Al Viro
2006-02-12 19:19 ` Dave Jones
2006-02-12 19:36 ` Matthew Wilcox
2006-02-12 19:48 ` Al Viro
2006-02-12 21:18 ` Linda Walsh
2006-02-12 21:25 ` Al Viro
2006-02-12 22:54 ` Linda Walsh
2006-02-13 0:08 ` Al Viro
2006-02-13 0:54 ` Linda Walsh
2006-02-13 7:37 ` Willy Tarreau
2006-02-13 7:48 ` Arjan van de Ven
2006-02-13 8:03 ` Willy Tarreau
2006-02-13 8:11 ` Al Viro
2006-02-13 14:10 ` Olivier Galibert
2006-02-13 8:20 ` Helge Hafting [this message]
-- strict thread matches above, loose matches on Subject: below --
2006-02-12 15:16 linux
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=43F04132.6090905@aitel.hist.no \
--to=helge.hafting@aitel.hist.no \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lkml@tlinx.org \
--cc=viro@ftp.linux.org.uk \
--cc=willy@w.ods.org \
/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.