All of lore.kernel.org
 help / color / mirror / Atom feed
From: NeilBrown <neilb@suse.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>,
	Andreas Dilger <adilger@dilger.ca>,
	Dave Chinner <david@fromorbit.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	Christoph Hellwig <hch@infradead.org>
Subject: Re: [RFC][PATCHSET v3] non-recursive pathname resolution & RCU symlinks
Date: Tue, 19 May 2015 18:33:28 +1000	[thread overview]
Message-ID: <20150519183328.137c1b73@notabene.brown> (raw)
In-Reply-To: <CA+55aFzzTPBhg__P597uh70fezshqS5JscGwkw21anRg7_bwwA@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 5945 bytes --]

On Sun, 17 May 2015 19:56:26 -0700 Linus Torvalds
<torvalds@linux-foundation.org> wrote:

> On Sun, May 17, 2015 at 4:16 PM, NeilBrown <neilb@suse.de> wrote:
> >
> > Just to be crystal clear about what I want:
> >   I want the filesystem to be in control
> 
> Yeah, no. Not going to happen.
> 
> You seem to think that the dcache is "just" a cache. It's not. It's a
> cache, but that is absolutely not all that it is. It's very much a
> cache with strong semantics.
> 
> And no, we're not handing over those semantics over to the filesystem.
> The dcache is not just a cache, it's the *primary* data structure that
> we use for pathname validation, local security checking, and for doing
> things like "getcwd()" and handling ".." etc.

A fact that makes it relatively easy to create a situation where 'getcwd()'
returns a string for which 'stat' says ENOENT or where "cd .." puts you
somewhere that "getcwd" gets quite upset:

$ cd ..
cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory

$ ls -l /proc/self/cwd
lrwxrwxrwx 1 neilb users 0 May 19 17:28 /proc/self/cwd -> /mnt/tmp/cdir (deleted)

(and no: I hadn't deleted the cwd, just renamed some things on the server)

> 
> So there's no way the filesystem is "in control". You as a filesystem
> are not really even doing the actual pathname lookup. The *only* thing
> you're doing is filling in the dcache. The actual real pathname lookup
> is done by the VFS layer using the dcache data.
> 
> That's how it very fundamentally works.  It's *so* much more than a
> cache - it really *is* the primary path lookup. The filesystem is the
> slave in this relationship.

This requires the VFS to have knowledge, sometimes intimate knowledge, of how
each filesystem works.
DCACHE_NFSFS_RENAMED ?
Oh wait, afs and btrfs know about that too, so it can't be too intimate.

> 
> > The filesystem then uses generic helpers (or not) to find the answers and adds
> > more current information to the cache.
> 
> You can do that already. There *are* those generic helpers to add data
> to the cache. That's what "d_instantiate()" and friends _are_ for.
> 
> But no, you do *not* control name lookup. You get notified when
> there's not enough data in the cache, and then you can fill it up any
> which way you want.
> 
> You can populate the dcache with other entries than the one we asked
> for, and you can ask the dcache to revalidate and throw dentries out.
> 
> But no, you do *not* get access to things like do_last() or to the
> decision to follow symlinks or namespace rules, or mountpoints or
> things like that.

Obviously the important rules that you mention would be handled by library
code.  But do_last() could be a lot simpler if the filesystem could manage the
'stale dentry' handling and call one version or the other of do_last
depending on whether it had an 'atomic_open' callback or not.

> 
> > So for Al's example of revalidating multiple components at once, once the VFS
> > gets to a point in the path where  d_revalidate says "I need more time",
> > the VFS just passes the rest of the path to the filesystem.
> 
> That's bullshit,. for a very simple and basic reason: "the rest of the
> path" is not necessarily at all for your filesystem!

For revalidate: probably not, though the filesystem can ask questions of the
dcache just as easily as the VFS.  For lookup, the rest of the path up to a
".." or symlink (which the filesystem can easily recognise) does belong to
the filesystem.

On this topic, Al suggested:

>                                          With bulk revalidate covering
> all the chain when we stumble across .., mountpoint or something we believe
> to be a symlink, or when the chain reaches fs-specified limit. 

That "fs-specific limit" is what really bothers me.  This is feeding more
information about the fs into the VFS, and it assumes that a "limit" is the
thing that is meaningful for the VFS to know.  Just let the FS take over and
use the approved interfaces to collect the dentries that it thinks might be
useful to revalidate, and then revalidate them.


> 
> Really. There might be mount-points, there might be symlinks, there
> might be tons of stuff like that.
> 
> You're not getting control, for the very simple reason that IT IS NOT
> YOUR DATA. And it really never ever will be.
> 
> Now, this is why I said we can do a "hint" style thing. Part of that
> "hint" issue is very very much that it has no semantic meaning. You
> can't screw it up, because if it turns out that the path component
> we're looking up is a symlink and we actually end up in some other
> filesystem, if you end up looking up the hint part, it just would
> never actually get used.
> 
> So it's kind of like a prefetch for names. It's semantically much
> weaker than saying "look up this name". The hint would be "this is
> likely the next part of the name that the VFS layer will look up".
> 
> And the key part of that statement is
>  (a) "likely" (it might not happen, and even if it does happen, it
> migth not be for your filesystem)
> and
>  (b) "the VFS layer will look up" because it won't be the low-level
> filesystem doing it.
> 
> So it would be the low-level filesystem pre-populating the dcache - if
> the low-level filesystem decides the hint is worth using for that -
> and the VFS layer then uses the data in the dcache without further
> bothering the filesystem.
> 
> Exactly because the dcache is *so* much more than "just a cache".
> 
>                     Linus

Well, let's just start with that "in-lookup" or "unknown" dentry that has
been mentioned, so that the VFS doesn't have to hold i_mutex across lookup
and create, and so that the filesystem can at least control it's own locking.

That would be a big step forward in my mind.

Thanks,
NeilBrown

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 811 bytes --]

  parent reply	other threads:[~2015-05-19  8:33 UTC|newest]

Thread overview: 299+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-05  5:22 [RFC][PATCHSET] non-recursive pathname resolution Al Viro
2015-05-05  5:21 ` [PATCH 01/79] 9p: don't bother with 4K allocation for 24-byte local array Al Viro
2015-05-05  5:21 ` [PATCH 02/79] 9p: don't bother with __getname() in ->follow_link() Al Viro
2015-05-05  5:21 ` [PATCH 03/79] ovl: rearrange ovl_follow_link to it doesn't need to call ->put_link Al Viro
2015-05-05  5:21 ` [PATCH 04/79] ext4: split inode_operations for encrypted symlinks off the rest Al Viro
2015-05-05  9:10   ` Jan Kara
2015-05-05 15:01   ` Linus Torvalds
2015-05-05 15:10     ` Al Viro
2015-05-05  5:21 ` [PATCH 05/79] libfs: simple_follow_link() Al Viro
2015-05-05  9:20   ` Jan Kara
2015-05-05  5:21 ` [PATCH 06/79] ext2: use simple_follow_link() Al Viro
2015-05-05  9:17   ` Jan Kara
2015-05-05  5:21 ` [PATCH 07/79] befs: switch to simple_follow_link() Al Viro
2015-05-05  9:21   ` Jan Kara
2015-05-05  5:21 ` [PATCH 08/79] ext3: " Al Viro
2015-05-05  9:19   ` Jan Kara
2015-05-05  5:21 ` [PATCH 09/79] ext4: " Al Viro
2015-05-05  9:22   ` Jan Kara
2015-05-05  5:21 ` [PATCH 10/79] jffs2: " Al Viro
2015-05-05  5:21 ` [PATCH 11/79] shmem: " Al Viro
2015-05-05  9:24   ` Jan Kara
2015-05-05  5:21 ` [PATCH 12/79] debugfs: " Al Viro
2015-05-05  9:25   ` Jan Kara
2015-05-05  5:21 ` [PATCH 13/79] ufs: " Al Viro
2015-05-05  5:21 ` [PATCH 14/79] ubifs: " Al Viro
2015-05-05  5:21 ` [PATCH 15/79] sysv: " Al Viro
2015-05-05  5:21 ` [PATCH 16/79] jfs: " Al Viro
2015-05-05  9:27   ` Jan Kara
2015-05-06 13:39   ` Dave Kleikamp
2015-05-05  5:21 ` [PATCH 17/79] freevxfs: " Al Viro
2015-05-05  5:21 ` [PATCH 18/79] exofs: switch to {simple,page}_symlink_inode_operations Al Viro
2015-05-06  9:59   ` Boaz Harrosh
2015-05-05  5:21 ` [PATCH 19/79] ceph: switch to simple_follow_link() Al Viro
2015-05-05  5:21 ` [PATCH 20/79] logfs: fix a pagecache leak for symlinks Al Viro
2015-05-05  5:21 ` [PATCH 21/79] SECURITY: remove nameidata arg from inode_follow_link Al Viro
2015-05-05  5:21 ` [PATCH 22/79] uninline walk_component() Al Viro
2015-05-05  5:21 ` [PATCH 23/79] namei: take O_NOFOLLOW treatment into do_last() Al Viro
2015-05-05  5:21 ` [PATCH 24/79] do_last: kill symlink_ok Al Viro
2015-05-05  5:21 ` [PATCH 25/79] do_last: regularize the logics around following symlinks Al Viro
2015-05-05  5:22 ` [PATCH 26/79] namei: get rid of lookup_hash() Al Viro
2015-05-05  5:22 ` [PATCH 27/79] name: shift nameidata down into user_path_walk() Al Viro
2015-05-05  5:22 ` [PATCH 28/79] namei: lift nameidata into filename_mountpoint() Al Viro
2015-05-05  5:22 ` [PATCH 29/79] new ->follow_link() and ->put_link() calling conventions Al Viro
2015-05-05  5:22 ` [PATCH 30/79] namei.c: separate the parts of follow_link() that find the link body Al Viro
2015-05-05  5:22 ` [PATCH 31/79] namei: don't bother with ->follow_link() if ->i_link is set Al Viro
2015-05-05  5:22 ` [PATCH 32/79] namei: introduce nameidata->link Al Viro
2015-05-05  5:22 ` [PATCH 33/79] do_last: move path there from caller's stack frame Al Viro
2015-05-05  5:22 ` [PATCH 34/79] namei: expand nested_symlink() in its only caller Al Viro
2015-05-05  5:22 ` [PATCH 35/79] namei: expand the call of follow_link() in link_path_walk() Al Viro
2015-05-05  5:22 ` [PATCH 36/79] namei: move the calls of may_follow_link() into follow_link() Al Viro
2015-05-05  5:22 ` [PATCH 37/79] namei: rename follow_link to trailing_symlink, move it down Al Viro
2015-05-05  5:22 ` [PATCH 38/79] link_path_walk: handle get_link() returning ERR_PTR() immediately Al Viro
2015-05-05  5:22 ` [PATCH 39/79] link_path_walk: don't bother with walk_component() after jumping link Al Viro
2015-05-05  5:22 ` [PATCH 40/79] link_path_walk: turn inner loop into explicit goto Al Viro
2015-05-05 15:09   ` Linus Torvalds
2015-05-05 15:17     ` Al Viro
2015-05-05 15:21       ` Linus Torvalds
2015-05-14 14:44     ` OT / Pascal (was: [PATCH 40/79] link_path_walk: turn inner loop into explicit goto) el_es
2015-05-05  5:22 ` [PATCH 41/79] link_path_walk: massage a bit more Al Viro
2015-05-05  5:22 ` [PATCH 42/79] link_path_walk: get rid of duplication Al Viro
2015-05-05 15:10   ` Linus Torvalds
2015-05-05  5:22 ` [PATCH 43/79] link_path_walk: final preparations to killing recursion Al Viro
2015-05-05  5:22 ` [PATCH 44/79] link_path_walk: kill the recursion Al Viro
2015-05-05  5:22 ` [PATCH 45/79] link_path_walk: split "return from recursive call" path Al Viro
2015-05-05  5:22 ` [PATCH 46/79] link_path_walk: cleanup - turn goto start; into continue; Al Viro
2015-05-05  5:22 ` [PATCH 47/79] namei: move link/cookie pairs into nameidata Al Viro
2015-05-06  2:42   ` NeilBrown
2015-05-06  7:22     ` Al Viro
2015-05-05  5:22 ` [PATCH 48/79] namei: trim redundant arguments of trailing_symlink() Al Viro
2015-05-05  5:22 ` [PATCH 49/79] namei: trim redundant arguments of fs/namei.c:put_link() Al Viro
2015-05-05  5:22 ` [PATCH 50/79] namei: trim the arguments of get_link() Al Viro
2015-05-05  5:22 ` [PATCH 51/79] namei: remove restrictions on nesting depth Al Viro
2015-05-06  2:55   ` NeilBrown
2015-05-06  7:24     ` Al Viro
2015-05-06 16:22       ` Al Viro
2015-05-05  5:22 ` [PATCH 52/79] link_path_walk: nd->depth massage, part 1 Al Viro
2015-05-05  5:22 ` [PATCH 53/79] link_path_walk: nd->depth massage, part 2 Al Viro
2015-05-05  5:22 ` [PATCH 54/79] link_path_walk: nd->depth massage, part 3 Al Viro
2015-05-05  5:22 ` [PATCH 55/79] link_path_walk: nd->depth massage, part 4 Al Viro
2015-05-05  5:22 ` [PATCH 56/79] trailing_symlink: nd->depth massage, part 5 Al Viro
2015-05-05  5:22 ` [PATCH 57/79] get_link: nd->depth massage, part 6 Al Viro
2015-05-05  5:22 ` [PATCH 58/79] trailing_symlink: nd->depth massage, part 7 Al Viro
2015-05-05  5:22 ` [PATCH 59/79] put_link: nd->depth massage, part 8 Al Viro
2015-05-05  5:22 ` [PATCH 60/79] link_path_walk: nd->depth massage, part 9 Al Viro
2015-05-05  5:22 ` [PATCH 61/79] link_path_walk: nd->depth massage, part 10 Al Viro
2015-05-05  5:22 ` [PATCH 62/79] link_path_walk: end of nd->depth massage Al Viro
2015-05-05  5:22 ` [PATCH 63/79] namei: we never need more than MAXSYMLINKS entries in nd->stack Al Viro
2015-05-05  5:22 ` [PATCH 64/79] namei: lift (open-coded) terminate_walk() in follow_dotdot_rcu() into callers Al Viro
2015-05-05  5:22 ` [PATCH 65/79] lift terminate_walk() into callers of walk_component() Al Viro
2015-05-05  5:22 ` [PATCH 66/79] namei: lift (open-coded) terminate_walk() into callers of get_link() Al Viro
2015-05-05  5:22 ` [PATCH 67/79] namei: take put_link() into {lookup,mountpoint,do}_last() Al Viro
2015-05-05  5:22 ` [PATCH 68/79] namei: have terminate_walk() do put_link() on everything left Al Viro
2015-05-05  5:22 ` [PATCH 69/79] link_path_walk: move the OK: inside the loop Al Viro
2015-05-05  5:22 ` [PATCH 70/79] namei: new calling conventions for walk_component() Al Viro
2015-05-05  5:22 ` [PATCH 71/79] namei: make should_follow_link() store the link in nd->link Al Viro
2015-05-05  5:22 ` [PATCH 72/79] namei: move link count check and stack allocation into pick_link() Al Viro
2015-05-05  5:22 ` [PATCH 73/79] lustre: rip the private symlink nesting limit out Al Viro
2015-05-05  5:22 ` [PATCH 74/79] VFS: replace {, total_}link_count in task_struct with pointer to nameidata Al Viro
2015-05-05  5:22 ` [PATCH 75/79] namei: simplify the callers of follow_managed() Al Viro
2015-05-05  5:22 ` [PATCH 76/79] don't pass nameidata to ->follow_link() Al Viro
2015-05-05  5:22 ` [PATCH 77/79] namei: move unlazying on symlinks towards get_link() call sites Al Viro
2015-05-05  5:22 ` [PATCH 78/79] namei: new helper - is_stale() Al Viro
2015-05-05  5:22 ` [PATCH 79/79] namei: stretch RCU mode into get_link() Al Viro
2015-05-05 15:20 ` [RFC][PATCHSET] non-recursive pathname resolution Linus Torvalds
2015-05-05 23:59   ` Al Viro
2015-05-10  5:45     ` Al Viro
2015-05-11 18:06 ` [RFC][PATCHSET v3] non-recursive pathname resolution & RCU symlinks Al Viro
2015-05-11 18:06   ` [PATCH v3 001/110] 9p: don't bother with 4K allocation for 24-byte local array Al Viro
2015-05-11 18:06   ` [PATCH v3 002/110] 9p: don't bother with __getname() in ->follow_link() Al Viro
2015-05-11 18:06   ` [PATCH v3 003/110] ovl: rearrange ovl_follow_link to it doesn't need to call ->put_link Al Viro
2015-05-11 18:06   ` [PATCH v3 004/110] ext4: split inode_operations for encrypted symlinks off the rest Al Viro
2015-05-11 18:20     ` Linus Torvalds
2015-05-11 18:06   ` [PATCH v3 005/110] libfs: simple_follow_link() Al Viro
2015-05-11 18:06   ` [PATCH v3 006/110] ext2: use simple_follow_link() Al Viro
2015-05-11 18:06   ` [PATCH v3 007/110] befs: switch to simple_follow_link() Al Viro
2015-05-11 18:06   ` [PATCH v3 008/110] ext3: " Al Viro
2015-05-11 18:06   ` [PATCH v3 009/110] ext4: " Al Viro
2015-05-11 18:06   ` [PATCH v3 010/110] jffs2: " Al Viro
2015-05-11 18:06   ` [PATCH v3 011/110] shmem: " Al Viro
2015-05-11 18:06   ` [PATCH v3 012/110] debugfs: " Al Viro
2015-05-11 18:06   ` [PATCH v3 013/110] ufs: " Al Viro
2015-05-11 18:06   ` [PATCH v3 014/110] ubifs: " Al Viro
2015-05-11 18:06   ` [PATCH v3 015/110] sysv: " Al Viro
2015-05-11 18:06   ` [PATCH v3 016/110] jfs: " Al Viro
2015-05-11 18:06   ` [PATCH v3 017/110] freevxfs: " Al Viro
2015-05-11 18:06   ` [PATCH v3 018/110] exofs: switch to {simple,page}_symlink_inode_operations Al Viro
2015-05-11 18:06   ` [PATCH v3 019/110] ceph: switch to simple_follow_link() Al Viro
2015-05-11 18:06   ` [PATCH v3 020/110] logfs: fix a pagecache leak for symlinks Al Viro
2015-05-11 18:06   ` [PATCH v3 021/110] SECURITY: remove nameidata arg from inode_follow_link Al Viro
2015-05-11 18:06   ` [PATCH v3 022/110] uninline walk_component() Al Viro
2015-05-11 18:06   ` [PATCH v3 023/110] namei: take O_NOFOLLOW treatment into do_last() Al Viro
2015-05-11 18:06   ` [PATCH v3 024/110] do_last: kill symlink_ok Al Viro
2015-05-11 18:06   ` [PATCH v3 025/110] do_last: regularize the logics around following symlinks Al Viro
2015-05-11 18:06   ` [PATCH v3 026/110] namei: get rid of lookup_hash() Al Viro
2015-05-11 18:06   ` [PATCH v3 027/110] name: shift nameidata down into user_path_walk() Al Viro
2015-05-11 18:06   ` [PATCH v3 028/110] namei: lift nameidata into filename_mountpoint() Al Viro
2015-05-11 18:06   ` [PATCH v3 029/110] new ->follow_link() and ->put_link() calling conventions Al Viro
2015-05-11 18:06   ` [PATCH v3 030/110] namei.c: separate the parts of follow_link() that find the link body Al Viro
2015-05-11 18:06   ` [PATCH v3 031/110] namei: don't bother with ->follow_link() if ->i_link is set Al Viro
2015-05-11 18:06   ` [PATCH v3 032/110] namei: introduce nameidata->link Al Viro
2015-05-11 18:06   ` [PATCH v3 033/110] do_last: move path there from caller's stack frame Al Viro
2015-05-11 18:06   ` [PATCH v3 034/110] namei: expand nested_symlink() in its only caller Al Viro
2015-05-11 18:06   ` [PATCH v3 035/110] namei: expand the call of follow_link() in link_path_walk() Al Viro
2015-05-11 18:06   ` [PATCH v3 036/110] namei: move the calls of may_follow_link() into follow_link() Al Viro
2015-05-11 18:06   ` [PATCH v3 037/110] namei: rename follow_link to trailing_symlink, move it down Al Viro
2015-05-11 18:06   ` [PATCH v3 038/110] link_path_walk: handle get_link() returning ERR_PTR() immediately Al Viro
2015-05-11 18:06   ` [PATCH v3 039/110] link_path_walk: don't bother with walk_component() after jumping link Al Viro
2015-05-11 18:07   ` [PATCH v3 040/110] link_path_walk: turn inner loop into explicit goto Al Viro
2015-05-11 18:07   ` [PATCH v3 041/110] link_path_walk: massage a bit more Al Viro
2015-05-11 18:07   ` [PATCH v3 042/110] link_path_walk: get rid of duplication Al Viro
2015-05-11 18:07   ` [PATCH v3 043/110] link_path_walk: final preparations to killing recursion Al Viro
2015-05-11 18:07   ` [PATCH v3 044/110] link_path_walk: kill the recursion Al Viro
2015-05-11 18:07   ` [PATCH v3 045/110] link_path_walk: split "return from recursive call" path Al Viro
2015-05-11 18:07   ` [PATCH v3 046/110] link_path_walk: cleanup - turn goto start; into continue; Al Viro
2015-05-11 18:07   ` [PATCH v3 047/110] namei: move link/cookie pairs into nameidata Al Viro
2015-05-11 18:07   ` [PATCH v3 048/110] namei: trim redundant arguments of trailing_symlink() Al Viro
2015-05-11 18:07   ` [PATCH v3 049/110] namei: trim redundant arguments of fs/namei.c:put_link() Al Viro
2015-05-11 18:07   ` [PATCH v3 050/110] namei: trim the arguments of get_link() Al Viro
2015-05-11 18:07   ` [PATCH v3 051/110] namei: remove restrictions on nesting depth Al Viro
2015-05-11 18:07   ` [PATCH v3 052/110] link_path_walk: nd->depth massage, part 1 Al Viro
2015-05-11 18:07   ` [PATCH v3 053/110] link_path_walk: nd->depth massage, part 2 Al Viro
2015-05-11 18:07   ` [PATCH v3 054/110] link_path_walk: nd->depth massage, part 3 Al Viro
2015-05-11 18:07   ` [PATCH v3 055/110] link_path_walk: nd->depth massage, part 4 Al Viro
2015-05-11 18:07   ` [PATCH v3 056/110] trailing_symlink: nd->depth massage, part 5 Al Viro
2015-05-11 18:07   ` [PATCH v3 057/110] get_link: nd->depth massage, part 6 Al Viro
2015-05-11 18:07   ` [PATCH v3 058/110] trailing_symlink: nd->depth massage, part 7 Al Viro
2015-05-11 18:07   ` [PATCH v3 059/110] put_link: nd->depth massage, part 8 Al Viro
2015-05-11 18:07   ` [PATCH v3 060/110] link_path_walk: nd->depth massage, part 9 Al Viro
2015-05-11 18:07   ` [PATCH v3 061/110] link_path_walk: nd->depth massage, part 10 Al Viro
2015-05-11 18:07   ` [PATCH v3 062/110] link_path_walk: end of nd->depth massage Al Viro
2015-05-11 18:07   ` [PATCH v3 063/110] namei: we never need more than MAXSYMLINKS entries in nd->stack Al Viro
2015-05-11 18:07   ` [PATCH v3 064/110] namei: lift (open-coded) terminate_walk() in follow_dotdot_rcu() into callers Al Viro
2015-05-11 18:07   ` [PATCH v3 065/110] lift terminate_walk() into callers of walk_component() Al Viro
2015-05-11 18:07   ` [PATCH v3 066/110] namei: lift (open-coded) terminate_walk() into callers of get_link() Al Viro
2015-05-11 18:07   ` [PATCH v3 067/110] namei: take put_link() into {lookup,mountpoint,do}_last() Al Viro
2015-05-11 18:07   ` [PATCH v3 068/110] namei: have terminate_walk() do put_link() on everything left Al Viro
2015-05-11 18:07   ` [PATCH v3 069/110] link_path_walk: move the OK: inside the loop Al Viro
2015-05-11 18:07   ` [PATCH v3 070/110] namei: new calling conventions for walk_component() Al Viro
2015-05-11 18:07   ` [PATCH v3 071/110] namei: make should_follow_link() store the link in nd->link Al Viro
2015-05-11 18:07   ` [PATCH v3 072/110] namei: move link count check and stack allocation into pick_link() Al Viro
2015-05-11 18:07   ` [PATCH v3 073/110] lustre: rip the private symlink nesting limit out Al Viro
2015-05-11 18:07   ` [PATCH v3 074/110] VFS: replace {, total_}link_count in task_struct with pointer to nameidata Al Viro
2015-05-14 23:21     ` Al Viro
2015-05-11 18:07   ` [PATCH v3 075/110] namei: simplify the callers of follow_managed() Al Viro
2015-05-11 18:07   ` [PATCH v3 076/110] don't pass nameidata to ->follow_link() Al Viro
2015-05-11 18:07   ` [PATCH v3 077/110] namei: simplify failure exits in get_link() Al Viro
2015-05-11 18:07   ` [PATCH v3 078/110] namei: simpler treatment of symlinks with nothing other that / in the body Al Viro
2015-05-11 18:07   ` [PATCH v3 079/110] namei: take the treatment of absolute symlinks to get_link() Al Viro
2015-05-11 18:07   ` [PATCH v3 080/110] namei: fold put_link() into the failure case of complete_walk() Al Viro
2015-05-11 18:07   ` [PATCH v3 081/110] namei: move bumping the refcount of link->mnt into pick_link() Al Viro
2015-05-11 18:07   ` [PATCH v3 082/110] may_follow_link(): trim arguments Al Viro
2015-05-11 18:07   ` [PATCH v3 083/110] namei: kill nd->link Al Viro
2015-05-11 18:07   ` [PATCH v3 084/110] namei: take increment of nd->depth into pick_link() Al Viro
2015-05-11 18:07   ` [PATCH v3 085/110] namei: may_follow_link() - lift terminate_walk() on failures into caller Al Viro
2015-05-11 18:07   ` [PATCH v3 086/110] namei: split off filename_lookupat() with LOOKUP_PARENT Al Viro
2015-05-11 18:07   ` [PATCH v3 087/110] namei: get rid of nameidata->base Al Viro
2015-05-11 18:07   ` [PATCH v3 088/110] namei: path_init() calling conventions change Al Viro
2015-05-11 18:07   ` [PATCH v3 089/110] namei: lift link_path_walk() call out of trailing_symlink() Al Viro
2015-05-11 18:07   ` [PATCH v3 090/110] namei: lift terminate_walk() all the way up Al Viro
2015-05-11 18:07   ` [PATCH v3 091/110] link_path_walk: use explicit returns for failure exits Al Viro
2015-05-11 18:07   ` [PATCH v3 092/110] namei: explicitly pass seq number to unlazy_walk() when dentry != NULL Al Viro
2015-05-11 18:07   ` [PATCH v3 093/110] namei: don't mangle nd->seq in lookup_fast() Al Viro
2015-05-11 18:07   ` [PATCH v3 094/110] namei: store inode in nd->stack[] Al Viro
2015-05-11 18:07   ` [PATCH v3 095/110] VFS: Handle lower layer dentry/inode in pathwalk Al Viro
2015-05-11 18:07   ` [PATCH v3 096/110] namei: pick_link() callers already have inode Al Viro
2015-05-11 18:07   ` [PATCH v3 097/110] security/selinux: pass 'flags' arg to avc_audit() and avc_has_perm_flags() Al Viro
2015-05-11 18:07   ` [PATCH v3 098/110] security: make inode_follow_link RCU-walk aware Al Viro
2015-05-11 18:07   ` [PATCH v3 099/110] switch ->put_link() from dentry to inode Al Viro
2015-05-11 18:08   ` [PATCH v3 100/110] new helper: free_page_put_link() Al Viro
2015-05-11 18:08   ` [PATCH v3 101/110] namei: make put_link() RCU-safe Al Viro
2015-05-11 18:08   ` [PATCH v3 102/110] namei: make may_follow_link() safe in RCU mode Al Viro
2015-05-11 18:08   ` [PATCH v3 103/110] new helper: __legitimize_mnt() Al Viro
2015-05-11 18:08   ` [PATCH v3 104/110] namei: store seq numbers in nd->stack[] Al Viro
2015-05-11 18:08   ` [PATCH v3 105/110] namei: make unlazy_walk and terminate_walk handle nd->stack, add unlazy_link Al Viro
2015-05-11 23:43     ` Al Viro
2015-05-12  4:10       ` Al Viro
2015-05-15  5:07         ` Al Viro
2015-05-11 18:08   ` [PATCH v3 106/110] namei: don't unlazy until get_link() Al Viro
2015-05-11 18:08   ` [PATCH v3 107/110] VFS/namei: make the use of touch_atime() in get_link() RCU-safe Al Viro
2015-05-11 18:08   ` [PATCH v3 108/110] enable passing fast relative symlinks without dropping out of RCU mode Al Viro
2015-05-11 18:08   ` [PATCH v3 109/110] namei: handle absolute " Al Viro
2015-05-15  5:11     ` Al Viro
2015-05-11 18:08   ` [PATCH v3 110/110] update Documentation/filesystems/ regarding the follow_link/put_link changes Al Viro
2015-05-13 22:25   ` [RFC][PATCHSET v3] non-recursive pathname resolution & RCU symlinks Al Viro
2015-05-13 22:25     ` [PATCH 01/21] namei: unlazy_walk() doesn't need to mess with current->fs anymore Al Viro
2015-05-13 22:25     ` [PATCH 02/21] lustre: kill unused macro (LOOKUP_CONTINUE) Al Viro
2015-05-13 22:25     ` [PATCH 03/21] lustre: kill unused helper Al Viro
2015-05-13 22:25     ` [PATCH 04/21] get rid of assorted nameidata-related debris Al Viro
2015-05-13 22:25     ` [PATCH 05/21] Documentation: remove outdated information from automount-support.txt Al Viro
2015-05-13 22:26     ` [PATCH 06/21] namei: be careful with mountpoint crossings in follow_dotdot_rcu() Al Viro
2015-05-13 22:26     ` [PATCH 07/21] namei: uninline set_root{,_rcu}() Al Viro
2015-05-13 22:26     ` [PATCH 08/21] namei: pass the struct path to store the result down into path_lookupat() Al Viro
2015-05-13 22:26     ` [PATCH 09/21] namei: move putname() call into filename_lookup() Al Viro
2015-05-13 22:26     ` [PATCH 10/21] namei: shift nameidata inside filename_lookup() Al Viro
2015-05-13 22:26     ` [PATCH 11/21] namei: make filename_lookup() reject ERR_PTR() passed as name Al Viro
2015-05-13 22:26     ` [PATCH 12/21] namei: shift nameidata down into filename_parentat() Al Viro
2015-05-13 22:26     ` [PATCH 13/21] namei: saner calling conventions for filename_create() Al Viro
2015-05-13 22:26     ` [PATCH 14/21] namei: saner calling conventions for filename_parentat() Al Viro
2015-05-13 22:26     ` [PATCH 15/21] namei: fold path_cleanup() into terminate_walk() Al Viro
2015-05-13 22:26     ` [PATCH 16/21] namei: stash dfd and name into nameidata Al Viro
2015-05-13 22:26     ` [PATCH 17/21] namei: trim do_last() arguments Al Viro
2015-05-13 22:26     ` [PATCH 18/21] inline user_path_parent() Al Viro
2015-05-13 22:26     ` [PATCH 19/21] inline user_path_create() Al Viro
2015-05-13 22:26     ` [PATCH 20/21] namei: move saved_nd pointer into struct nameidata Al Viro
2015-05-13 22:26     ` [PATCH 21/21] turn user_{path_at,path,lpath,path_dir}() into static inlines Al Viro
2015-05-14  1:39     ` [RFC][PATCHSET v3] non-recursive pathname resolution & RCU symlinks Linus Torvalds
2015-05-14  3:30       ` Al Viro
2015-05-14  3:52         ` Linus Torvalds
2015-05-14 11:23           ` Dave Chinner
2015-05-14 12:46             ` Jan Kara
2015-05-14 15:51             ` Linus Torvalds
2015-05-14 17:02               ` Linus Torvalds
2015-05-15 23:38               ` Dave Chinner
2015-05-16  0:10                 ` Al Viro
2015-05-16  0:20                   ` Al Viro
2015-05-16  1:23                 ` Linus Torvalds
2015-05-15 21:15             ` Andreas Dilger
2015-05-15 23:30               ` NeilBrown
2015-05-15 23:49                 ` Al Viro
2015-05-16  0:45                 ` Linus Torvalds
2015-05-16  1:25                   ` NeilBrown
2015-05-16  1:47                     ` Linus Torvalds
2015-05-16  1:55                       ` Al Viro
2015-05-16  2:23                         ` Linus Torvalds
2015-05-16  3:16                           ` Al Viro
     [not found]                             ` <CA+55aFzOcE7e=sOckb56KTs+WGutnL2_uum=pLD6Y+73t=EwOQ@mail.gmail.com>
2015-05-16  4:31                               ` Al Viro
2015-05-16 19:36                                 ` Linus Torvalds
2015-05-16  1:47                     ` Al Viro
2015-05-16  4:45                       ` NeilBrown
2015-05-16  5:46                         ` Al Viro
2015-05-16 14:18                           ` Al Viro
2015-05-17  3:12                             ` NeilBrown
2015-05-17  3:48                               ` Linus Torvalds
2015-05-17  4:04                                 ` Linus Torvalds
2015-05-17  4:47                                   ` NeilBrown
2015-05-17 10:55                                   ` Al Viro
2015-05-17 16:43                                     ` Linus Torvalds
2015-05-17 16:56                                       ` Linus Torvalds
2015-05-17 23:16                                       ` NeilBrown
2015-05-18  2:56                                         ` Linus Torvalds
2015-05-18  3:42                                           ` Al Viro
2015-05-18  4:20                                             ` Linus Torvalds
2015-05-19  8:33                                           ` NeilBrown [this message]
2015-05-17 23:39                                     ` NeilBrown
2015-05-18  0:10                                       ` Al Viro
2015-05-17  3:03                           ` NeilBrown
2015-05-16  1:38                   ` Al Viro
2015-05-15 23:39               ` Dave Chinner
2015-05-14 22:09           ` Jeremy Allison
2015-05-14 23:24             ` Linus Torvalds
2015-05-14 23:36               ` Al Viro
2015-05-15  0:25                 ` Linus Torvalds
2015-05-15  1:26                   ` Al Viro
2015-05-15  2:18                     ` Linus Torvalds
2015-05-15  2:51                       ` Al Viro
2015-05-15 18:30                         ` Linus Torvalds
2015-05-14 23:57               ` Jeremy Allison
2015-05-15 23:43                 ` Dave Chinner
2015-05-14 16:32         ` Eric W. Biederman

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=20150519183328.137c1b73@notabene.brown \
    --to=neilb@suse.de \
    --cc=adilger@dilger.ca \
    --cc=david@fromorbit.com \
    --cc=hch@infradead.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@zeniv.linux.org.uk \
    /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.