mirror of https://gitee.com/openkylin/linux.git
ubifs: tnc: use monotonic znode timestamp
The tnc uses get_seconds() based timestamps to check the age of a znode, which has two problems: on 32-bit architectures this may overflow in 2038 or 2106, and it gives incorrect information when the system time is updated using settimeofday(). Using montonic timestamps with ktime_get_seconds() solves both thes problems. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
parent
0eca0b8067
commit
6cff573202
|
@ -71,7 +71,7 @@ static int shrink_tnc(struct ubifs_info *c, int nr, int age, int *contention)
|
|||
{
|
||||
int total_freed = 0;
|
||||
struct ubifs_znode *znode, *zprev;
|
||||
int time = get_seconds();
|
||||
time64_t time = ktime_get_seconds();
|
||||
|
||||
ubifs_assert(mutex_is_locked(&c->umount_mutex));
|
||||
ubifs_assert(mutex_is_locked(&c->tnc_mutex));
|
||||
|
|
|
@ -1179,7 +1179,7 @@ int ubifs_lookup_level0(struct ubifs_info *c, const union ubifs_key *key,
|
|||
{
|
||||
int err, exact;
|
||||
struct ubifs_znode *znode;
|
||||
unsigned long time = get_seconds();
|
||||
time64_t time = ktime_get_seconds();
|
||||
|
||||
dbg_tnck(key, "search key ");
|
||||
ubifs_assert(key_type(c, key) < UBIFS_INVALID_KEY);
|
||||
|
@ -1315,7 +1315,7 @@ static int lookup_level0_dirty(struct ubifs_info *c, const union ubifs_key *key,
|
|||
{
|
||||
int err, exact;
|
||||
struct ubifs_znode *znode;
|
||||
unsigned long time = get_seconds();
|
||||
time64_t time = ktime_get_seconds();
|
||||
|
||||
dbg_tnck(key, "search and dirty key ");
|
||||
|
||||
|
|
|
@ -435,7 +435,7 @@ struct ubifs_znode *ubifs_load_znode(struct ubifs_info *c,
|
|||
|
||||
zbr->znode = znode;
|
||||
znode->parent = parent;
|
||||
znode->time = get_seconds();
|
||||
znode->time = ktime_get_seconds();
|
||||
znode->iip = iip;
|
||||
|
||||
return znode;
|
||||
|
|
|
@ -758,7 +758,7 @@ struct ubifs_znode {
|
|||
struct ubifs_znode *parent;
|
||||
struct ubifs_znode *cnext;
|
||||
unsigned long flags;
|
||||
unsigned long time;
|
||||
time64_t time;
|
||||
int level;
|
||||
int child_cnt;
|
||||
int iip;
|
||||
|
|
Loading…
Reference in New Issue