diff options
Diffstat (limited to 'fs/hostfs/hostfs_kern.c')
-rw-r--r-- | fs/hostfs/hostfs_kern.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index bb529f3b7f2b..fd62cae0fdcb 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c | |||
@@ -741,21 +741,31 @@ static int hostfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, | |||
741 | return err; | 741 | return err; |
742 | } | 742 | } |
743 | 743 | ||
744 | static int hostfs_rename(struct inode *from_ino, struct dentry *from, | 744 | static int hostfs_rename2(struct inode *old_dir, struct dentry *old_dentry, |
745 | struct inode *to_ino, struct dentry *to) | 745 | struct inode *new_dir, struct dentry *new_dentry, |
746 | unsigned int flags) | ||
746 | { | 747 | { |
747 | char *from_name, *to_name; | 748 | char *old_name, *new_name; |
748 | int err; | 749 | int err; |
749 | 750 | ||
750 | if ((from_name = dentry_name(from)) == NULL) | 751 | if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE)) |
752 | return -EINVAL; | ||
753 | |||
754 | old_name = dentry_name(old_dentry); | ||
755 | if (old_name == NULL) | ||
751 | return -ENOMEM; | 756 | return -ENOMEM; |
752 | if ((to_name = dentry_name(to)) == NULL) { | 757 | new_name = dentry_name(new_dentry); |
753 | __putname(from_name); | 758 | if (new_name == NULL) { |
759 | __putname(old_name); | ||
754 | return -ENOMEM; | 760 | return -ENOMEM; |
755 | } | 761 | } |
756 | err = rename_file(from_name, to_name); | 762 | if (!flags) |
757 | __putname(from_name); | 763 | err = rename_file(old_name, new_name); |
758 | __putname(to_name); | 764 | else |
765 | err = rename2_file(old_name, new_name, flags); | ||
766 | |||
767 | __putname(old_name); | ||
768 | __putname(new_name); | ||
759 | return err; | 769 | return err; |
760 | } | 770 | } |
761 | 771 | ||
@@ -867,7 +877,7 @@ static const struct inode_operations hostfs_dir_iops = { | |||
867 | .mkdir = hostfs_mkdir, | 877 | .mkdir = hostfs_mkdir, |
868 | .rmdir = hostfs_rmdir, | 878 | .rmdir = hostfs_rmdir, |
869 | .mknod = hostfs_mknod, | 879 | .mknod = hostfs_mknod, |
870 | .rename = hostfs_rename, | 880 | .rename2 = hostfs_rename2, |
871 | .permission = hostfs_permission, | 881 | .permission = hostfs_permission, |
872 | .setattr = hostfs_setattr, | 882 | .setattr = hostfs_setattr, |
873 | }; | 883 | }; |