Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 11 Oct 2016 03:16:43 +0000 (20:16 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 11 Oct 2016 03:16:43 +0000 (20:16 -0700)
Pull more vfs updates from Al Viro:
 ">rename2() work from Miklos + current_time() from Deepa"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
  fs: Replace current_fs_time() with current_time()
  fs: Replace CURRENT_TIME_SEC with current_time() for inode timestamps
  fs: Replace CURRENT_TIME with current_time() for inode timestamps
  fs: proc: Delete inode time initializations in proc_alloc_inode()
  vfs: Add current_time() api
  vfs: add note about i_op->rename changes to porting
  fs: rename "rename2" i_op to "rename"
  vfs: remove unused i_op->rename
  fs: make remaining filesystems use .rename2
  libfs: support RENAME_NOREPLACE in simple_rename()
  fs: support RENAME_NOREPLACE for local filesystems
  ncpfs: fix unused variable warning

86 files changed:
1  2 
Documentation/filesystems/Locking
Documentation/filesystems/porting
Documentation/filesystems/vfs.txt
drivers/staging/lustre/lustre/llite/namei.c
drivers/usb/gadget/function/f_fs.c
fs/9p/vfs_inode.c
fs/adfs/inode.c
fs/affs/inode.c
fs/attr.c
fs/bad_inode.c
fs/btrfs/file.c
fs/btrfs/inode.c
fs/cachefiles/namei.c
fs/ceph/dir.c
fs/ceph/file.c
fs/ceph/inode.c
fs/cifs/cifsfs.c
fs/cifs/file.c
fs/coda/file.c
fs/devpts/inode.c
fs/ecryptfs/inode.c
fs/efivarfs/inode.c
fs/exofs/inode.c
fs/ext2/acl.c
fs/ext2/ialloc.c
fs/ext2/inode.c
fs/ext2/namei.c
fs/ext4/namei.c
fs/f2fs/dir.c
fs/f2fs/file.c
fs/f2fs/inline.c
fs/f2fs/namei.c
fs/f2fs/xattr.c
fs/fat/file.c
fs/fat/namei_vfat.c
fs/fuse/dir.c
fs/gfs2/bmap.c
fs/gfs2/dir.c
fs/gfs2/inode.c
fs/gfs2/quota.c
fs/hfs/inode.c
fs/hfsplus/dir.c
fs/hfsplus/inode.c
fs/hostfs/hostfs_kern.c
fs/hugetlbfs/inode.c
fs/inode.c
fs/jffs2/acl.c
fs/jffs2/dir.c
fs/jffs2/fs.c
fs/jfs/acl.c
fs/jfs/namei.c
fs/kernfs/dir.c
fs/kernfs/inode.c
fs/libfs.c
fs/locks.c
fs/logfs/file.c
fs/namei.c
fs/nfs/internal.h
fs/nilfs2/inode.c
fs/nsfs.c
fs/ntfs/inode.c
fs/ocfs2/acl.c
fs/ocfs2/aops.c
fs/ocfs2/dlmfs/dlmfs.c
fs/ocfs2/file.c
fs/ocfs2/namei.c
fs/orangefs/file.c
fs/orangefs/inode.c
fs/orangefs/namei.c
fs/overlayfs/dir.c
fs/pipe.c
fs/posix_acl.c
fs/proc/base.c
fs/proc/proc_sysctl.c
fs/reiserfs/inode.c
fs/reiserfs/namei.c
fs/reiserfs/super.c
fs/reiserfs/xattr_acl.c
fs/ubifs/dir.c
fs/ufs/inode.c
fs/xfs/xfs_acl.c
fs/xfs/xfs_inode.c
fs/xfs/xfs_iops.c
include/linux/fs.h
mm/shmem.c
security/inode.c

@@@ -94,11 -97,9 +91,10 @@@ update_time:        n
  atomic_open:  yes
  tmpfile:      no
  
 +
        Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
  victim.
-       cross-directory ->rename() and rename2() has (per-superblock)
- ->s_vfs_rename_sem.
+       cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem.
  
  See Documentation/filesystems/directory-locking for more detailed discussion
  of the locking scheme for directory operations.
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc fs/adfs/inode.c
Simple merge
diff --cc fs/affs/inode.c
Simple merge
diff --cc fs/attr.c
Simple merge
diff --cc fs/bad_inode.c
@@@ -153,9 -173,8 +153,9 @@@ void make_bad_inode(struct inode *inode
  
        inode->i_mode = S_IFREG;
        inode->i_atime = inode->i_mtime = inode->i_ctime =
-               current_fs_time(inode->i_sb);
+               current_time(inode);
        inode->i_op = &bad_inode_ops;   
 +      inode->i_opflags &= ~IOP_XATTR;
        inode->i_fop = &bad_file_ops;   
  }
  EXPORT_SYMBOL(make_bad_inode);
diff --cc fs/btrfs/file.c
Simple merge
Simple merge
Simple merge
diff --cc fs/ceph/dir.c
Simple merge
diff --cc fs/ceph/file.c
Simple merge
diff --cc fs/ceph/inode.c
Simple merge
Simple merge
diff --cc fs/cifs/file.c
Simple merge
diff --cc fs/coda/file.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc fs/ext2/acl.c
@@@ -190,11 -190,15 +190,11 @@@ ext2_set_acl(struct inode *inode, struc
                case ACL_TYPE_ACCESS:
                        name_index = EXT2_XATTR_INDEX_POSIX_ACL_ACCESS;
                        if (acl) {
 -                              error = posix_acl_equiv_mode(acl, &inode->i_mode);
 -                              if (error < 0)
 +                              error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
 +                              if (error)
                                        return error;
-                               inode->i_ctime = CURRENT_TIME_SEC;
 -                              else {
 -                                      inode->i_ctime = current_time(inode);
 -                                      mark_inode_dirty(inode);
 -                                      if (error == 0)
 -                                              acl = NULL;
 -                              }
++                              inode->i_ctime = current_time(inode);
 +                              mark_inode_dirty(inode);
                        }
                        break;
  
Simple merge
diff --cc fs/ext2/inode.c
Simple merge
diff --cc fs/ext2/namei.c
Simple merge
diff --cc fs/ext4/namei.c
@@@ -3878,9 -3880,12 +3878,9 @@@ const struct inode_operations ext4_dir_
        .rmdir          = ext4_rmdir,
        .mknod          = ext4_mknod,
        .tmpfile        = ext4_tmpfile,
-       .rename2        = ext4_rename2,
+       .rename         = ext4_rename2,
        .setattr        = ext4_setattr,
 -      .setxattr       = generic_setxattr,
 -      .getxattr       = generic_getxattr,
        .listxattr      = ext4_listxattr,
 -      .removexattr    = generic_removexattr,
        .get_acl        = ext4_get_acl,
        .set_acl        = ext4_set_acl,
        .fiemap         = ext4_fiemap,
diff --cc fs/f2fs/dir.c
Simple merge
diff --cc fs/f2fs/file.c
Simple merge
Simple merge
diff --cc fs/f2fs/namei.c
Simple merge
diff --cc fs/f2fs/xattr.c
Simple merge
diff --cc fs/fat/file.c
Simple merge
@@@ -832,9 -821,9 +832,9 @@@ static int vfat_rmdir(struct inode *dir
        drop_nlink(dir);
  
        clear_nlink(inode);
-       inode->i_mtime = inode->i_atime = CURRENT_TIME_SEC;
+       inode->i_mtime = inode->i_atime = current_time(inode);
        fat_detach(inode);
 -      dentry->d_time = dir->i_version;
 +      vfat_d_version_set(dentry, dir->i_version);
  out:
        mutex_unlock(&MSDOS_SB(sb)->s_lock);
  
@@@ -858,9 -847,9 +858,9 @@@ static int vfat_unlink(struct inode *di
        if (err)
                goto out;
        clear_nlink(inode);
-       inode->i_mtime = inode->i_atime = CURRENT_TIME_SEC;
+       inode->i_mtime = inode->i_atime = current_time(inode);
        fat_detach(inode);
 -      dentry->d_time = dir->i_version;
 +      vfat_d_version_set(dentry, dir->i_version);
  out:
        mutex_unlock(&MSDOS_SB(sb)->s_lock);
  
diff --cc fs/fuse/dir.c
@@@ -644,10 -634,10 +644,10 @@@ static int fuse_symlink(struct inode *d
        return create_new_entry(fc, &args, dir, entry, S_IFLNK);
  }
  
 -static inline void fuse_update_ctime(struct inode *inode)
 +void fuse_update_ctime(struct inode *inode)
  {
        if (!IS_NOCMTIME(inode)) {
-               inode->i_ctime = current_fs_time(inode->i_sb);
+               inode->i_ctime = current_time(inode);
                mark_inode_dirty_sync(inode);
        }
  }
diff --cc fs/gfs2/bmap.c
Simple merge
diff --cc fs/gfs2/dir.c
Simple merge
diff --cc fs/gfs2/inode.c
Simple merge
diff --cc fs/gfs2/quota.c
Simple merge
diff --cc fs/hfs/inode.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc fs/inode.c
@@@ -1686,9 -1636,9 +1686,9 @@@ bool __atime_needs_update(const struct 
        if ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))
                return false;
  
-       now = current_fs_time(inode->i_sb);
+       now = current_time(inode);
  
 -      if (!relatime_need_update(mnt, inode, now))
 +      if (!relatime_need_update(path, inode, now, rcu))
                return false;
  
        if (timespec_equal(&inode->i_atime, &now))
diff --cc fs/jffs2/acl.c
Simple merge
diff --cc fs/jffs2/dir.c
Simple merge
diff --cc fs/jffs2/fs.c
Simple merge
diff --cc fs/jfs/acl.c
@@@ -78,11 -78,13 +78,11 @@@ static int __jfs_set_acl(tid_t tid, str
        case ACL_TYPE_ACCESS:
                ea_name = XATTR_NAME_POSIX_ACL_ACCESS;
                if (acl) {
 -                      rc = posix_acl_equiv_mode(acl, &inode->i_mode);
 -                      if (rc < 0)
 +                      rc = posix_acl_update_mode(inode, &inode->i_mode, &acl);
 +                      if (rc)
                                return rc;
-                       inode->i_ctime = CURRENT_TIME;
+                       inode->i_ctime = current_time(inode);
                        mark_inode_dirty(inode);
 -                      if (rc == 0)
 -                              acl = NULL;
                }
                break;
        case ACL_TYPE_DEFAULT:
diff --cc fs/jfs/namei.c
Simple merge
diff --cc fs/kernfs/dir.c
Simple merge
Simple merge
diff --cc fs/libfs.c
Simple merge
diff --cc fs/locks.c
Simple merge
diff --cc fs/logfs/file.c
Simple merge
diff --cc fs/namei.c
Simple merge
Simple merge
Simple merge
diff --cc fs/nsfs.c
Simple merge
diff --cc fs/ntfs/inode.c
Simple merge
diff --cc fs/ocfs2/acl.c
Simple merge
diff --cc fs/ocfs2/aops.c
Simple merge
Simple merge
diff --cc fs/ocfs2/file.c
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -76,12 -76,12 +76,12 @@@ static int orangefs_create(struct inod
        ORANGEFS_I(inode)->getattr_time = jiffies - 1;
  
        gossip_debug(GOSSIP_NAME_DEBUG,
 -                   "%s: dentry instantiated for %s\n",
 +                   "%s: dentry instantiated for %pd\n",
                     __func__,
 -                   dentry->d_name.name);
 +                   dentry);
  
        SetMtimeFlag(parent);
-       dir->i_mtime = dir->i_ctime = current_fs_time(dir->i_sb);
+       dir->i_mtime = dir->i_ctime = current_time(dir);
        mark_inode_dirty_sync(dir);
        ret = 0;
  out:
@@@ -326,12 -326,12 +326,12 @@@ static int orangefs_symlink(struct inod
        ORANGEFS_I(inode)->getattr_time = jiffies - 1;
  
        gossip_debug(GOSSIP_NAME_DEBUG,
 -                   "Inode (Symlink) %pU -> %s\n",
 +                   "Inode (Symlink) %pU -> %pd\n",
                     get_khandle_from_ino(inode),
 -                   dentry->d_name.name);
 +                   dentry);
  
        SetMtimeFlag(parent);
-       dir->i_mtime = dir->i_ctime = current_fs_time(dir->i_sb);
+       dir->i_mtime = dir->i_ctime = current_time(dir);
        mark_inode_dirty_sync(dir);
        ret = 0;
  out:
Simple merge
diff --cc fs/pipe.c
Simple merge
diff --cc fs/posix_acl.c
Simple merge
diff --cc fs/proc/base.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc fs/ubifs/dir.c
@@@ -1179,10 -1183,13 +1183,10 @@@ const struct inode_operations ubifs_dir
        .mkdir       = ubifs_mkdir,
        .rmdir       = ubifs_rmdir,
        .mknod       = ubifs_mknod,
-       .rename      = ubifs_rename,
+       .rename     = ubifs_rename,
        .setattr     = ubifs_setattr,
        .getattr     = ubifs_getattr,
 -      .setxattr    = generic_setxattr,
 -      .getxattr    = generic_getxattr,
        .listxattr   = ubifs_listxattr,
 -      .removexattr = generic_removexattr,
  #ifdef CONFIG_UBIFS_ATIME_SUPPORT
        .update_time = ubifs_update_time,
  #endif
diff --cc fs/ufs/inode.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc mm/shmem.c
Simple merge
Simple merge