Merge remote-tracking branch 'ovl/rename2' into for-linus
[cascardo/linux.git] / fs / fat / namei_msdos.c
index 664655b..7d6a105 100644 (file)
@@ -283,7 +283,7 @@ static int msdos_create(struct inode *dir, struct dentry *dentry, umode_t mode,
                goto out;
        }
 
-       ts = CURRENT_TIME_SEC;
+       ts = current_time(dir);
        err = msdos_add_entry(dir, msdos_name, 0, is_hid, 0, &ts, &sinfo);
        if (err)
                goto out;
@@ -330,7 +330,7 @@ static int msdos_rmdir(struct inode *dir, struct dentry *dentry)
        drop_nlink(dir);
 
        clear_nlink(inode);
-       inode->i_ctime = CURRENT_TIME_SEC;
+       inode->i_ctime = current_time(inode);
        fat_detach(inode);
 out:
        mutex_unlock(&MSDOS_SB(sb)->s_lock);
@@ -364,7 +364,7 @@ static int msdos_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
                goto out;
        }
 
-       ts = CURRENT_TIME_SEC;
+       ts = current_time(dir);
        cluster = fat_alloc_new_dir(dir, &ts);
        if (cluster < 0) {
                err = cluster;
@@ -416,7 +416,7 @@ static int msdos_unlink(struct inode *dir, struct dentry *dentry)
        if (err)
                goto out;
        clear_nlink(inode);
-       inode->i_ctime = CURRENT_TIME_SEC;
+       inode->i_ctime = current_time(inode);
        fat_detach(inode);
 out:
        mutex_unlock(&MSDOS_SB(sb)->s_lock);
@@ -481,7 +481,7 @@ static int do_msdos_rename(struct inode *old_dir, unsigned char *old_name,
                                mark_inode_dirty(old_inode);
 
                        old_dir->i_version++;
-                       old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME_SEC;
+                       old_dir->i_ctime = old_dir->i_mtime = current_time(old_dir);
                        if (IS_DIRSYNC(old_dir))
                                (void)fat_sync_inode(old_dir);
                        else
@@ -490,7 +490,7 @@ static int do_msdos_rename(struct inode *old_dir, unsigned char *old_name,
                }
        }
 
-       ts = CURRENT_TIME_SEC;
+       ts = current_time(old_inode);
        if (new_inode) {
                if (err)
                        goto out;
@@ -596,12 +596,16 @@ error_inode:
 
 /***** Rename, a wrapper for rename_same_dir & rename_diff_dir */
 static int msdos_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 super_block *sb = old_dir->i_sb;
        unsigned char old_msdos_name[MSDOS_NAME], new_msdos_name[MSDOS_NAME];
        int err, is_hid;
 
+       if (flags & ~RENAME_NOREPLACE)
+               return -EINVAL;
+
        mutex_lock(&MSDOS_SB(sb)->s_lock);
 
        err = msdos_format_name(old_dentry->d_name.name,