| From 584748c19c960e7f31e02d8af5762ec5ac750e25 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 19 Jun 2020 22:51:29 -0400 |
| Subject: cifs: update ctime and mtime during truncate |
| |
| From: Zhang Xiaoxu <zhangxiaoxu5@huawei.com> |
| |
| [ Upstream commit 5618303d8516f8ac5ecfe53ee8e8bc9a40eaf066 ] |
| |
| As the man description of the truncate, if the size changed, |
| then the st_ctime and st_mtime fields should be updated. But |
| in cifs, we doesn't do it. |
| |
| It lead the xfstests generic/313 failed. |
| |
| So, add the ATTR_MTIME|ATTR_CTIME flags on attrs when change |
| the file size |
| |
| Reported-by: Hulk Robot <hulkci@huawei.com> |
| Signed-off-by: Zhang Xiaoxu <zhangxiaoxu5@huawei.com> |
| Signed-off-by: Steve French <stfrench@microsoft.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/cifs/inode.c | 9 +++++++++ |
| 1 file changed, 9 insertions(+) |
| |
| diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c |
| index 6045b48682752..5ae458505f630 100644 |
| --- a/fs/cifs/inode.c |
| +++ b/fs/cifs/inode.c |
| @@ -2270,6 +2270,15 @@ set_size_out: |
| if (rc == 0) { |
| cifsInode->server_eof = attrs->ia_size; |
| cifs_setsize(inode, attrs->ia_size); |
| + |
| + /* |
| + * The man page of truncate says if the size changed, |
| + * then the st_ctime and st_mtime fields for the file |
| + * are updated. |
| + */ |
| + attrs->ia_ctime = attrs->ia_mtime = current_time(inode); |
| + attrs->ia_valid |= ATTR_CTIME | ATTR_MTIME; |
| + |
| cifs_truncate_page(inode->i_mapping, inode->i_size); |
| } |
| |
| -- |
| 2.25.1 |
| |