|
@@ -4075,7 +4075,7 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
if (error)
|
|
|
return error;
|
|
|
|
|
|
- if (!old_dir->i_op->rename)
|
|
|
+ if (!old_dir->i_op->rename && !old_dir->i_op->rename2)
|
|
|
return -EPERM;
|
|
|
|
|
|
if (flags && !old_dir->i_op->rename2)
|
|
@@ -4134,10 +4134,11 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
if (error)
|
|
|
goto out;
|
|
|
}
|
|
|
- if (!flags) {
|
|
|
+ if (!old_dir->i_op->rename2) {
|
|
|
error = old_dir->i_op->rename(old_dir, old_dentry,
|
|
|
new_dir, new_dentry);
|
|
|
} else {
|
|
|
+ WARN_ON(old_dir->i_op->rename != NULL);
|
|
|
error = old_dir->i_op->rename2(old_dir, old_dentry,
|
|
|
new_dir, new_dentry, flags);
|
|
|
}
|