Files
linux/fs
Chao Yu 7a370ecb6f f2fs: fix to update time in lazytime mode
[ Upstream commit fe1897eaa6 ]

generic/018 reports an inconsistent status of atime, the
testcase is as below:
- open file with O_SYNC
- write file to construct fraged space
- calc md5 of file
- record {a,c,m}time
- defrag file --- do nothing
- umount & mount
- check {a,c,m}time

The root cause is, as f2fs enables lazytime by default, atime
update will dirty vfs inode, rather than dirtying f2fs inode (by set
with FI_DIRTY_INODE), so later f2fs_write_inode() called from VFS will
fail to update inode page due to our skip:

f2fs_write_inode()
	if (is_inode_flag_set(inode, FI_DIRTY_INODE))
		return 0;

So eventually, after evict(), we lose last atime for ever.

To fix this issue, we need to check whether {a,c,m,cr}time is
consistent in between inode cache and inode page, and only skip
f2fs_update_inode() if f2fs inode is not dirty and time is
consistent as well.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-01-04 19:12:37 +01:00
..
2019-08-06 19:06:51 +02:00
2019-12-13 08:52:23 +01:00
2019-12-17 20:35:18 +01:00
2019-12-13 08:52:36 +01:00
2018-08-17 16:20:28 -07:00
2019-12-13 08:51:59 +01:00
2018-05-22 14:27:52 -04:00
2018-08-17 16:20:27 -07:00
2018-05-22 14:27:52 -04:00
2019-11-20 18:46:04 +01:00
2019-05-02 09:58:59 +02:00
2018-07-03 16:44:45 -04:00
2018-06-05 19:23:26 +02:00
2018-06-11 08:22:34 -07:00