aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/lustre/lustre/llite/namei.c8
-rw-r--r--fs/9p/v9fs.h3
-rw-r--r--fs/9p/vfs_inode.c10
-rw-r--r--fs/9p/vfs_inode_dotl.c2
-rw-r--r--fs/afs/dir.c11
-rw-r--r--fs/ceph/dir.c10
-rw-r--r--fs/coda/dir.c8
-rw-r--r--fs/ecryptfs/inode.c8
-rw-r--r--fs/kernfs/dir.c8
-rw-r--r--fs/ncpfs/dir.c10
-rw-r--r--fs/nfs/dir.c6
-rw-r--r--fs/nfs/internal.h3
-rw-r--r--fs/nfs/nfs3proc.c2
-rw-r--r--fs/nfs/nfs4proc.c2
-rw-r--r--fs/nfs/proc.c2
-rw-r--r--fs/ocfs2/namei.c8
-rw-r--r--fs/orangefs/namei.c8
17 files changed, 78 insertions, 31 deletions
diff --git a/drivers/staging/lustre/lustre/llite/namei.c b/drivers/staging/lustre/lustre/llite/namei.c
index 2c4dc69731e8..ec824db2ad33 100644
--- a/drivers/staging/lustre/lustre/llite/namei.c
+++ b/drivers/staging/lustre/lustre/llite/namei.c
@@ -1050,13 +1050,17 @@ out:
1050} 1050}
1051 1051
1052static int ll_rename(struct inode *src, struct dentry *src_dchild, 1052static int ll_rename(struct inode *src, struct dentry *src_dchild,
1053 struct inode *tgt, struct dentry *tgt_dchild) 1053 struct inode *tgt, struct dentry *tgt_dchild,
1054 unsigned int flags)
1054{ 1055{
1055 struct ptlrpc_request *request = NULL; 1056 struct ptlrpc_request *request = NULL;
1056 struct ll_sb_info *sbi = ll_i2sbi(src); 1057 struct ll_sb_info *sbi = ll_i2sbi(src);
1057 struct md_op_data *op_data; 1058 struct md_op_data *op_data;
1058 int err; 1059 int err;
1059 1060
1061 if (flags)
1062 return -EINVAL;
1063
1060 CDEBUG(D_VFSTRACE, 1064 CDEBUG(D_VFSTRACE,
1061 "VFS Op:oldname=%pd, src_dir="DFID"(%p), newname=%pd, tgt_dir="DFID"(%p)\n", 1065 "VFS Op:oldname=%pd, src_dir="DFID"(%p), newname=%pd, tgt_dir="DFID"(%p)\n",
1062 src_dchild, PFID(ll_inode2fid(src)), src, 1066 src_dchild, PFID(ll_inode2fid(src)), src,
@@ -1102,7 +1106,7 @@ const struct inode_operations ll_dir_inode_operations = {
1102 .rmdir = ll_rmdir, 1106 .rmdir = ll_rmdir,
1103 .symlink = ll_symlink, 1107 .symlink = ll_symlink,
1104 .link = ll_link, 1108 .link = ll_link,
1105 .rename = ll_rename, 1109 .rename2 = ll_rename,
1106 .setattr = ll_setattr, 1110 .setattr = ll_setattr,
1107 .getattr = ll_getattr, 1111 .getattr = ll_getattr,
1108 .permission = ll_inode_permission, 1112 .permission = ll_inode_permission,
diff --git a/fs/9p/v9fs.h b/fs/9p/v9fs.h
index 6877050384a1..443d12e02043 100644
--- a/fs/9p/v9fs.h
+++ b/fs/9p/v9fs.h
@@ -148,7 +148,8 @@ extern struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,
148extern int v9fs_vfs_unlink(struct inode *i, struct dentry *d); 148extern int v9fs_vfs_unlink(struct inode *i, struct dentry *d);
149extern int v9fs_vfs_rmdir(struct inode *i, struct dentry *d); 149extern int v9fs_vfs_rmdir(struct inode *i, struct dentry *d);
150extern int v9fs_vfs_rename(struct inode *old_dir, struct dentry *old_dentry, 150extern int v9fs_vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
151 struct inode *new_dir, struct dentry *new_dentry); 151 struct inode *new_dir, struct dentry *new_dentry,
152 unsigned int flags);
152extern struct inode *v9fs_inode_from_fid(struct v9fs_session_info *v9ses, 153extern struct inode *v9fs_inode_from_fid(struct v9fs_session_info *v9ses,
153 struct p9_fid *fid, 154 struct p9_fid *fid,
154 struct super_block *sb, int new); 155 struct super_block *sb, int new);
diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
index 8b1999b528e9..50ab1a615207 100644
--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -955,7 +955,8 @@ int v9fs_vfs_rmdir(struct inode *i, struct dentry *d)
955 955
956int 956int
957v9fs_vfs_rename(struct inode *old_dir, struct dentry *old_dentry, 957v9fs_vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
958 struct inode *new_dir, struct dentry *new_dentry) 958 struct inode *new_dir, struct dentry *new_dentry,
959 unsigned int flags)
959{ 960{
960 int retval; 961 int retval;
961 struct inode *old_inode; 962 struct inode *old_inode;
@@ -966,6 +967,9 @@ v9fs_vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
966 struct p9_fid *newdirfid; 967 struct p9_fid *newdirfid;
967 struct p9_wstat wstat; 968 struct p9_wstat wstat;
968 969
970 if (flags)
971 return -EINVAL;
972
969 p9_debug(P9_DEBUG_VFS, "\n"); 973 p9_debug(P9_DEBUG_VFS, "\n");
970 retval = 0; 974 retval = 0;
971 old_inode = d_inode(old_dentry); 975 old_inode = d_inode(old_dentry);
@@ -1436,7 +1440,7 @@ static const struct inode_operations v9fs_dir_inode_operations_dotu = {
1436 .mkdir = v9fs_vfs_mkdir, 1440 .mkdir = v9fs_vfs_mkdir,
1437 .rmdir = v9fs_vfs_rmdir, 1441 .rmdir = v9fs_vfs_rmdir,
1438 .mknod = v9fs_vfs_mknod, 1442 .mknod = v9fs_vfs_mknod,
1439 .rename = v9fs_vfs_rename, 1443 .rename2 = v9fs_vfs_rename,
1440 .getattr = v9fs_vfs_getattr, 1444 .getattr = v9fs_vfs_getattr,
1441 .setattr = v9fs_vfs_setattr, 1445 .setattr = v9fs_vfs_setattr,
1442}; 1446};
@@ -1449,7 +1453,7 @@ static const struct inode_operations v9fs_dir_inode_operations = {
1449 .mkdir = v9fs_vfs_mkdir, 1453 .mkdir = v9fs_vfs_mkdir,
1450 .rmdir = v9fs_vfs_rmdir, 1454 .rmdir = v9fs_vfs_rmdir,
1451 .mknod = v9fs_vfs_mknod, 1455 .mknod = v9fs_vfs_mknod,
1452 .rename = v9fs_vfs_rename, 1456 .rename2 = v9fs_vfs_rename,
1453 .getattr = v9fs_vfs_getattr, 1457 .getattr = v9fs_vfs_getattr,
1454 .setattr = v9fs_vfs_setattr, 1458 .setattr = v9fs_vfs_setattr,
1455}; 1459};
diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c
index eeabcb0bad12..8164be972b5c 100644
--- a/fs/9p/vfs_inode_dotl.c
+++ b/fs/9p/vfs_inode_dotl.c
@@ -964,7 +964,7 @@ const struct inode_operations v9fs_dir_inode_operations_dotl = {
964 .mkdir = v9fs_vfs_mkdir_dotl, 964 .mkdir = v9fs_vfs_mkdir_dotl,
965 .rmdir = v9fs_vfs_rmdir, 965 .rmdir = v9fs_vfs_rmdir,
966 .mknod = v9fs_vfs_mknod_dotl, 966 .mknod = v9fs_vfs_mknod_dotl,
967 .rename = v9fs_vfs_rename, 967 .rename2 = v9fs_vfs_rename,
968 .getattr = v9fs_vfs_getattr_dotl, 968 .getattr = v9fs_vfs_getattr_dotl,
969 .setattr = v9fs_vfs_setattr_dotl, 969 .setattr = v9fs_vfs_setattr_dotl,
970 .setxattr = generic_setxattr, 970 .setxattr = generic_setxattr,
diff --git a/fs/afs/dir.c b/fs/afs/dir.c
index eba541004d90..381b7d0b6751 100644
--- a/fs/afs/dir.c
+++ b/fs/afs/dir.c
@@ -38,7 +38,8 @@ static int afs_link(struct dentry *from, struct inode *dir,
38static int afs_symlink(struct inode *dir, struct dentry *dentry, 38static int afs_symlink(struct inode *dir, struct dentry *dentry,
39 const char *content); 39 const char *content);
40static int afs_rename(struct inode *old_dir, struct dentry *old_dentry, 40static int afs_rename(struct inode *old_dir, struct dentry *old_dentry,
41 struct inode *new_dir, struct dentry *new_dentry); 41 struct inode *new_dir, struct dentry *new_dentry,
42 unsigned int flags);
42 43
43const struct file_operations afs_dir_file_operations = { 44const struct file_operations afs_dir_file_operations = {
44 .open = afs_dir_open, 45 .open = afs_dir_open,
@@ -56,7 +57,7 @@ const struct inode_operations afs_dir_inode_operations = {
56 .symlink = afs_symlink, 57 .symlink = afs_symlink,
57 .mkdir = afs_mkdir, 58 .mkdir = afs_mkdir,
58 .rmdir = afs_rmdir, 59 .rmdir = afs_rmdir,
59 .rename = afs_rename, 60 .rename2 = afs_rename,
60 .permission = afs_permission, 61 .permission = afs_permission,
61 .getattr = afs_getattr, 62 .getattr = afs_getattr,
62 .setattr = afs_setattr, 63 .setattr = afs_setattr,
@@ -1083,12 +1084,16 @@ error:
1083 * rename a file in an AFS filesystem and/or move it between directories 1084 * rename a file in an AFS filesystem and/or move it between directories
1084 */ 1085 */
1085static int afs_rename(struct inode *old_dir, struct dentry *old_dentry, 1086static int afs_rename(struct inode *old_dir, struct dentry *old_dentry,
1086 struct inode *new_dir, struct dentry *new_dentry) 1087 struct inode *new_dir, struct dentry *new_dentry,
1088 unsigned int flags)
1087{ 1089{
1088 struct afs_vnode *orig_dvnode, *new_dvnode, *vnode; 1090 struct afs_vnode *orig_dvnode, *new_dvnode, *vnode;
1089 struct key *key; 1091 struct key *key;
1090 int ret; 1092 int ret;
1091 1093
1094 if (flags)
1095 return -EINVAL;
1096
1092 vnode = AFS_FS_I(d_inode(old_dentry)); 1097 vnode = AFS_FS_I(d_inode(old_dentry));
1093 orig_dvnode = AFS_FS_I(old_dir); 1098 orig_dvnode = AFS_FS_I(old_dir);
1094 new_dvnode = AFS_FS_I(new_dir); 1099 new_dvnode = AFS_FS_I(new_dir);
diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
index df4b3e6fa563..cef8252af38a 100644
--- a/fs/ceph/dir.c
+++ b/fs/ceph/dir.c
@@ -1061,7 +1061,8 @@ out:
1061} 1061}
1062 1062
1063static int ceph_rename(struct inode *old_dir, struct dentry *old_dentry, 1063static int ceph_rename(struct inode *old_dir, struct dentry *old_dentry,
1064 struct inode *new_dir, struct dentry *new_dentry) 1064 struct inode *new_dir, struct dentry *new_dentry,
1065 unsigned int flags)
1065{ 1066{
1066 struct ceph_fs_client *fsc = ceph_sb_to_client(old_dir->i_sb); 1067 struct ceph_fs_client *fsc = ceph_sb_to_client(old_dir->i_sb);
1067 struct ceph_mds_client *mdsc = fsc->mdsc; 1068 struct ceph_mds_client *mdsc = fsc->mdsc;
@@ -1069,6 +1070,9 @@ static int ceph_rename(struct inode *old_dir, struct dentry *old_dentry,
1069 int op = CEPH_MDS_OP_RENAME; 1070 int op = CEPH_MDS_OP_RENAME;
1070 int err; 1071 int err;
1071 1072
1073 if (flags)
1074 return -EINVAL;
1075
1072 if (ceph_snap(old_dir) != ceph_snap(new_dir)) 1076 if (ceph_snap(old_dir) != ceph_snap(new_dir))
1073 return -EXDEV; 1077 return -EXDEV;
1074 if (ceph_snap(old_dir) != CEPH_NOSNAP) { 1078 if (ceph_snap(old_dir) != CEPH_NOSNAP) {
@@ -1498,7 +1502,7 @@ const struct inode_operations ceph_dir_iops = {
1498 .link = ceph_link, 1502 .link = ceph_link,
1499 .unlink = ceph_unlink, 1503 .unlink = ceph_unlink,
1500 .rmdir = ceph_unlink, 1504 .rmdir = ceph_unlink,
1501 .rename = ceph_rename, 1505 .rename2 = ceph_rename,
1502 .create = ceph_create, 1506 .create = ceph_create,
1503 .atomic_open = ceph_atomic_open, 1507 .atomic_open = ceph_atomic_open,
1504}; 1508};
@@ -1509,7 +1513,7 @@ const struct inode_operations ceph_snapdir_iops = {
1509 .getattr = ceph_getattr, 1513 .getattr = ceph_getattr,
1510 .mkdir = ceph_mkdir, 1514 .mkdir = ceph_mkdir,
1511 .rmdir = ceph_unlink, 1515 .rmdir = ceph_unlink,
1512 .rename = ceph_rename, 1516 .rename2 = ceph_rename,
1513}; 1517};
1514 1518
1515const struct dentry_operations ceph_dentry_ops = { 1519const struct dentry_operations ceph_dentry_ops = {
diff --git a/fs/coda/dir.c b/fs/coda/dir.c
index 6fb8672c0892..5d79c26b0484 100644
--- a/fs/coda/dir.c
+++ b/fs/coda/dir.c
@@ -291,7 +291,8 @@ static int coda_rmdir(struct inode *dir, struct dentry *de)
291 291
292/* rename */ 292/* rename */
293static int coda_rename(struct inode *old_dir, struct dentry *old_dentry, 293static int coda_rename(struct inode *old_dir, struct dentry *old_dentry,
294 struct inode *new_dir, struct dentry *new_dentry) 294 struct inode *new_dir, struct dentry *new_dentry,
295 unsigned int flags)
295{ 296{
296 const char *old_name = old_dentry->d_name.name; 297 const char *old_name = old_dentry->d_name.name;
297 const char *new_name = new_dentry->d_name.name; 298 const char *new_name = new_dentry->d_name.name;
@@ -299,6 +300,9 @@ static int coda_rename(struct inode *old_dir, struct dentry *old_dentry,
299 int new_length = new_dentry->d_name.len; 300 int new_length = new_dentry->d_name.len;
300 int error; 301 int error;
301 302
303 if (flags)
304 return -EINVAL;
305
302 error = venus_rename(old_dir->i_sb, coda_i2f(old_dir), 306 error = venus_rename(old_dir->i_sb, coda_i2f(old_dir),
303 coda_i2f(new_dir), old_length, new_length, 307 coda_i2f(new_dir), old_length, new_length,
304 (const char *) old_name, (const char *)new_name); 308 (const char *) old_name, (const char *)new_name);
@@ -569,7 +573,7 @@ const struct inode_operations coda_dir_inode_operations = {
569 .mkdir = coda_mkdir, 573 .mkdir = coda_mkdir,
570 .rmdir = coda_rmdir, 574 .rmdir = coda_rmdir,
571 .mknod = CODA_EIO_ERROR, 575 .mknod = CODA_EIO_ERROR,
572 .rename = coda_rename, 576 .rename2 = coda_rename,
573 .permission = coda_permission, 577 .permission = coda_permission,
574 .getattr = coda_getattr, 578 .getattr = coda_getattr,
575 .setattr = coda_setattr, 579 .setattr = coda_setattr,
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
index 9d153b6a1d72..f3ff7c4d384c 100644
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
@@ -577,7 +577,8 @@ out:
577 577
578static int 578static int
579ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry, 579ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
580 struct inode *new_dir, struct dentry *new_dentry) 580 struct inode *new_dir, struct dentry *new_dentry,
581 unsigned int flags)
581{ 582{
582 int rc; 583 int rc;
583 struct dentry *lower_old_dentry; 584 struct dentry *lower_old_dentry;
@@ -587,6 +588,9 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
587 struct dentry *trap = NULL; 588 struct dentry *trap = NULL;
588 struct inode *target_inode; 589 struct inode *target_inode;
589 590
591 if (flags)
592 return -EINVAL;
593
590 lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry); 594 lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry);
591 lower_new_dentry = ecryptfs_dentry_to_lower(new_dentry); 595 lower_new_dentry = ecryptfs_dentry_to_lower(new_dentry);
592 dget(lower_old_dentry); 596 dget(lower_old_dentry);
@@ -1104,7 +1108,7 @@ const struct inode_operations ecryptfs_dir_iops = {
1104 .mkdir = ecryptfs_mkdir, 1108 .mkdir = ecryptfs_mkdir,
1105 .rmdir = ecryptfs_rmdir, 1109 .rmdir = ecryptfs_rmdir,
1106 .mknod = ecryptfs_mknod, 1110 .mknod = ecryptfs_mknod,
1107 .rename = ecryptfs_rename, 1111 .rename2 = ecryptfs_rename,
1108 .permission = ecryptfs_permission, 1112 .permission = ecryptfs_permission,
1109 .setattr = ecryptfs_setattr, 1113 .setattr = ecryptfs_setattr,
1110 .setxattr = ecryptfs_setxattr, 1114 .setxattr = ecryptfs_setxattr,
diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
index e57174d43683..c7e23ca945ab 100644
--- a/fs/kernfs/dir.c
+++ b/fs/kernfs/dir.c
@@ -1096,13 +1096,17 @@ static int kernfs_iop_rmdir(struct inode *dir, struct dentry *dentry)
1096} 1096}
1097 1097
1098static int kernfs_iop_rename(struct inode *old_dir, struct dentry *old_dentry, 1098static int kernfs_iop_rename(struct inode *old_dir, struct dentry *old_dentry,
1099 struct inode *new_dir, struct dentry *new_dentry) 1099 struct inode *new_dir, struct dentry *new_dentry,
1100 unsigned int flags)
1100{ 1101{
1101 struct kernfs_node *kn = old_dentry->d_fsdata; 1102 struct kernfs_node *kn = old_dentry->d_fsdata;
1102 struct kernfs_node *new_parent = new_dir->i_private; 1103 struct kernfs_node *new_parent = new_dir->i_private;
1103 struct kernfs_syscall_ops *scops = kernfs_root(kn)->syscall_ops; 1104 struct kernfs_syscall_ops *scops = kernfs_root(kn)->syscall_ops;
1104 int ret; 1105 int ret;
1105 1106
1107 if (flags)
1108 return -EINVAL;
1109
1106 if (!scops || !scops->rename) 1110 if (!scops || !scops->rename)
1107 return -EPERM; 1111 return -EPERM;
1108 1112
@@ -1133,7 +1137,7 @@ const struct inode_operations kernfs_dir_iops = {
1133 1137
1134 .mkdir = kernfs_iop_mkdir, 1138 .mkdir = kernfs_iop_mkdir,
1135 .rmdir = kernfs_iop_rmdir, 1139 .rmdir = kernfs_iop_rmdir,
1136 .rename = kernfs_iop_rename, 1140 .rename2 = kernfs_iop_rename,
1137}; 1141};
1138 1142
1139static struct kernfs_node *kernfs_leftmost_descendant(struct kernfs_node *pos) 1143static struct kernfs_node *kernfs_leftmost_descendant(struct kernfs_node *pos)
diff --git a/fs/ncpfs/dir.c b/fs/ncpfs/dir.c
index f5b594e2457c..a2d3738df4af 100644
--- a/fs/ncpfs/dir.c
+++ b/fs/ncpfs/dir.c
@@ -36,7 +36,7 @@ static int ncp_unlink(struct inode *, struct dentry *);
36static int ncp_mkdir(struct inode *, struct dentry *, umode_t); 36static int ncp_mkdir(struct inode *, struct dentry *, umode_t);
37static int ncp_rmdir(struct inode *, struct dentry *); 37static int ncp_rmdir(struct inode *, struct dentry *);
38static int ncp_rename(struct inode *, struct dentry *, 38static int ncp_rename(struct inode *, struct dentry *,
39 struct inode *, struct dentry *); 39 struct inode *, struct dentry *, unsigned int);
40static int ncp_mknod(struct inode * dir, struct dentry *dentry, 40static int ncp_mknod(struct inode * dir, struct dentry *dentry,
41 umode_t mode, dev_t rdev); 41 umode_t mode, dev_t rdev);
42#if defined(CONFIG_NCPFS_EXTRAS) || defined(CONFIG_NCPFS_NFS_NS) 42#if defined(CONFIG_NCPFS_EXTRAS) || defined(CONFIG_NCPFS_NFS_NS)
@@ -65,7 +65,7 @@ const struct inode_operations ncp_dir_inode_operations =
65 .mkdir = ncp_mkdir, 65 .mkdir = ncp_mkdir,
66 .rmdir = ncp_rmdir, 66 .rmdir = ncp_rmdir,
67 .mknod = ncp_mknod, 67 .mknod = ncp_mknod,
68 .rename = ncp_rename, 68 .rename2 = ncp_rename,
69 .setattr = ncp_notify_change, 69 .setattr = ncp_notify_change,
70}; 70};
71 71
@@ -1105,13 +1105,17 @@ static int ncp_unlink(struct inode *dir, struct dentry *dentry)
1105} 1105}
1106 1106
1107static int ncp_rename(struct inode *old_dir, struct dentry *old_dentry, 1107static int ncp_rename(struct inode *old_dir, struct dentry *old_dentry,
1108 struct inode *new_dir, struct dentry *new_dentry) 1108 struct inode *new_dir, struct dentry *new_dentry,
1109 unsigned int flags)
1109{ 1110{
1110 struct ncp_server *server = NCP_SERVER(old_dir); 1111 struct ncp_server *server = NCP_SERVER(old_dir);
1111 int error; 1112 int error;
1112 int old_len, new_len; 1113 int old_len, new_len;
1113 __u8 __old_name[NCP_MAXPATHLEN + 1], __new_name[NCP_MAXPATHLEN + 1]; 1114 __u8 __old_name[NCP_MAXPATHLEN + 1], __new_name[NCP_MAXPATHLEN + 1];
1114 1115
1116 if (flags)
1117 return -EINVAL;
1118
1115 ncp_dbg(1, "%pd2 to %pd2\n", old_dentry, new_dentry); 1119 ncp_dbg(1, "%pd2 to %pd2\n", old_dentry, new_dentry);
1116 1120
1117 ncp_age_dentry(server, old_dentry); 1121 ncp_age_dentry(server, old_dentry);
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index 177fefb26c18..06e0bf092ba9 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -2013,7 +2013,8 @@ EXPORT_SYMBOL_GPL(nfs_link);
2013 * the rename. 2013 * the rename.
2014 */ 2014 */
2015int nfs_rename(struct inode *old_dir, struct dentry *old_dentry, 2015int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
2016 struct inode *new_dir, struct dentry *new_dentry) 2016 struct inode *new_dir, struct dentry *new_dentry,
2017 unsigned int flags)
2017{ 2018{
2018 struct inode *old_inode = d_inode(old_dentry); 2019 struct inode *old_inode = d_inode(old_dentry);
2019 struct inode *new_inode = d_inode(new_dentry); 2020 struct inode *new_inode = d_inode(new_dentry);
@@ -2021,6 +2022,9 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
2021 struct rpc_task *task; 2022 struct rpc_task *task;
2022 int error = -EBUSY; 2023 int error = -EBUSY;
2023 2024
2025 if (flags)
2026 return -EINVAL;
2027
2024 dfprintk(VFS, "NFS: rename(%pd2 -> %pd2, ct=%d)\n", 2028 dfprintk(VFS, "NFS: rename(%pd2 -> %pd2, ct=%d)\n",
2025 old_dentry, new_dentry, 2029 old_dentry, new_dentry,
2026 d_count(new_dentry)); 2030 d_count(new_dentry));
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
index 74935a19e4bf..48d1adfe25d6 100644
--- a/fs/nfs/internal.h
+++ b/fs/nfs/internal.h
@@ -359,7 +359,8 @@ int nfs_unlink(struct inode *, struct dentry *);
359int nfs_symlink(struct inode *, struct dentry *, const char *); 359int nfs_symlink(struct inode *, struct dentry *, const char *);
360int nfs_link(struct dentry *, struct inode *, struct dentry *); 360int nfs_link(struct dentry *, struct inode *, struct dentry *);
361int nfs_mknod(struct inode *, struct dentry *, umode_t, dev_t); 361int nfs_mknod(struct inode *, struct dentry *, umode_t, dev_t);
362int nfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *); 362int nfs_rename(struct inode *, struct dentry *,
363 struct inode *, struct dentry *, unsigned int);
363 364
364/* file.c */ 365/* file.c */
365int nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync); 366int nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync);
diff --git a/fs/nfs/nfs3proc.c b/fs/nfs/nfs3proc.c
index 698be9361280..a85fdae4a51f 100644
--- a/fs/nfs/nfs3proc.c
+++ b/fs/nfs/nfs3proc.c
@@ -893,7 +893,7 @@ static const struct inode_operations nfs3_dir_inode_operations = {
893 .mkdir = nfs_mkdir, 893 .mkdir = nfs_mkdir,
894 .rmdir = nfs_rmdir, 894 .rmdir = nfs_rmdir,
895 .mknod = nfs_mknod, 895 .mknod = nfs_mknod,
896 .rename = nfs_rename, 896 .rename2 = nfs_rename,
897 .permission = nfs_permission, 897 .permission = nfs_permission,
898 .getattr = nfs_getattr, 898 .getattr = nfs_getattr,
899 .setattr = nfs_setattr, 899 .setattr = nfs_setattr,
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index a9dec32ba9ba..14956da3cf38 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -8937,7 +8937,7 @@ static const struct inode_operations nfs4_dir_inode_operations = {
8937 .mkdir = nfs_mkdir, 8937 .mkdir = nfs_mkdir,
8938 .rmdir = nfs_rmdir, 8938 .rmdir = nfs_rmdir,
8939 .mknod = nfs_mknod, 8939 .mknod = nfs_mknod,
8940 .rename = nfs_rename, 8940 .rename2 = nfs_rename,
8941 .permission = nfs_permission, 8941 .permission = nfs_permission,
8942 .getattr = nfs_getattr, 8942 .getattr = nfs_getattr,
8943 .setattr = nfs_setattr, 8943 .setattr = nfs_setattr,
diff --git a/fs/nfs/proc.c b/fs/nfs/proc.c
index b7bca8303989..380d0b787983 100644
--- a/fs/nfs/proc.c
+++ b/fs/nfs/proc.c
@@ -685,7 +685,7 @@ static const struct inode_operations nfs_dir_inode_operations = {
685 .mkdir = nfs_mkdir, 685 .mkdir = nfs_mkdir,
686 .rmdir = nfs_rmdir, 686 .rmdir = nfs_rmdir,
687 .mknod = nfs_mknod, 687 .mknod = nfs_mknod,
688 .rename = nfs_rename, 688 .rename2 = nfs_rename,
689 .permission = nfs_permission, 689 .permission = nfs_permission,
690 .getattr = nfs_getattr, 690 .getattr = nfs_getattr,
691 .setattr = nfs_setattr, 691 .setattr = nfs_setattr,
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
index a8f1225e6d9b..1040c10a9493 100644
--- a/fs/ocfs2/namei.c
+++ b/fs/ocfs2/namei.c
@@ -1203,7 +1203,8 @@ static void ocfs2_double_unlock(struct inode *inode1, struct inode *inode2)
1203static int ocfs2_rename(struct inode *old_dir, 1203static int ocfs2_rename(struct inode *old_dir,
1204 struct dentry *old_dentry, 1204 struct dentry *old_dentry,
1205 struct inode *new_dir, 1205 struct inode *new_dir,
1206 struct dentry *new_dentry) 1206 struct dentry *new_dentry,
1207 unsigned int flags)
1207{ 1208{
1208 int status = 0, rename_lock = 0, parents_locked = 0, target_exists = 0; 1209 int status = 0, rename_lock = 0, parents_locked = 0, target_exists = 0;
1209 int old_child_locked = 0, new_child_locked = 0, update_dot_dot = 0; 1210 int old_child_locked = 0, new_child_locked = 0, update_dot_dot = 0;
@@ -1228,6 +1229,9 @@ static int ocfs2_rename(struct inode *old_dir,
1228 struct ocfs2_dir_lookup_result target_insert = { NULL, }; 1229 struct ocfs2_dir_lookup_result target_insert = { NULL, };
1229 bool should_add_orphan = false; 1230 bool should_add_orphan = false;
1230 1231
1232 if (flags)
1233 return -EINVAL;
1234
1231 /* At some point it might be nice to break this function up a 1235 /* At some point it might be nice to break this function up a
1232 * bit. */ 1236 * bit. */
1233 1237
@@ -2909,7 +2913,7 @@ const struct inode_operations ocfs2_dir_iops = {
2909 .symlink = ocfs2_symlink, 2913 .symlink = ocfs2_symlink,
2910 .mkdir = ocfs2_mkdir, 2914 .mkdir = ocfs2_mkdir,
2911 .mknod = ocfs2_mknod, 2915 .mknod = ocfs2_mknod,
2912 .rename = ocfs2_rename, 2916 .rename2 = ocfs2_rename,
2913 .setattr = ocfs2_setattr, 2917 .setattr = ocfs2_setattr,
2914 .getattr = ocfs2_getattr, 2918 .getattr = ocfs2_getattr,
2915 .permission = ocfs2_permission, 2919 .permission = ocfs2_permission,
diff --git a/fs/orangefs/namei.c b/fs/orangefs/namei.c
index 62c525936ee8..810d43635dfb 100644
--- a/fs/orangefs/namei.c
+++ b/fs/orangefs/namei.c
@@ -409,11 +409,15 @@ out:
409static int orangefs_rename(struct inode *old_dir, 409static int orangefs_rename(struct inode *old_dir,
410 struct dentry *old_dentry, 410 struct dentry *old_dentry,
411 struct inode *new_dir, 411 struct inode *new_dir,
412 struct dentry *new_dentry) 412 struct dentry *new_dentry,
413 unsigned int flags)
413{ 414{
414 struct orangefs_kernel_op_s *new_op; 415 struct orangefs_kernel_op_s *new_op;
415 int ret; 416 int ret;
416 417
418 if (flags)
419 return -EINVAL;
420
417 gossip_debug(GOSSIP_NAME_DEBUG, 421 gossip_debug(GOSSIP_NAME_DEBUG,
418 "orangefs_rename: called (%pd2 => %pd2) ct=%d\n", 422 "orangefs_rename: called (%pd2 => %pd2) ct=%d\n",
419 old_dentry, new_dentry, d_count(new_dentry)); 423 old_dentry, new_dentry, d_count(new_dentry));
@@ -459,7 +463,7 @@ const struct inode_operations orangefs_dir_inode_operations = {
459 .symlink = orangefs_symlink, 463 .symlink = orangefs_symlink,
460 .mkdir = orangefs_mkdir, 464 .mkdir = orangefs_mkdir,
461 .rmdir = orangefs_unlink, 465 .rmdir = orangefs_unlink,
462 .rename = orangefs_rename, 466 .rename2 = orangefs_rename,
463 .setattr = orangefs_setattr, 467 .setattr = orangefs_setattr,
464 .getattr = orangefs_getattr, 468 .getattr = orangefs_getattr,
465 .setxattr = generic_setxattr, 469 .setxattr = generic_setxattr,