nilfs2: use time64_t internally
The superblock and segment timestamps are used only internally in nilfs2 and can be read out using sysfs. Since we are using the old 'get_seconds()' interface and store the data as timestamps, the behavior differs slightly between 64-bit and 32-bit kernels, the latter will show incorrect timestamps after 2038 in sysfs, and presumably fail completely in 2106 as comparisons go wrong. This changes nilfs2 to use time64_t with ktime_get_real_seconds() to handle timestamps, making the behavior consistent and correct on both 32-bit and 64-bit machines. The on-disk format already uses 64-bit timestamps, so nothing changes there. Link: http://lkml.kernel.org/r/20180122211050.1286441-1-arnd@arndb.de Signed-off-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp> Cc: Jens Axboe <axboe@kernel.dk> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jan Kara <jack@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committad av
Linus Torvalds

förälder
ca3a45697b
incheckning
fb04b91bc2
@@ -116,7 +116,7 @@ struct the_nilfs {
|
||||
*/
|
||||
struct buffer_head *ns_sbh[2];
|
||||
struct nilfs_super_block *ns_sbp[2];
|
||||
time_t ns_sbwtime;
|
||||
time64_t ns_sbwtime;
|
||||
unsigned int ns_sbwcount;
|
||||
unsigned int ns_sbsize;
|
||||
unsigned int ns_mount_state;
|
||||
@@ -131,8 +131,8 @@ struct the_nilfs {
|
||||
__u64 ns_nextnum;
|
||||
unsigned long ns_pseg_offset;
|
||||
__u64 ns_cno;
|
||||
time_t ns_ctime;
|
||||
time_t ns_nongc_ctime;
|
||||
time64_t ns_ctime;
|
||||
time64_t ns_nongc_ctime;
|
||||
atomic_t ns_ndirtyblks;
|
||||
|
||||
/*
|
||||
@@ -267,7 +267,7 @@ struct nilfs_root {
|
||||
|
||||
static inline int nilfs_sb_need_update(struct the_nilfs *nilfs)
|
||||
{
|
||||
u64 t = get_seconds();
|
||||
u64 t = ktime_get_real_seconds();
|
||||
|
||||
return t < nilfs->ns_sbwtime ||
|
||||
t > nilfs->ns_sbwtime + nilfs->ns_sb_update_freq;
|
||||
|
Referens i nytt ärende
Block a user