[git pull] vfs pile 1

From: Al Viro
Date: Mon Jun 22 2015 - 02:47:51 EST


In this pile: pathname resolution rewrite.
* recursion in link_path_walk() is gone.
* nesting limits on symlinks are gone (the only limit remaining is that
the total amount of symlinks is no more than 40, no matter how nested).
* "fast" (inline) symlinks are handled without leaving rcuwalk mode.
* stack footprint (independent of the nesting) is below kilobyte now -
about on par with what it used to be with one level of nested symlinks
and ~2.8 times lower than it used to be in the worst case.
* struct nameidata is entirely private to fs/namei.c now (not even opaque
pointers are being passed around).
* ->follow_link() and ->put_link() calling conventions had been changed;
all in-tree filesystems converted, out-of-tree should be able to follow
reasonably easy; see Documentation/filesystems/porting for details (and
in-tree filesystems for examples of conversion).

That has sat in -next since mid-May, seems to survive all testing without
regressions and merges clean with v4.1. Please, pull from

git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git for-linus-1

Shortlog:
Al Viro (123):
9p: don't bother with 4K allocation for 24-byte local array...
9p: don't bother with __getname() in ->follow_link()
ext4: split inode_operations for encrypted symlinks off the rest
libfs: simple_follow_link()
ext2: use simple_follow_link()
befs: switch to simple_follow_link()
ext3: switch to simple_follow_link()
ext4: switch to simple_follow_link()
jffs2: switch to simple_follow_link()
shmem: switch to simple_follow_link()
debugfs: switch to simple_follow_link()
ufs: switch to simple_follow_link()
ubifs: switch to simple_follow_link()
sysv: switch to simple_follow_link()
jfs: switch to simple_follow_link()
freevxfs: switch to simple_follow_link()
exofs: switch to {simple,page}_symlink_inode_operations
ceph: switch to simple_follow_link()
logfs: fix a pagecache leak for symlinks
uninline walk_component()
namei: take O_NOFOLLOW treatment into do_last()
do_last: kill symlink_ok
do_last: regularize the logics around following symlinks
namei: get rid of lookup_hash()
name: shift nameidata down into user_path_walk()
namei: lift nameidata into filename_mountpoint()
new ->follow_link() and ->put_link() calling conventions
namei.c: separate the parts of follow_link() that find the link body
namei: don't bother with ->follow_link() if ->i_link is set
namei: introduce nameidata->link
do_last: move path there from caller's stack frame
namei: expand nested_symlink() in its only caller
namei: expand the call of follow_link() in link_path_walk()
namei: move the calls of may_follow_link() into follow_link()
namei: rename follow_link to trailing_symlink, move it down
link_path_walk: handle get_link() returning ERR_PTR() immediately
link_path_walk: don't bother with walk_component() after jumping link
link_path_walk: turn inner loop into explicit goto
link_path_walk: massage a bit more
link_path_walk: get rid of duplication
link_path_walk: final preparations to killing recursion
link_path_walk: kill the recursion
link_path_walk: split "return from recursive call" path
link_path_walk: cleanup - turn goto start; into continue;
namei: move link/cookie pairs into nameidata
namei: trim redundant arguments of trailing_symlink()
namei: trim redundant arguments of fs/namei.c:put_link()
namei: trim the arguments of get_link()
namei: remove restrictions on nesting depth
link_path_walk: nd->depth massage, part 1
link_path_walk: nd->depth massage, part 2
link_path_walk: nd->depth massage, part 3
link_path_walk: nd->depth massage, part 4
trailing_symlink: nd->depth massage, part 5
get_link: nd->depth massage, part 6
trailing_symlink: nd->depth massage, part 7
put_link: nd->depth massage, part 8
link_path_walk: nd->depth massage, part 9
link_path_walk: nd->depth massage, part 10
link_path_walk: end of nd->depth massage
namei: we never need more than MAXSYMLINKS entries in nd->stack
namei: lift (open-coded) terminate_walk() in follow_dotdot_rcu() into callers
lift terminate_walk() into callers of walk_component()
namei: lift (open-coded) terminate_walk() into callers of get_link()
namei: take put_link() into {lookup,mountpoint,do}_last()
namei: have terminate_walk() do put_link() on everything left
link_path_walk: move the OK: inside the loop
namei: new calling conventions for walk_component()
namei: make should_follow_link() store the link in nd->link
namei: move link count check and stack allocation into pick_link()
lustre: rip the private symlink nesting limit out
namei: simplify the callers of follow_managed()
don't pass nameidata to ->follow_link()
namei: simplify failure exits in get_link()
namei: simpler treatment of symlinks with nothing other that / in the body
namei: take the treatment of absolute symlinks to get_link()
namei: fold put_link() into the failure case of complete_walk()
namei: move bumping the refcount of link->mnt into pick_link()
may_follow_link(): trim arguments
namei: kill nd->link
namei: take increment of nd->depth into pick_link()
namei: may_follow_link() - lift terminate_walk() on failures into caller
namei: split off filename_lookupat() with LOOKUP_PARENT
namei: get rid of nameidata->base
namei: path_init() calling conventions change
namei: lift link_path_walk() call out of trailing_symlink()
namei: lift terminate_walk() all the way up
link_path_walk: use explicit returns for failure exits
namei: explicitly pass seq number to unlazy_walk() when dentry != NULL
namei: don't mangle nd->seq in lookup_fast()
namei: store inode in nd->stack[]
namei: pick_link() callers already have inode
switch ->put_link() from dentry to inode
new helper: free_page_put_link()
namei: make put_link() RCU-safe
namei: make may_follow_link() safe in RCU mode
new helper: __legitimize_mnt()
namei: store seq numbers in nd->stack[]
namei: make unlazy_walk and terminate_walk handle nd->stack, add unlazy_link
namei: don't unlazy until get_link()
enable passing fast relative symlinks without dropping out of RCU mode
namei: handle absolute symlinks without dropping out of RCU mode
update Documentation/filesystems/ regarding the follow_link/put_link changes
namei: unlazy_walk() doesn't need to mess with current->fs anymore
lustre: kill unused macro (LOOKUP_CONTINUE)
lustre: kill unused helper
get rid of assorted nameidata-related debris
namei: be careful with mountpoint crossings in follow_dotdot_rcu()
namei: uninline set_root{,_rcu}()
namei: pass the struct path to store the result down into path_lookupat()
namei: move putname() call into filename_lookup()
namei: shift nameidata inside filename_lookup()
namei: make filename_lookup() reject ERR_PTR() passed as name
namei: shift nameidata down into filename_parentat()
namei: saner calling conventions for filename_create()
namei: saner calling conventions for filename_parentat()
namei: fold path_cleanup() into terminate_walk()
namei: stash dfd and name into nameidata
namei: trim do_last() arguments
inline user_path_parent()
inline user_path_create()
namei: move saved_nd pointer into struct nameidata
turn user_{path_at,path,lpath,path_dir}() into static inlines

David Howells (1):
VFS: Handle lower layer dentry/inode in pathwalk

NeilBrown (7):
ovl: rearrange ovl_follow_link to it doesn't need to call ->put_link
SECURITY: remove nameidata arg from inode_follow_link.
VFS: replace {, total_}link_count in task_struct with pointer to nameidata
security/selinux: pass 'flags' arg to avc_audit() and avc_has_perm_flags()
security: make inode_follow_link RCU-walk aware
VFS/namei: make the use of touch_atime() in get_link() RCU-safe.
Documentation: remove outdated information from automount-support.txt

Diffstat:
Documentation/filesystems/Locking | 4 +-
Documentation/filesystems/automount-support.txt | 51 +-
Documentation/filesystems/porting | 17 +
Documentation/filesystems/vfs.txt | 22 +-
.../lustre/lustre/include/linux/lustre_compat25.h | 15 -
.../staging/lustre/lustre/llite/llite_internal.h | 6 -
drivers/staging/lustre/lustre/llite/symlink.c | 26 +-
fs/9p/v9fs.h | 2 -
fs/9p/vfs_inode.c | 123 +-
fs/9p/vfs_inode_dotl.c | 39 +-
fs/autofs4/symlink.c | 5 +-
fs/befs/linuxvfs.c | 57 +-
fs/ceph/inode.c | 11 +-
fs/cifs/cifsfs.h | 2 +-
fs/cifs/link.c | 28 +-
fs/configfs/symlink.c | 31 +-
fs/debugfs/file.c | 12 -
fs/debugfs/inode.c | 6 +-
fs/ecryptfs/inode.c | 11 +-
fs/exofs/Kbuild | 2 +-
fs/exofs/exofs.h | 4 -
fs/exofs/inode.c | 9 +-
fs/exofs/namei.c | 5 +-
fs/exofs/symlink.c | 55 -
fs/ext2/inode.c | 1 +
fs/ext2/namei.c | 3 +-
fs/ext2/symlink.c | 10 +-
fs/ext3/inode.c | 1 +
fs/ext3/namei.c | 3 +-
fs/ext3/symlink.c | 10 +-
fs/ext4/ext4.h | 1 +
fs/ext4/inode.c | 7 +-
fs/ext4/namei.c | 11 +-
fs/ext4/symlink.c | 48 +-
fs/f2fs/namei.c | 18 +-
fs/freevxfs/vxfs_extern.h | 3 -
fs/freevxfs/vxfs_immed.c | 34 -
fs/freevxfs/vxfs_inode.c | 7 +-
fs/fuse/dir.c | 22 +-
fs/gfs2/inode.c | 10 +-
fs/hostfs/hostfs_kern.c | 15 +-
fs/hppfs/hppfs.c | 13 +-
fs/inode.c | 31 +-
fs/jffs2/dir.c | 1 +
fs/jffs2/fs.c | 1 +
fs/jffs2/symlink.c | 45 +-
fs/jfs/inode.c | 3 +-
fs/jfs/namei.c | 5 +-
fs/jfs/symlink.c | 10 +-
fs/kernfs/symlink.c | 25 +-
fs/libfs.c | 25 +-
fs/logfs/dir.c | 1 +
fs/mount.h | 1 +
fs/namei.c | 1453 ++++++++++----------
fs/namespace.c | 27 +-
fs/nfs/symlink.c | 19 +-
fs/ntfs/namei.c | 2 +-
fs/open.c | 2 +-
fs/overlayfs/inode.c | 35 +-
fs/proc/base.c | 4 +-
fs/proc/inode.c | 9 +-
fs/proc/namespaces.c | 4 +-
fs/proc/self.c | 24 +-
fs/proc/thread_self.c | 22 +-
fs/sysv/Makefile | 2 +-
fs/sysv/inode.c | 5 +-
fs/sysv/symlink.c | 20 -
fs/sysv/sysv.h | 1 -
fs/ubifs/dir.c | 1 +
fs/ubifs/file.c | 11 +-
fs/ubifs/super.c | 1 +
fs/ufs/inode.c | 5 +-
fs/ufs/namei.c | 3 +-
fs/ufs/symlink.c | 13 +-
fs/xfs/xfs_iops.c | 11 +-
include/linux/debugfs.h | 1 -
include/linux/fs.h | 16 +-
include/linux/namei.h | 41 +-
include/linux/sched.h | 3 +-
include/linux/security.h | 13 +-
mm/shmem.c | 32 +-
security/capability.c | 4 +-
security/security.c | 7 +-
security/selinux/avc.c | 18 +-
security/selinux/hooks.c | 18 +-
security/selinux/include/avc.h | 9 +-
86 files changed, 1222 insertions(+), 1522 deletions(-)
delete mode 100644 fs/exofs/symlink.c
delete mode 100644 fs/sysv/symlink.c
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
Please read the FAQ at http://www.tux.org/lkml/