From: Mr NeilBrown Date: Mon, 30 Sep 2019 05:10:25 +0000 (+1000) Subject: LU-9679 llite: use lli_flags instead of lli_update_atime X-Git-Tag: 2.13.51~103 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=9b7bf1ccae3a0f6b470081e547332405c33d9820 LU-9679 llite: use lli_flags instead of lli_update_atime Rather than adding a new single-bit field for a flag, use the already-existing lli_flags field. Signed-off-by: Mr NeilBrown Change-Id: I23abc5c7c7383dca3385958f804074baaf551567 Reviewed-on: https://review.whamcloud.com/36839 Tested-by: jenkins Reviewed-by: Nikitas Angelinas Tested-by: Maloo Reviewed-by: James Simmons Reviewed-by: Andreas Dilger --- diff --git a/lustre/llite/file.c b/lustre/llite/file.c index 63754f5..3b2ed89 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -1289,11 +1289,10 @@ int ll_merge_attr(const struct lu_env *env, struct inode *inode) * POSIX. Solving this problem needs to send an RPC to MDT for each * read, this will hurt performance. */ - if (inode->i_atime.tv_sec < lli->lli_atime || - lli->lli_update_atime) { + if (ll_file_test_and_clear_flag(lli, LLIF_UPDATE_ATIME) || + inode->i_atime.tv_sec < lli->lli_atime) inode->i_atime.tv_sec = lli->lli_atime; - lli->lli_update_atime = 0; - } + inode->i_mtime.tv_sec = lli->lli_mtime; inode->i_ctime.tv_sec = lli->lli_ctime; diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h index 860a89f..82e3ca6 100644 --- a/lustre/llite/llite_internal.h +++ b/lustre/llite/llite_internal.h @@ -134,10 +134,6 @@ struct ll_inode_info { s64 lli_ctime; spinlock_t lli_agl_lock; - /* update atime from MDS no matter if it's older than - * local inode atime. */ - unsigned int lli_update_atime:1; - /* Try to make the d::member and f::member are aligned. Before using * these members, make clear whether it is directory or not. */ union { @@ -285,6 +281,9 @@ enum ll_file_flags { LLIF_XATTR_CACHE = 2, /* Project inherit */ LLIF_PROJECT_INHERIT = 3, + /* update atime from MDS even if it's older than local inode atime. */ + LLIF_UPDATE_ATIME = 4, + }; static inline void ll_file_set_flag(struct ll_inode_info *lli, diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c index 80a9daba..c965178 100644 --- a/lustre/llite/namei.c +++ b/lustre/llite/namei.c @@ -307,7 +307,7 @@ static void ll_lock_cancel_bits(struct ldlm_lock *lock, __u64 to_cancel) lli = ll_i2info(inode); if (bits & MDS_INODELOCK_UPDATE) - lli->lli_update_atime = 1; + ll_file_set_flag(lli, LLIF_UPDATE_ATIME); if ((bits & MDS_INODELOCK_UPDATE) && S_ISDIR(inode->i_mode)) { CDEBUG(D_INODE, "invalidating inode "DFID" lli = %p, " diff --git a/lustre/llite/pcc.c b/lustre/llite/pcc.c index 86a74cf..9e5be20 100644 --- a/lustre/llite/pcc.c +++ b/lustre/llite/pcc.c @@ -1786,11 +1786,10 @@ int pcc_inode_getattr(struct inode *inode, bool *cached) GOTO(out, rc); ll_inode_size_lock(inode); - if (inode->i_atime.tv_sec < lli->lli_atime || - lli->lli_update_atime) { + if (ll_file_test_and_clear_flag(lli, LLIF_UPDATE_ATIME) || + inode->i_atime.tv_sec < lli->lli_atime) inode->i_atime.tv_sec = lli->lli_atime; - lli->lli_update_atime = 0; - } + inode->i_mtime.tv_sec = lli->lli_mtime; inode->i_ctime.tv_sec = lli->lli_ctime;