Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 5 Jul 2015 02:36:06 +0000 (19:36 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 5 Jul 2015 02:36:06 +0000 (19:36 -0700)
Pull more vfs updates from Al Viro:
 "Assorted VFS fixes and related cleanups (IMO the most interesting in
  that part are f_path-related things and Eric's descriptor-related
  stuff).  UFS regression fixes (it got broken last cycle).  9P fixes.
  fs-cache series, DAX patches, Jan's file_remove_suid() work"

[ I'd say this is much more than "fixes and related cleanups".  The
  file_table locking rule change by Eric Dumazet is a rather big and
  fundamental update even if the patch isn't huge.   - Linus ]

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (49 commits)
  9p: cope with bogus responses from server in p9_client_{read,write}
  p9_client_write(): avoid double p9_free_req()
  9p: forgetting to cancel request on interrupted zero-copy RPC
  dax: bdev_direct_access() may sleep
  block: Add support for DAX reads/writes to block devices
  dax: Use copy_from_iter_nocache
  dax: Add block size note to documentation
  fs/file.c: __fget() and dup2() atomicity rules
  fs/file.c: don't acquire files->file_lock in fd_install()
  fs:super:get_anon_bdev: fix race condition could cause dev exceed its upper limitation
  vfs: avoid creation of inode number 0 in get_next_ino
  namei: make set_root_rcu() return void
  make simple_positive() public
  ufs: use dir_pages instead of ufs_dir_pages()
  pagemap.h: move dir_pages() over there
  remove the pointless include of lglock.h
  fs: cleanup slight list_entry abuse
  xfs: Correctly lock inode when removing suid and file capabilities
  fs: Call security_ops->inode_killpriv on truncate
  fs: Provide function telling whether file_remove_privs() will do anything
  ...

32 files changed:
1  2 
Documentation/filesystems/porting
arch/arc/kernel/troubleshoot.c
arch/s390/hypfs/inode.c
arch/tile/kernel/stack.c
drivers/block/loop.c
drivers/md/bitmap.c
drivers/md/md.c
fs/binfmt_elf.c
fs/block_dev.c
fs/btrfs/file.c
fs/ceph/file.c
fs/coredump.c
fs/dax.c
fs/dcache.c
fs/debugfs/inode.c
fs/ext4/super.c
fs/fuse/file.c
fs/inode.c
fs/libfs.c
fs/nfs/dir.c
fs/ntfs/file.c
fs/overlayfs/super.c
fs/seq_file.c
fs/tracefs/inode.c
fs/ufs/super.c
fs/xfs/xfs_file.c
include/linux/fs.h
include/linux/pagemap.h
kernel/events/core.c
mm/filemap.c
mm/memory.c
security/inode.c

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc drivers/md/md.c
Simple merge
diff --cc fs/binfmt_elf.c
Simple merge
diff --cc fs/block_dev.c
Simple merge
diff --cc fs/btrfs/file.c
Simple merge
diff --cc fs/ceph/file.c
Simple merge
diff --cc fs/coredump.c
Simple merge
diff --cc fs/dax.c
Simple merge
diff --cc fs/dcache.c
Simple merge
Simple merge
diff --cc fs/ext4/super.c
Simple merge
diff --cc fs/fuse/file.c
Simple merge
diff --cc fs/inode.c
Simple merge
diff --cc fs/libfs.c
Simple merge
diff --cc fs/nfs/dir.c
Simple merge
diff --cc fs/ntfs/file.c
Simple merge
index 8a08c582bc22e400a16f395609200ed105d3933f,84c5e27fbfd9c6bd7dcd4467f47c018af33a5614..7466ff339c667ea63ead6bf04f18d5662ef3d142
@@@ -273,57 -273,11 +273,58 @@@ static void ovl_dentry_release(struct d
        }
  }
  
 +static int ovl_dentry_revalidate(struct dentry *dentry, unsigned int flags)
 +{
 +      struct ovl_entry *oe = dentry->d_fsdata;
 +      unsigned int i;
 +      int ret = 1;
 +
 +      for (i = 0; i < oe->numlower; i++) {
 +              struct dentry *d = oe->lowerstack[i].dentry;
 +
 +              if (d->d_flags & DCACHE_OP_REVALIDATE) {
 +                      ret = d->d_op->d_revalidate(d, flags);
 +                      if (ret < 0)
 +                              return ret;
 +                      if (!ret) {
 +                              if (!(flags & LOOKUP_RCU))
 +                                      d_invalidate(d);
 +                              return -ESTALE;
 +                      }
 +              }
 +      }
 +      return 1;
 +}
 +
 +static int ovl_dentry_weak_revalidate(struct dentry *dentry, unsigned int flags)
 +{
 +      struct ovl_entry *oe = dentry->d_fsdata;
 +      unsigned int i;
 +      int ret = 1;
 +
 +      for (i = 0; i < oe->numlower; i++) {
 +              struct dentry *d = oe->lowerstack[i].dentry;
 +
 +              if (d->d_flags & DCACHE_OP_WEAK_REVALIDATE) {
 +                      ret = d->d_op->d_weak_revalidate(d, flags);
 +                      if (ret <= 0)
 +                              break;
 +              }
 +      }
 +      return ret;
 +}
 +
  static const struct dentry_operations ovl_dentry_operations = {
        .d_release = ovl_dentry_release,
+       .d_select_inode = ovl_d_select_inode,
  };
  
 +static const struct dentry_operations ovl_reval_dentry_operations = {
 +      .d_release = ovl_dentry_release,
 +      .d_revalidate = ovl_dentry_revalidate,
 +      .d_weak_revalidate = ovl_dentry_weak_revalidate,
 +};
 +
  static struct ovl_entry *ovl_alloc_entry(unsigned int numlower)
  {
        size_t size = offsetof(struct ovl_entry, lowerstack[numlower]);
diff --cc fs/seq_file.c
Simple merge
Simple merge
diff --cc fs/ufs/super.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc mm/filemap.c
Simple merge
diff --cc mm/memory.c
Simple merge
Simple merge