shmem: support RENAME_NOREPLACE
authorMiklos Szeredi <mszeredi@suse.cz>
Wed, 23 Jul 2014 13:15:33 +0000 (15:15 +0200)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 7 Aug 2014 18:40:09 +0000 (14:40 -0400)
Implement ->rename2 instead of ->rename.

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Acked-by: Hugh Dickins <hughd@google.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
mm/shmem.c

index af68b15a8fc1f99ede5cf82a38aecfc6b3b6eda6..fe959181f9950ebc5c4bcb980edf8997d1e2c6e5 100644 (file)
@@ -2054,11 +2054,14 @@ static int shmem_rmdir(struct inode *dir, struct dentry *dentry)
  * it exists so that the VFS layer correctly free's it when it
  * gets overwritten.
  */
-static int shmem_rename(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry)
+static int shmem_rename2(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry, unsigned int flags)
 {
        struct inode *inode = old_dentry->d_inode;
        int they_are_dirs = S_ISDIR(inode->i_mode);
 
+       if (flags & ~(RENAME_NOREPLACE))
+               return -EINVAL;
+
        if (!simple_empty(new_dentry))
                return -ENOTEMPTY;
 
@@ -2741,7 +2744,7 @@ static const struct inode_operations shmem_dir_inode_operations = {
        .mkdir          = shmem_mkdir,
        .rmdir          = shmem_rmdir,
        .mknod          = shmem_mknod,
-       .rename         = shmem_rename,
+       .rename2        = shmem_rename2,
        .tmpfile        = shmem_tmpfile,
 #endif
 #ifdef CONFIG_TMPFS_XATTR