VFS: replace {, total_}link_count in task_struct with pointer to nameidata
authorNeilBrown <neilb@suse.de>
Mon, 23 Mar 2015 02:37:38 +0000 (13:37 +1100)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 11 May 2015 02:20:14 +0000 (22:20 -0400)
commit756daf263ea53a8bfc89db26cb92e963953253a1
treee39f0913c34c9098b39b2507a2216d5359e973db
parent44163f30059e9869451999e77109a37abba8c968
VFS: replace {, total_}link_count in task_struct with pointer to nameidata

task_struct currently contains two ad-hoc members for use by the VFS:
link_count and total_link_count.  These are only interesting to fs/namei.c,
so exposing them explicitly is poor layering.  Incidentally, link_count
isn't used anymore, so it can just die.

This patches replaces those with a single pointer to 'struct nameidata'.
This structure represents the current filename lookup of which
there can only be one per process, and is a natural place to
store total_link_count.

This will allow the current "nameidata" argument to all
follow_link operations to be removed as current->nameidata
can be used instead in the _very_ few instances that care about
it at all.

As there are occasional circumstances where pathname lookup can
recurse, such as through kern_path_locked, we always save and old
current->nameidata (if there is one) when setting a new value, and
make sure any active link_counts are preserved.

follow_mount and follow_automount now get a 'struct nameidata *'
rather than 'int flags' so that they can directly access
total_link_count, rather than going through 'current'.

Suggested-by: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namei.c
include/linux/sched.h