mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 05:04:09 +08:00
fs: cifs: Delete usage of timespec64_trunc
timestamp_truncate() is the replacement api for timespec64_trunc. timestamp_truncate() additionally clamps timestamps to make sure the timestamps lie within the permitted range for the filesystem. Truncate the timestamps in the struct cifs_attr at the site of assignment to inode times. This helps us use the right fs api timestamp_trucate() to perform the truncation. Also update the ktime_get_* api to match the one used in current_time(). This allows for timestamps to be updated the same way always. Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com> Cc: stfrench@microsoft.com Cc: linux-cifs@vger.kernel.org Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
97acf83de4
commit
918c900987
@ -113,6 +113,7 @@ cifs_revalidate_cache(struct inode *inode, struct cifs_fattr *fattr)
|
||||
}
|
||||
|
||||
/* revalidate if mtime or size have changed */
|
||||
fattr->cf_mtime = timestamp_truncate(fattr->cf_mtime, inode);
|
||||
if (timespec64_equal(&inode->i_mtime, &fattr->cf_mtime) &&
|
||||
cifs_i->server_eof == fattr->cf_eof) {
|
||||
cifs_dbg(FYI, "%s: inode %llu is unchanged\n",
|
||||
@ -162,6 +163,9 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr)
|
||||
cifs_revalidate_cache(inode, fattr);
|
||||
|
||||
spin_lock(&inode->i_lock);
|
||||
fattr->cf_mtime = timestamp_truncate(fattr->cf_mtime, inode);
|
||||
fattr->cf_atime = timestamp_truncate(fattr->cf_atime, inode);
|
||||
fattr->cf_ctime = timestamp_truncate(fattr->cf_ctime, inode);
|
||||
/* we do not want atime to be less than mtime, it broke some apps */
|
||||
if (timespec64_compare(&fattr->cf_atime, &fattr->cf_mtime) < 0)
|
||||
inode->i_atime = fattr->cf_mtime;
|
||||
@ -329,8 +333,7 @@ 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;
|
||||
ktime_get_real_ts64(&fattr->cf_mtime);
|
||||
fattr->cf_mtime = timespec64_trunc(fattr->cf_mtime, sb->s_time_gran);
|
||||
ktime_get_coarse_real_ts64(&fattr->cf_mtime);
|
||||
fattr->cf_atime = fattr->cf_ctime = fattr->cf_mtime;
|
||||
fattr->cf_nlink = 2;
|
||||
fattr->cf_flags = CIFS_FATTR_DFS_REFERRAL;
|
||||
@ -609,10 +612,8 @@ cifs_all_info_to_fattr(struct cifs_fattr *fattr, FILE_ALL_INFO *info,
|
||||
|
||||
if (info->LastAccessTime)
|
||||
fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime);
|
||||
else {
|
||||
ktime_get_real_ts64(&fattr->cf_atime);
|
||||
fattr->cf_atime = timespec64_trunc(fattr->cf_atime, sb->s_time_gran);
|
||||
}
|
||||
else
|
||||
ktime_get_coarse_real_ts64(&fattr->cf_atime);
|
||||
|
||||
fattr->cf_ctime = cifs_NTtimeToUnix(info->ChangeTime);
|
||||
fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime);
|
||||
|
Loading…
Reference in New Issue
Block a user