diff options
author | Theodore Ts'o <tytso@mit.edu> | 2015-03-17 12:23:19 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2015-03-17 12:23:19 -0400 |
commit | a2f4870697a5bcf4a87073ec6b32dd2928c1211d (patch) | |
tree | 9be7de5dabd5b2f6ba96088d043b4a0c9b1cc510 /include/linux/fs.h | |
parent | 13a7a6ac0a11197edcd0f756a035f472b42cdf8b (diff) | |
download | blackbird-op-linux-a2f4870697a5bcf4a87073ec6b32dd2928c1211d.tar.gz blackbird-op-linux-a2f4870697a5bcf4a87073ec6b32dd2928c1211d.zip |
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>
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r-- | include/linux/fs.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index b4d71b5e1ff2..f4131e8ead74 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -604,6 +604,7 @@ struct inode { struct mutex i_mutex; unsigned long dirtied_when; /* jiffies of first dirtying */ + unsigned long dirtied_time_when; struct hlist_node i_hash; struct list_head i_wb_list; /* backing dev IO list */ |