Merge remote-tracking branch 'ovl/rename2' into for-linus
[cascardo/linux.git] / fs / sysv / namei.c
index a42de45..d8817f1 100644 (file)
@@ -120,7 +120,7 @@ static int sysv_link(struct dentry * old_dentry, struct inode * dir,
 {
        struct inode *inode = d_inode(old_dentry);
 
-       inode->i_ctime = CURRENT_TIME_SEC;
+       inode->i_ctime = current_time(inode);
        inode_inc_link_count(inode);
        ihold(inode);
 
@@ -206,7 +206,8 @@ static int sysv_rmdir(struct inode * dir, struct dentry * dentry)
  * higher-level routines.
  */
 static int sysv_rename(struct inode * old_dir, struct dentry * old_dentry,
-                 struct inode * new_dir, struct dentry * new_dentry)
+                      struct inode * new_dir, struct dentry * new_dentry,
+                      unsigned int flags)
 {
        struct inode * old_inode = d_inode(old_dentry);
        struct inode * new_inode = d_inode(new_dentry);
@@ -216,6 +217,9 @@ static int sysv_rename(struct inode * old_dir, struct dentry * old_dentry,
        struct sysv_dir_entry * old_de;
        int err = -ENOENT;
 
+       if (flags & ~RENAME_NOREPLACE)
+               return -EINVAL;
+
        old_de = sysv_find_entry(old_dentry, &old_page);
        if (!old_de)
                goto out;
@@ -240,7 +244,7 @@ static int sysv_rename(struct inode * old_dir, struct dentry * old_dentry,
                if (!new_de)
                        goto out_dir;
                sysv_set_link(new_de, new_page, old_inode);
-               new_inode->i_ctime = CURRENT_TIME_SEC;
+               new_inode->i_ctime = current_time(new_inode);
                if (dir_de)
                        drop_nlink(new_inode);
                inode_dec_link_count(new_inode);