Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Linus Torvalds [Fri, 1 Jun 2012 17:34:35 +0000 (10:34 -0700)]
Pull vfs changes from Al Viro.
 "A lot of misc stuff.  The obvious groups:
   * Miklos' atomic_open series; kills the damn abuse of
     ->d_revalidate() by NFS, which was the major stumbling block for
     all work in that area.
   * ripping security_file_mmap() and dealing with deadlocks in the
     area; sanitizing the neighborhood of vm_mmap()/vm_munmap() in
     general.
   * ->encode_fh() switched to saner API; insane fake dentry in
     mm/cleancache.c gone.
   * assorted annotations in fs (endianness, __user)
   * parts of Artem's ->s_dirty work (jff2 and reiserfs parts)
   * ->update_time() work from Josef.
   * other bits and pieces all over the place.

  Normally it would've been in two or three pull requests, but
  signal.git stuff had eaten a lot of time during this cycle ;-/"

Fix up trivial conflicts in Documentation/filesystems/vfs.txt (the
'truncate_range' inode method was removed by the VM changes, the VFS
update adds an 'update_time()' method), and in fs/btrfs/ulist.[ch] (due
to sparse fix added twice, with other changes nearby).

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (95 commits)
  nfs: don't open in ->d_revalidate
  vfs: retry last component if opening stale dentry
  vfs: nameidata_to_filp(): don't throw away file on error
  vfs: nameidata_to_filp(): inline __dentry_open()
  vfs: do_dentry_open(): don't put filp
  vfs: split __dentry_open()
  vfs: do_last() common post lookup
  vfs: do_last(): add audit_inode before open
  vfs: do_last(): only return EISDIR for O_CREAT
  vfs: do_last(): check LOOKUP_DIRECTORY
  vfs: do_last(): make ENOENT exit RCU safe
  vfs: make follow_link check RCU safe
  vfs: do_last(): use inode variable
  vfs: do_last(): inline walk_component()
  vfs: do_last(): make exit RCU safe
  vfs: split do_lookup()
  Btrfs: move over to use ->update_time
  fs: introduce inode operation ->update_time
  reiserfs: get rid of resierfs_sync_super
  reiserfs: mark the superblock as dirty a bit later
  ...

19 files changed:
1  2 
Documentation/filesystems/Locking
Documentation/filesystems/vfs.txt
fs/aio.c
fs/btrfs/ctree.h
fs/btrfs/file.c
fs/btrfs/free-space-cache.c
fs/btrfs/inode.c
fs/compat.c
fs/fat/inode.c
fs/hpfs/hpfs_fn.h
fs/inode.c
fs/splice.c
include/linux/fs.h
include/linux/mm.h
kernel/Makefile
mm/filemap.c
mm/internal.h
mm/mmap.c
mm/shmem.c

@@@ -60,7 -60,9 +60,8 @@@ ata *)
        ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
        ssize_t (*listxattr) (struct dentry *, char *, size_t);
        int (*removexattr) (struct dentry *, const char *);
 -      void (*truncate_range)(struct inode *, loff_t, loff_t);
        int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);
+       void (*update_time)(struct inode *, struct timespec *, int);
  
  locking rules:
        all may block
@@@ -86,7 -88,10 +87,9 @@@ setxattr:    ye
  getxattr:     no
  listxattr:    no
  removexattr:  yes
 -truncate_range:       yes
  fiemap:               no
+ update_time:  no
        Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
  victim.
        cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem.
@@@ -363,6 -363,8 +363,7 @@@ struct inode_operations 
        ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
        ssize_t (*listxattr) (struct dentry *, char *, size_t);
        int (*removexattr) (struct dentry *, const char *);
 -      void (*truncate_range)(struct inode *, loff_t, loff_t);
+       void (*update_time)(struct inode *, struct timespec *, int);
  };
  
  Again, all methods are called without any locks being held, unless
@@@ -471,6 -473,12 +472,9 @@@ otherwise noted
    removexattr: called by the VFS to remove an extended attribute from
        a file. This method is called by removexattr(2) system call.
  
 -  truncate_range: a method provided by the underlying filesystem to truncate a
 -      range of blocks , i.e. punch a hole somewhere in a file.
 -
+   update_time: called by the VFS to update a specific time or the i_version of
+       an inode.  If this is not defined the VFS will update the inode itself
+       and call mark_inode_dirty_sync.
  
  The Address Space Object
  ========================
diff --cc fs/aio.c
Simple merge
Simple merge
diff --cc fs/btrfs/file.c
Simple merge
Simple merge
Simple merge
diff --cc fs/compat.c
Simple merge
diff --cc fs/fat/inode.c
Simple merge
Simple merge
diff --cc fs/inode.c
Simple merge
diff --cc fs/splice.c
Simple merge
@@@ -1690,8 -1681,10 +1690,9 @@@ struct inode_operations 
        ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
        ssize_t (*listxattr) (struct dentry *, char *, size_t);
        int (*removexattr) (struct dentry *, const char *);
 -      void (*truncate_range)(struct inode *, loff_t, loff_t);
        int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
                      u64 len);
+       int (*update_time)(struct inode *, struct timespec *, int);
  } ____cacheline_aligned;
  
  struct seq_file;
Simple merge
diff --cc kernel/Makefile
Simple merge
diff --cc mm/filemap.c
Simple merge
diff --cc mm/internal.h
Simple merge
diff --cc mm/mmap.c
Simple merge
diff --cc mm/shmem.c
Simple merge