Whamcloud - gitweb
LU-9679 llite: use lli_flags instead of lli_update_atime 39/36839/3
authorMr NeilBrown <neilb@suse.de>
Mon, 30 Sep 2019 05:10:25 +0000 (15:10 +1000)
committerOleg Drokin <green@whamcloud.com>
Sat, 14 Dec 2019 05:58:10 +0000 (05:58 +0000)
Rather than adding a new single-bit field for a flag, use the
already-existing lli_flags field.

Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: I23abc5c7c7383dca3385958f804074baaf551567
Reviewed-on: https://review.whamcloud.com/36839
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Nikitas Angelinas <nangelinas@cray.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
lustre/llite/file.c
lustre/llite/llite_internal.h
lustre/llite/namei.c
lustre/llite/pcc.c

index 63754f5..3b2ed89 100644 (file)
@@ -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;
 
index 860a89f..82e3ca6 100644 (file)
@@ -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,
index 80a9dab..c965178 100644 (file)
@@ -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, "
index 86a74cf..9e5be20 100644 (file)
@@ -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;