fs: make sure the timestamps for lazytime inodes eventually get written
authorTheodore Ts'o <tytso@mit.edu>
Tue, 17 Mar 2015 16:23:19 +0000 (12:23 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 17 Mar 2015 16:23:19 +0000 (12:23 -0400)
commita2f4870697a5bcf4a87073ec6b32dd2928c1211d
tree9be7de5dabd5b2f6ba96088d043b4a0c9b1cc510
parent13a7a6ac0a11197edcd0f756a035f472b42cdf8b
fs: make sure the timestamps for lazytime inodes eventually get written

Jan Kara pointed out that if there is an inode which is constantly
getting dirtied with I_DIRTY_PAGES, an inode with an updated timestamp
will never be written since inode->dirtied_when is constantly getting
updated.  We fix this by adding an extra field to the inode,
dirtied_time_when, so inodes with a stale dirtytime can get detected
and handled.

In addition, if we have a dirtytime inode caused by an atime update,
and there is no write activity on the file system, we need to have a
secondary system to make sure these inodes get written out.  We do
this by setting up a second delayed work structure which wakes up the
CPU much more rarely compared to writeback_expire_centisecs.

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Jan Kara <jack@suse.cz>
fs/fs-writeback.c
include/linux/fs.h