[git pull] vfs.git
From: Al Viro
Date: Sun May 15 2016 - 23:33:17 EST
FWIW, I considered sending that pile in several pull requests, but for some
reason git request-pull v4.6 vfs work.lookups spews something very odd into
diffstat - files that have never been touched by it and, in fact, doing
merge with mainline does *not* end up with those files anywhere in the
diff. Full pile doesn't produce any oddities of that sort, so...
Several series here:
* constified struct path * in LSM arguments (me)
* acl and xattr cleanups (some from me, most from Andreas)
* parallel lookups/readdir/atomic_open (me). ->i_mutex replaced with
rwsem, pure lookups take it shared. Exclusion is per-name - no parallel
lookups on the same name in the same parent at the same time. ->atomic_open()
without O_CREAT is also called with parent locked shared. ->iterate() is
being replaced by a new method (->iterate_shared()), which is called with
directory being locked only shared. Most of the filesystems switched to it.
All of them (switched or not) get per-struct file exclusion for readdir
and lseek. Incidentally, do_last()/lookup_open()/atomic_open() got cleaned
up quite a bit.
* preadv2 updates (Christoph)
* rlimit vs coredumping stuff (Omar Sandoval)
* cifs finally getting rid of copying iovecs, manually draining them,
etc. - sock_sendmsg() and sock_recvmsg() allow to simplify things quite a bit
(me).
* assorted cleanups and fixes
If you prefer that stuff to go in separate pulls, please say so. I've no
idea what's triggering the junk in git request-pull for work.lookups -
looks like a merge from -rc1-based branch into -rc3-based one has caused
that somehow (commit 84695ffee). Affected files are the ones changed in
mainline between -rc1 and -rc3 and they *are* identical to their -rc3 state
after that merge commit...
Anyway, sane-looking git request-pull for the whole pile follows:
The following changes since commit 38b78a5f18584db6fa7441e0f4531b283b0e6725:
ovl: ignore permissions on underlying lookup (2016-05-10 23:58:18 -0400)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git for-next
for you to fetch changes up to 16a9fad4ef80ba18d84615eec1a6286b9d71e909:
Merge branch 'sendmsg.cifs' into for-next (2016-05-12 22:31:59 -0400)
----------------------------------------------------------------
Al Viro (113):
[apparmor] constify struct path * in a bunch of helpers
mtd: switch open_mtd_by_chdev() to use of vfs_stat()
mtd: switch ubi_open_volume_path() to vfs_stat()
__d_alloc(): treat NULL name as QSTR("/", 1)
bpf: reject invalid names right in ->lookup()
constify security_path_truncate()
constify vfs_truncate()
apparmor_path_truncate(): path->mnt is never NULL
tomoyo: constify assorted struct path *
constify chown_common/security_path_chown
constify security_sb_mount()
constify chmod_common/security_path_chmod
apparmor: new helper - common_path_perm()
apparmor: constify aa_path_link()
apparmor: constify common_perm_...()
constify security_path_{unlink,rmdir}
constify security_path_{mkdir,mknod,symlink}
apparmor: remove useless checks for NULL ->mnt
constify security_path_{link,rename}
constify security_path_chroot()
constify security_sb_pivotroot()
constify ima_d_path()
reiserfs_cache_default_acl(): use get_acl()
[net] drop 'size' argument of sock_recvmsg()
cifs: merge the hash calculation helpers
cifs: quit playing games with draining iovecs
cifs: no need to wank with copying and advancing iovec on recvmsg side either
cifs_readv_receive: use cifs_read_from_socket()
cifs: don't bother with kmap on read_pages side
ecryptfs: avoid multiple aliases for directories
ecryptfs_lookup(): try either only encrypted or plaintext name
aio: remove a pointless assignment
rw_verify_area(): saner calling conventions
Merge branch 'for-linus' into work.iov_iter
don't bother with ->d_inode->i_sb - it's always equal to ->d_sb
cifs: kill more bogus checks in ->...xattr() methods
reiserfs: switch to generic_{get,set,remove}xattr()
xattr_handler: pass dentry and inode as separate arguments of ->get()
->getxattr(): pass dentry and inode as separate arguments
Merge getxattr prototype change into work.lookups
security_d_instantiate(): move to the point prior to attaching dentry to inode
kernfs: use lookup_one_len_unlocked()
configfs_detach_prep(): make sure that wait_mutex won't go away
ocfs2: don't open-code inode_lock/inode_unlock
orangefs: don't open-code inode_lock/inode_unlock
reiserfs: open-code reiserfs_mutex_lock_safe() in reiserfs_unpack()
reconnect_one(): use lookup_one_len_unlocked()
ovl_lookup_real(): use lookup_one_len_unlocked()
make ext2_get_page() and friends work without external serialization
nfs: missing wakeup in nfs_unblock_sillyrename()
lookup_slow(): bugger off on IS_DEADDIR() from the very beginning
__d_add(): don't drop/regain ->d_lock
beginning of transition to parallel lookups - marking in-lookup dentries
parallel lookups machinery, part 2
parallel lookups machinery, part 3
parallel lookups machinery, part 4 (and last)
parallel lookups: actual switch to rwsem
give readdir(2)/getdents(2)/etc. uniform exclusion with lseek()
introduce a parallel variant of ->iterate()
proc_fill_cache(): switch to d_alloc_parallel()
proc_sys_fill_cache(): switch to d_alloc_parallel()
switch all procfs directories ->iterate_shared()
fuse: switch to ->iterate_shared()
cifs: switch to ->iterate_shared()
dcache_{readdir,dir_lseek}() users: switch to ->iterate_shared
simple local filesystems: switch to ->iterate_shared()
path_openat(): take O_PATH handling out of do_last()
lookup_open(): expand the call of vfs_create()
Merge branch 'for-linus' into work.lookups
atomic_open(): don't bother with EEXIST check - it's done in do_last()
atomic_open(): consolidate "overridden ENOENT" in open-yourself cases
atomic_open(): massage the create_error logics a bit
do_last(): get rid of duplicate ELOOP check
do_last(): take fput() on error after opening to out:
atomic_open(): delay open_to_namei_flags() until the method call
atomic_open(): be paranoid about may_open() return value
lookup_open(): lift the "fallback to !O_CREAT" logics from atomic_open()
atomic_open(): reorder and clean up a bit
lookup_open(): expand the call of real_lookup()
lookup_open(): put the dentry fed to ->lookup() or ->atomic_open() into in-lookup hash
lookup_open(): lock the parent shared unless O_CREAT is given
nfs: switch to ->iterate_shared()
nfs: per-name sillyunlink exclusion
configfs_readdir(): make safe under shared lock
kernfs: no point locking directory around that generic_file_llseek()
lustre: don't need to lock inode in directory lseek
more trivial ->iterate_shared conversions
romfs, squashfs: switch to ->iterate_shared()
fat: switch to ->iterate_shared()
9p: switch to ->iterate_shared()
Merge branch 'for-linus' into work.lookups
switch ecryptfs to ->iterate_shared
logfs: no need to lock directory in lseek
btrfs: switch to ->iterate_shared()
get_acorn_filename(): deobfuscate a bit
isofs: switch to ->iterate_shared()
fold checks into iterate_and_advance()
befs: constify stuff a bit
befs: switch to ->iterate_shared()
afs: switch to ->iterate_shared()
f2fs: switch to ->iterate_shared()
gfs2: switch to ->iterate_shared()
hpfs: handle allocation failures in hpfs_add_pos()
hpfs: switch to ->iterate_shared()
hostfs: switch to ->iterate_shared()
hfsplus: switch to ->iterate_shared()
hfs: switch to ->iterate_shared()
ext4: switch to ->iterate_shared()
gfs2: Switch to generic xattr handlers
Merge branch 'for-cifs' into work.xattr
Merge branches 'work.xattr', 'work.preadv2', 'work.iov_iter', 'work.const-path' and 'work.misc' into for-next
Merge branch 'ovl-fixes' into for-next
Merge branch 'sendmsg.cifs' into for-next
Andreas Gruenbacher (13):
jfs: Remove unnecessary code in jfs_get_acl
posix_acl: Inode acl caching fixes
posix_acl: Unexport acl_by_type and make it static
cifs: Fix xattr name checks
cifs: Check for equality with ACL_TYPE_ACCESS and ACL_TYPE_DEFAULT
cifs: Fix removexattr for os2.* xattrs
cifs: Switch to generic xattr handlers
ceph: Get rid of d_find_alias in ceph_set_acl
ceph: Switch to generic xattr handlers
jfs: Clean up xattr name mapping
jfs: Switch to generic xattr handlers
ubifs: Switch to generic xattr handlers
btrfs: Switch to generic xattr handlers
Christoph Hellwig (10):
filemap: remove pos variables in generic_file_read_iter
filemap: remove the pos argument to generic_file_direct_write
xfs: eliminate the pos variable in xfs_file_dio_aio_write
direct-io: eliminate the offset argument to ->direct_IO
direct-io: remove the offset argument to dio_complete
fs: add IOCB_SYNC and IOCB_DSYNC
fs: simplify the generic_write_sync prototype
ceph: use generic_write_sync
fs: add RWF_DSYNC aand RWF_SYNC
nfsd: use RWF_SYNC
Omar Sandoval (2):
coredump: get rid of coredump_params->written
coredump: only charge written data against RLIMIT_CORE
Yan, Zheng (1):
ceph: kill __ceph_removexattr()
Documentation/filesystems/Locking | 2 +-
Documentation/filesystems/porting | 53 +++
Documentation/filesystems/vfs.txt | 2 +-
arch/alpha/kernel/osf_sys.c | 4 +-
arch/powerpc/platforms/cell/spufs/coredump.c | 5 +-
arch/powerpc/platforms/cell/spufs/inode.c | 2 +-
block/blk-map.c | 47 +--
drivers/mtd/ubi/build.c | 13 +-
drivers/mtd/ubi/kapi.c | 19 +-
drivers/staging/lustre/lustre/llite/dir.c | 4 +-
.../staging/lustre/lustre/llite/llite_internal.h | 4 +-
drivers/staging/lustre/lustre/llite/rw26.c | 4 +-
drivers/staging/lustre/lustre/llite/xattr.c | 6 +-
drivers/target/iscsi/iscsi_target_util.c | 5 +-
fs/9p/acl.c | 8 +-
fs/9p/vfs_addr.c | 3 +-
fs/9p/vfs_dir.c | 4 +-
fs/9p/vfs_inode.c | 2 +-
fs/9p/xattr.c | 4 +-
fs/affs/dir.c | 2 +-
fs/affs/file.c | 5 +-
fs/afs/dir.c | 16 +-
fs/aio.c | 2 -
fs/autofs4/root.c | 4 +-
fs/bad_inode.c | 4 +-
fs/befs/befs.h | 4 +-
fs/befs/btree.c | 16 +-
fs/befs/btree.h | 4 +-
fs/befs/datastream.c | 26 +-
fs/befs/datastream.h | 11 +-
fs/befs/linuxvfs.c | 6 +-
fs/bfs/dir.c | 2 +-
fs/binfmt_elf.c | 2 +-
fs/binfmt_elf_fdpic.c | 2 +-
fs/block_dev.c | 14 +-
fs/btrfs/acl.c | 3 -
fs/btrfs/file.c | 16 +-
fs/btrfs/inode.c | 24 +-
fs/btrfs/ioctl.c | 18 +-
fs/btrfs/tree-log.c | 6 +-
fs/btrfs/xattr.c | 28 +-
fs/btrfs/xattr.h | 3 -
fs/ceph/acl.c | 16 +-
fs/ceph/addr.c | 3 +-
fs/ceph/dir.c | 7 +-
fs/ceph/file.c | 11 +-
fs/ceph/inode.c | 29 +-
fs/ceph/super.h | 8 +-
fs/ceph/xattr.c | 192 ++--------
fs/cifs/Makefile | 3 +-
fs/cifs/cifs_dfs_ref.c | 2 +-
fs/cifs/cifsencrypt.c | 97 ++---
fs/cifs/cifsfs.c | 28 +-
fs/cifs/cifsfs.h | 12 +-
fs/cifs/cifsglob.h | 2 -
fs/cifs/cifsproto.h | 12 +-
fs/cifs/cifssmb.c | 15 +-
fs/cifs/connect.c | 127 ++-----
fs/cifs/file.c | 62 +---
fs/cifs/inode.c | 3 +-
fs/cifs/readdir.c | 57 +--
fs/cifs/smb2transport.c | 107 +-----
fs/cifs/transport.c | 141 +++-----
fs/cifs/xattr.c | 386 ++++++++------------
fs/coda/dir.c | 18 +-
fs/compat.c | 12 +-
fs/configfs/dir.c | 37 +-
fs/configfs/inode.c | 2 +-
fs/coredump.c | 5 +-
fs/cramfs/inode.c | 2 +-
fs/dax.c | 4 +-
fs/dcache.c | 280 ++++++++++++--
fs/direct-io.c | 34 +-
fs/ecryptfs/crypto.c | 5 +-
fs/ecryptfs/ecryptfs_kernel.h | 4 +-
fs/ecryptfs/file.c | 73 +++-
fs/ecryptfs/inode.c | 108 +++---
fs/ecryptfs/mmap.c | 3 +-
fs/efs/dir.c | 3 +-
fs/efs/namei.c | 2 +-
fs/exofs/dir.c | 16 +-
fs/exofs/inode.c | 3 +-
fs/exofs/super.c | 2 +-
fs/exportfs/expfs.c | 12 +-
fs/ext2/acl.c | 3 -
fs/ext2/dir.c | 16 +-
fs/ext2/inode.c | 8 +-
fs/ext2/namei.c | 2 +-
fs/ext2/xattr_security.c | 6 +-
fs/ext2/xattr_trusted.c | 6 +-
fs/ext2/xattr_user.c | 8 +-
fs/ext4/acl.c | 3 -
fs/ext4/dir.c | 4 +-
fs/ext4/ext4.h | 3 +-
fs/ext4/file.c | 9 +-
fs/ext4/indirect.c | 12 +-
fs/ext4/inode.c | 18 +-
fs/ext4/namei.c | 4 +-
fs/ext4/xattr_security.c | 6 +-
fs/ext4/xattr_trusted.c | 6 +-
fs/ext4/xattr_user.c | 8 +-
fs/f2fs/acl.c | 3 -
fs/f2fs/data.c | 6 +-
fs/f2fs/dir.c | 2 +-
fs/f2fs/file.c | 9 +-
fs/f2fs/namei.c | 2 +-
fs/f2fs/xattr.c | 14 +-
fs/fat/dir.c | 6 +-
fs/fat/inode.c | 6 +-
fs/file.c | 5 +
fs/freevxfs/vxfs_lookup.c | 2 +-
fs/fuse/dir.c | 99 +++--
fs/fuse/file.c | 5 +-
fs/gfs2/acl.c | 58 ++-
fs/gfs2/acl.h | 1 +
fs/gfs2/aops.c | 6 +-
fs/gfs2/file.c | 9 +-
fs/gfs2/inode.c | 83 +----
fs/gfs2/ops_fstype.c | 4 +-
fs/gfs2/super.c | 2 +-
fs/gfs2/xattr.c | 48 ++-
fs/hfs/attr.c | 5 +-
fs/hfs/catalog.c | 3 +
fs/hfs/dir.c | 12 +-
fs/hfs/hfs_fs.h | 5 +-
fs/hfs/inode.c | 9 +-
fs/hfsplus/catalog.c | 3 +
fs/hfsplus/dir.c | 12 +-
fs/hfsplus/hfsplus_fs.h | 1 +
fs/hfsplus/inode.c | 8 +-
fs/hfsplus/posix_acl.c | 3 -
fs/hfsplus/super.c | 1 +
fs/hfsplus/xattr.c | 10 +-
fs/hfsplus/xattr.h | 2 +-
fs/hfsplus/xattr_security.c | 6 +-
fs/hfsplus/xattr_trusted.c | 6 +-
fs/hfsplus/xattr_user.c | 6 +-
fs/hostfs/hostfs_kern.c | 2 +-
fs/hpfs/dir.c | 12 +-
fs/hpfs/dnode.c | 8 +-
fs/hpfs/hpfs_fn.h | 2 +-
fs/inode.c | 17 +-
fs/isofs/dir.c | 4 +-
fs/isofs/rock.c | 13 +-
fs/jffs2/acl.c | 2 -
fs/jffs2/dir.c | 4 +-
fs/jffs2/security.c | 6 +-
fs/jffs2/super.c | 2 +-
fs/jffs2/xattr_trusted.c | 6 +-
fs/jffs2/xattr_user.c | 6 +-
fs/jfs/acl.c | 6 -
fs/jfs/file.c | 6 +-
fs/jfs/inode.c | 7 +-
fs/jfs/jfs_xattr.h | 6 +-
fs/jfs/namei.c | 8 +-
fs/jfs/symlink.c | 12 +-
fs/jfs/xattr.c | 224 +++++-------
fs/kernfs/dir.c | 17 +-
fs/kernfs/inode.c | 6 +-
fs/kernfs/kernfs-internal.h | 4 +-
fs/kernfs/mount.c | 5 +-
fs/libfs.c | 11 +-
fs/logfs/dir.c | 4 +-
fs/minix/dir.c | 2 +-
fs/namei.c | 401 ++++++++++-----------
fs/nfs/dir.c | 80 ++--
fs/nfs/direct.c | 23 +-
fs/nfs/file.c | 2 +-
fs/nfs/inode.c | 4 +-
fs/nfs/nfs3acl.c | 43 ++-
fs/nfs/nfs4proc.c | 14 +-
fs/nfs/nfstrace.h | 2 +-
fs/nfs/unlink.c | 192 +++-------
fs/nfsd/nfs3proc.c | 4 +-
fs/nfsd/nfs3xdr.c | 2 +-
fs/nfsd/nfsfh.c | 2 +-
fs/nfsd/vfs.c | 18 +-
fs/nilfs2/dir.c | 16 +-
fs/nilfs2/inode.c | 4 +-
fs/nilfs2/namei.c | 2 +-
fs/ntfs/file.c | 7 +-
fs/ocfs2/aops.c | 13 +-
fs/ocfs2/dlmglue.c | 3 +
fs/ocfs2/file.c | 2 +-
fs/ocfs2/inode.c | 2 +-
fs/ocfs2/xattr.c | 20 +-
fs/omfs/dir.c | 2 +-
fs/open.c | 8 +-
fs/openpromfs/inode.c | 2 +-
fs/orangefs/file.c | 4 +-
fs/orangefs/orangefs-kernel.h | 4 +-
fs/orangefs/xattr.c | 10 +-
fs/overlayfs/inode.c | 4 +-
fs/overlayfs/overlayfs.h | 4 +-
fs/overlayfs/readdir.c | 4 +-
fs/overlayfs/super.c | 2 +-
fs/posix_acl.c | 116 +++---
fs/proc/base.c | 35 +-
fs/proc/fd.c | 8 +-
fs/proc/generic.c | 2 +-
fs/proc/namespaces.c | 3 +-
fs/proc/proc_net.c | 2 +-
fs/proc/proc_sysctl.c | 17 +-
fs/proc/root.c | 4 +-
fs/qnx4/dir.c | 2 +-
fs/qnx6/dir.c | 2 +-
fs/read_write.c | 51 +--
fs/readdir.c | 37 +-
fs/reiserfs/dir.c | 2 +-
fs/reiserfs/file.c | 6 +-
fs/reiserfs/inode.c | 7 +-
fs/reiserfs/ioctl.c | 6 +-
fs/reiserfs/namei.c | 18 +-
fs/reiserfs/xattr.c | 54 ---
fs/reiserfs/xattr.h | 9 +-
fs/reiserfs/xattr_acl.c | 8 +-
fs/reiserfs/xattr_security.c | 19 +-
fs/reiserfs/xattr_trusted.c | 19 +-
fs/reiserfs/xattr_user.c | 19 +-
fs/romfs/super.c | 4 +-
fs/splice.c | 3 +
fs/squashfs/dir.c | 4 +-
fs/squashfs/xattr.c | 6 +-
fs/sysv/dir.c | 2 +-
fs/ubifs/dir.c | 8 +-
fs/ubifs/file.c | 12 +-
fs/ubifs/super.c | 1 +
fs/ubifs/ubifs.h | 7 +-
fs/ubifs/xattr.c | 145 ++++----
fs/udf/dir.c | 2 +-
fs/udf/file.c | 7 +-
fs/udf/inode.c | 7 +-
fs/udf/namei.c | 2 +-
fs/ufs/dir.c | 16 +-
fs/ufs/super.c | 2 +-
fs/xattr.c | 12 +-
fs/xfs/xfs_acl.c | 20 +-
fs/xfs/xfs_aops.c | 7 +-
fs/xfs/xfs_file.c | 25 +-
fs/xfs/xfs_xattr.c | 6 +-
include/linux/dax.h | 2 +-
include/linux/dcache.h | 26 +-
include/linux/file.h | 13 +
include/linux/fs.h | 94 ++++-
include/linux/lsm_hooks.h | 28 +-
include/linux/net.h | 3 +-
include/linux/nfs_fs.h | 16 +-
include/linux/nfs_xdr.h | 4 +-
include/linux/posix_acl.h | 1 -
include/linux/security.h | 58 +--
include/linux/uio.h | 1 +
include/linux/xattr.h | 5 +-
include/trace/events/ext4.h | 6 +-
include/uapi/linux/fs.h | 2 +
kernel/audit_watch.c | 2 +-
kernel/bpf/inode.c | 37 +-
lib/iov_iter.c | 123 +++----
mm/filemap.c | 30 +-
mm/page_io.c | 2 +-
mm/shmem.c | 9 +-
net/socket.c | 25 +-
net/unix/af_unix.c | 2 +-
security/apparmor/file.c | 4 +-
security/apparmor/include/file.h | 4 +-
security/apparmor/include/path.h | 2 +-
security/apparmor/lsm.c | 83 ++---
security/apparmor/path.c | 8 +-
security/commoncap.c | 6 +-
security/integrity/evm/evm_main.c | 6 +-
security/integrity/ima/ima.h | 2 +-
security/integrity/ima/ima_api.c | 2 +-
security/security.c | 28 +-
security/selinux/hooks.c | 13 +-
security/smack/smack_lsm.c | 6 +-
security/tomoyo/common.h | 12 +-
security/tomoyo/file.c | 10 +-
security/tomoyo/mount.c | 4 +-
security/tomoyo/tomoyo.c | 28 +-
278 files changed, 2654 insertions(+), 3037 deletions(-)