[git pull] vfs.git part 2 - the rest of RCU symlink traversal

From: Al Viro
Date: Sun Jan 10 2016 - 20:14:11 EST


Replacement of ->follow_link/->put_link, allowing to stay in RCU
mode even if the symlink is not an embedded one. No changes since the
mailbomb on Jan 1. Please, pull from

git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git work.symlinks

Shortlog:
Al Viro (13):
switch befs long symlinks to page_symlink_operations
logfs: don't duplicate page_symlink_inode_operations
udf: don't duplicate page_symlink_inode_operations
ufs: get rid of ->setattr() for symlinks
namei: page_getlink() and page_follow_link_light() are the same thing
don't put symlink bodies in pagecache into highmem
replace ->follow_link() with new method that could stay in RCU mode
teach page_get_link() to work in RCU mode
teach shmem_get_link() to work in RCU mode
teach proc_self_get_link()/proc_thread_self_get_link() to work in RCU mode
teach nfs_get_link() to work in RCU mode
kill free_page_put_link()
switch ->get_link() to delayed_call, kill ->put_link()

Diffstat:
Documentation/filesystems/Locking | 6 +-
Documentation/filesystems/porting | 17 ++++
Documentation/filesystems/vfs.txt | 21 ++---
drivers/staging/lustre/lustre/llite/symlink.c | 24 ++---
fs/9p/vfs_inode.c | 24 +++--
fs/9p/vfs_inode_dotl.c | 21 +++--
fs/affs/inode.c | 1 +
fs/affs/namei.c | 1 +
fs/affs/symlink.c | 9 +-
fs/afs/inode.c | 1 +
fs/autofs4/symlink.c | 14 ++-
fs/befs/linuxvfs.c | 40 ++++----
fs/btrfs/inode.c | 5 +-
fs/ceph/inode.c | 2 +-
fs/cifs/cifsfs.c | 3 +-
fs/cifs/cifsfs.h | 5 +-
fs/cifs/link.c | 10 +-
fs/coda/cnode.c | 5 +-
fs/coda/symlink.c | 4 +-
fs/configfs/symlink.c | 22 +++--
fs/cramfs/inode.c | 1 +
fs/dcache.c | 2 +-
fs/ecryptfs/inode.c | 17 +++-
fs/efs/inode.c | 1 +
fs/efs/symlink.c | 4 +-
fs/exofs/inode.c | 1 +
fs/exofs/namei.c | 1 +
fs/ext2/inode.c | 1 +
fs/ext2/namei.c | 1 +
fs/ext2/symlink.c | 5 +-
fs/ext4/inode.c | 1 +
fs/ext4/namei.c | 1 +
fs/ext4/symlink.c | 29 +++---
fs/f2fs/inode.c | 1 +
fs/f2fs/namei.c | 31 ++++---
fs/freevxfs/vxfs_inode.c | 1 +
fs/fuse/dir.c | 17 ++--
fs/gfs2/inode.c | 19 ++--
fs/hfsplus/inode.c | 2 +
fs/hostfs/hostfs_kern.c | 22 ++---
fs/hpfs/inode.c | 1 +
fs/hpfs/namei.c | 5 +-
fs/hugetlbfs/inode.c | 1 +
fs/inode.c | 6 ++
fs/isofs/inode.c | 1 +
fs/isofs/rock.c | 4 +-
fs/jffs2/symlink.c | 2 +-
fs/jfs/inode.c | 1 +
fs/jfs/namei.c | 1 +
fs/jfs/symlink.c | 5 +-
fs/kernfs/symlink.c | 24 +++--
fs/libfs.c | 22 ++---
fs/logfs/dir.c | 9 +-
fs/logfs/inode.c | 3 +-
fs/logfs/logfs.h | 1 -
fs/minix/inode.c | 4 +-
fs/namei.c | 126 +++++++++++++-------------
fs/ncpfs/inode.c | 4 +-
fs/nfs/inode.c | 26 +++++-
fs/nfs/symlink.c | 39 +++++---
fs/nilfs2/inode.c | 1 +
fs/nilfs2/namei.c | 4 +-
fs/ocfs2/inode.c | 1 +
fs/ocfs2/namei.c | 1 +
fs/ocfs2/symlink.c | 3 +-
fs/overlayfs/inode.c | 53 ++---------
fs/proc/base.c | 24 +++--
fs/proc/inode.c | 21 +++--
fs/proc/namespaces.c | 10 +-
fs/proc/self.c | 18 ++--
fs/proc/thread_self.c | 19 ++--
fs/qnx4/inode.c | 1 +
fs/qnx6/inode.c | 1 +
fs/ramfs/inode.c | 1 +
fs/reiserfs/inode.c | 1 +
fs/reiserfs/namei.c | 4 +-
fs/romfs/super.c | 1 +
fs/squashfs/inode.c | 2 +
fs/squashfs/symlink.c | 3 +-
fs/sysv/inode.c | 4 +-
fs/ubifs/file.c | 2 +-
fs/udf/inode.c | 3 +-
fs/udf/namei.c | 8 +-
fs/udf/symlink.c | 4 +-
fs/udf/udfdecl.h | 1 -
fs/ufs/Makefile | 2 +-
fs/ufs/inode.c | 5 +-
fs/ufs/namei.c | 5 +-
fs/ufs/symlink.c | 42 ---------
fs/ufs/ufs.h | 4 -
fs/xfs/xfs_iops.c | 14 ++-
include/linux/delayed_call.h | 34 +++++++
include/linux/fs.h | 16 ++--
include/linux/nfs_fs.h | 1 +
mm/shmem.c | 48 ++++++----
95 files changed, 570 insertions(+), 470 deletions(-)
delete mode 100644 fs/ufs/symlink.c
create mode 100644 include/linux/delayed_call.h