|
@@ -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;
|
|
|
}
|
|
@@ -586,9 +586,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 +599,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 +662,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 +673,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 +755,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 +1365,9 @@ out_reval:
|
|
|
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 +1635,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 +1808,7 @@ unlink_target:
|
|
|
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);
|