* from @cfids->entries.  Caller will put last reference if the latter.
         */
        if (cfid->has_lease && cfid->time) {
+               cfid->last_access_time = jiffies;
                spin_unlock(&cfids->cfid_list_lock);
                *ret_cfid = cfid;
                kfree(utf16_path);
                cfid->file_all_info_is_valid = true;
 
        cfid->time = jiffies;
+       cfid->last_access_time = jiffies;
        spin_unlock(&cfids->cfid_list_lock);
        /* At this point the directory handle is fully cached */
        rc = 0;
 
        spin_lock(&cfids->cfid_list_lock);
        list_for_each_entry_safe(cfid, q, &cfids->entries, entry) {
-               if (cfid->time &&
-                   time_after(jiffies, cfid->time + HZ * dir_cache_timeout)) {
+               if (cfid->last_access_time &&
+                   time_after(jiffies, cfid->last_access_time + HZ * dir_cache_timeout)) {
                        cfid->on_list = false;
                        list_move(&cfid->entry, &entry);
                        cfids->num_entries--;
 
        bool on_list:1;
        bool file_all_info_is_valid:1;
        unsigned long time; /* jiffies of when lease was taken */
+       unsigned long last_access_time; /* jiffies of when last accessed */
        struct kref refcount;
        struct cifs_fid fid;
        spinlock_t fid_lock;