From 9a484620bdd9ac2c3b25751334e1435e6472daff Mon Sep 17 00:00:00 2001 From: James Simmons Date: Tue, 19 Dec 2017 13:20:45 -0500 Subject: [PATCH] LU-9019 llite: change lli_glimpse_time to ktime Currently lli_glimpse_time is in jiffies which can vary between platforms. Migrate to ktime since we need more than second time resolution that is consistent on any platform. Replace the last cfs_time_current_sec() with ktime_get_real_seconds(). Change-Id: I352c3adbd07d9dadb7e5dbe180447a1cb18a48d2 Signed-off-by: James Simmons Reviewed-on: https://review.whamcloud.com/30601 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Dmitry Eremin Reviewed-by: Mike Pershin Reviewed-by: John L. Hammond Reviewed-by: Oleg Drokin --- lustre/llite/llite_internal.h | 4 ++-- lustre/llite/llite_lib.c | 4 ++-- lustre/llite/statahead.c | 12 +++++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h index a01a7c0..2d73dcf 100644 --- a/lustre/llite/llite_internal.h +++ b/lustre/llite/llite_internal.h @@ -191,7 +191,7 @@ struct ll_inode_info { struct range_lock_tree lli_write_tree; struct rw_semaphore lli_glimpse_sem; - cfs_time_t lli_glimpse_time; + ktime_t lli_glimpse_time; struct list_head lli_agl_list; __u64 lli_agl_index; @@ -1249,7 +1249,7 @@ static inline int ll_glimpse_size(struct inode *inode) down_read(&lli->lli_glimpse_sem); rc = cl_glimpse_size(inode); - lli->lli_glimpse_time = cfs_time_current(); + lli->lli_glimpse_time = ktime_get(); up_read(&lli->lli_glimpse_sem); return rc; } diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c index 89d438a..ee4b1a2 100644 --- a/lustre/llite/llite_lib.c +++ b/lustre/llite/llite_lib.c @@ -948,7 +948,7 @@ void ll_lli_init(struct ll_inode_info *lli) init_rwsem(&lli->lli_trunc_sem); range_lock_tree_init(&lli->lli_write_tree); init_rwsem(&lli->lli_glimpse_sem); - lli->lli_glimpse_time = 0; + lli->lli_glimpse_time = ktime_set(0, 0); INIT_LIST_HEAD(&lli->lli_agl_list); lli->lli_agl_index = 0; lli->lli_async_rc = 0; @@ -2518,7 +2518,7 @@ struct md_op_data *ll_prep_md_op_data(struct md_op_data *op_data, op_data->op_name = name; op_data->op_namelen = namelen; op_data->op_mode = mode; - op_data->op_mod_time = cfs_time_current_sec(); + op_data->op_mod_time = ktime_get_real_seconds(); op_data->op_fsuid = from_kuid(&init_user_ns, current_fsuid()); op_data->op_fsgid = from_kgid(&init_user_ns, current_fsgid()); op_data->op_cap = cfs_curproc_cap_pack(); diff --git a/lustre/llite/statahead.c b/lustre/llite/statahead.c index 4022398..40264cd 100644 --- a/lustre/llite/statahead.c +++ b/lustre/llite/statahead.c @@ -493,10 +493,11 @@ static void ll_sai_put(struct ll_statahead_info *sai) static void ll_agl_trigger(struct inode *inode, struct ll_statahead_info *sai) { struct ll_inode_info *lli = ll_i2info(inode); - __u64 index = lli->lli_agl_index; + u64 index = lli->lli_agl_index; + ktime_t expire; int rc; - ENTRY; + ENTRY; LASSERT(list_empty(&lli->lli_agl_list)); /* AGL maybe fall behind statahead with one entry */ @@ -539,8 +540,9 @@ static void ll_agl_trigger(struct inode *inode, struct ll_statahead_info *sai) * relative rare. AGL can ignore such case, and it will not muchly * affect the performance. */ - if (lli->lli_glimpse_time != 0 && - cfs_time_before(cfs_time_shift(-1), lli->lli_glimpse_time)) { + expire = ktime_sub_ns(ktime_get(), NSEC_PER_SEC); + if (ktime_to_ns(lli->lli_glimpse_time) && + ktime_before(expire, lli->lli_glimpse_time)) { up_write(&lli->lli_glimpse_sem); lli->lli_agl_index = 0; iput(inode); @@ -552,7 +554,7 @@ static void ll_agl_trigger(struct inode *inode, struct ll_statahead_info *sai) cl_agl(inode); lli->lli_agl_index = 0; - lli->lli_glimpse_time = cfs_time_current(); + lli->lli_glimpse_time = ktime_get(); up_write(&lli->lli_glimpse_sem); CDEBUG(D_READA, "Handled (init) async glimpse: inode= " -- 1.8.3.1