]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/cifs/inode.c
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[linux.git] / fs / cifs / inode.c
index b261db34103ce929ed863e34753511ac94ec0355..4d1fcd76d022f6848c16294411d5a937e053e27a 100644 (file)
@@ -322,9 +322,9 @@ cifs_create_dfs_fattr(struct cifs_fattr *fattr, struct super_block *sb)
        fattr->cf_mode = S_IFDIR | S_IXUGO | S_IRWXU;
        fattr->cf_uid = cifs_sb->mnt_uid;
        fattr->cf_gid = cifs_sb->mnt_gid;
-       fattr->cf_atime = CURRENT_TIME;
-       fattr->cf_ctime = CURRENT_TIME;
-       fattr->cf_mtime = CURRENT_TIME;
+       ktime_get_real_ts(&fattr->cf_mtime);
+       fattr->cf_mtime = timespec_trunc(fattr->cf_mtime, sb->s_time_gran);
+       fattr->cf_atime = fattr->cf_ctime = fattr->cf_mtime;
        fattr->cf_nlink = 2;
        fattr->cf_flags |= CIFS_FATTR_DFS_REFERRAL;
 }
@@ -563,8 +563,7 @@ static int cifs_sfu_mode(struct cifs_fattr *fattr, const unsigned char *path,
 
        rc = tcon->ses->server->ops->query_all_EAs(xid, tcon, path,
                        "SETFILEBITS", ea_value, 4 /* size of buf */,
-                       cifs_sb->local_nls,
-                       cifs_remap(cifs_sb));
+                       cifs_sb);
        cifs_put_tlink(tlink);
        if (rc < 0)
                return (int)rc;
@@ -586,9 +585,10 @@ static int cifs_sfu_mode(struct cifs_fattr *fattr, const unsigned char *path,
 /* Fill a cifs_fattr struct with info from FILE_ALL_INFO */
 static void
 cifs_all_info_to_fattr(struct cifs_fattr *fattr, FILE_ALL_INFO *info,
-                      struct cifs_sb_info *cifs_sb, bool adjust_tz,
+                      struct super_block *sb, bool adjust_tz,
                       bool symlink)
 {
+       struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
        struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
 
        memset(fattr, 0, sizeof(*fattr));
@@ -598,8 +598,10 @@ cifs_all_info_to_fattr(struct cifs_fattr *fattr, FILE_ALL_INFO *info,
 
        if (info->LastAccessTime)
                fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime);
-       else
-               fattr->cf_atime = CURRENT_TIME;
+       else {
+               ktime_get_real_ts(&fattr->cf_atime);
+               fattr->cf_atime = timespec_trunc(fattr->cf_atime, sb->s_time_gran);
+       }
 
        fattr->cf_ctime = cifs_NTtimeToUnix(info->ChangeTime);
        fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime);
@@ -659,7 +661,6 @@ cifs_get_file_info(struct file *filp)
        FILE_ALL_INFO find_data;
        struct cifs_fattr fattr;
        struct inode *inode = file_inode(filp);
-       struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
        struct cifsFileInfo *cfile = filp->private_data;
        struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
        struct TCP_Server_Info *server = tcon->ses->server;
@@ -671,7 +672,7 @@ cifs_get_file_info(struct file *filp)
        rc = server->ops->query_file_info(xid, tcon, &cfile->fid, &find_data);
        switch (rc) {
        case 0:
-               cifs_all_info_to_fattr(&fattr, &find_data, cifs_sb, false,
+               cifs_all_info_to_fattr(&fattr, &find_data, inode->i_sb, false,
                                       false);
                break;
        case -EREMOTE:
@@ -753,7 +754,7 @@ cifs_get_inode_info(struct inode **inode, const char *full_path,
        }
 
        if (!rc) {
-               cifs_all_info_to_fattr(&fattr, data, cifs_sb, adjust_tz,
+               cifs_all_info_to_fattr(&fattr, data, sb, adjust_tz,
                                       symlink);
        } else if (rc == -EREMOTE) {
                cifs_create_dfs_fattr(&fattr, sb);
@@ -1363,9 +1364,9 @@ int cifs_unlink(struct inode *dir, struct dentry *dentry)
                cifs_inode = CIFS_I(inode);
                cifs_inode->time = 0;   /* will force revalidate to get info
                                           when needed */
-               inode->i_ctime = current_fs_time(sb);
+               inode->i_ctime = current_time(inode);
        }
-       dir->i_ctime = dir->i_mtime = current_fs_time(sb);
+       dir->i_ctime = dir->i_mtime = current_time(dir);
        cifs_inode = CIFS_I(dir);
        CIFS_I(dir)->time = 0;  /* force revalidate of dir as well */
 unlink_out:
@@ -1633,7 +1634,7 @@ int cifs_rmdir(struct inode *inode, struct dentry *direntry)
        cifsInode->time = 0;
 
        d_inode(direntry)->i_ctime = inode->i_ctime = inode->i_mtime =
-               current_fs_time(inode->i_sb);
+               current_time(inode);
 
 rmdir_exit:
        kfree(full_path);
@@ -1806,7 +1807,7 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry,
        CIFS_I(source_dir)->time = CIFS_I(target_dir)->time = 0;
 
        source_dir->i_ctime = source_dir->i_mtime = target_dir->i_ctime =
-               target_dir->i_mtime = current_fs_time(source_dir->i_sb);
+               target_dir->i_mtime = current_time(source_dir);
 
 cifs_rename_exit:
        kfree(info_buf_source);